Apigee Edge のドキュメントを表示しています。
Apigee X のドキュメントに移動します。 情報
症状
PostgreSQL データベースの更新時にエラーが発生します。
エラー メッセージ
ERROR: PostgreSQL Upgrade FAILED
考えられる原因
| 原因 | 説明 | トラブルシューティングの手順の適用対象 |
|---|---|---|
| PostgreSQL 構成ファイル内のレプリケーション設定が正しくない | アップグレード中にレプリケーション設定が正しくないため、PostgreSQL のアップグレードが失敗します。 | Edge Private Cloud ユーザー |
| apigee ユーザー以外の別のインストール ユーザーによって実行された PostgreSQL のインストール | PostgreSQL が別のユーザーをインストール ユーザーとして最初にインストールされたため、アップグレードに失敗します。 | Edge Private Cloud ユーザー |
共通の診断手順
PostgreSQL データベースのアップグレード時にエラーが発生した場合は、まず次の診断手順を行います。
PostgreSQL データフォルダの名前を変更します。
mv /opt/apigee/data/apigee-postgresql/pgdata /opt/apigee/data/apigee-postgresql/pgdata-bkp
元のバックアップ データが
/opt/apigee/data/apigee-postgresql/pgdata-version.old/という名前のフォルダにあることを確認します。次に例を示します。
/opt/apigee/data/apigee-postgresql/pgdata-9.6.old/次のコマンドを使用して、
/opt/apigee/data/apigee-postgresql/pgdata-version.old/のバックアップ データを/opt/apigee/data/apigee-postgresql/pgdataに復元します。mv /opt/apigee/data/apigee-postgresql/pgdata-version.old/ /opt/apigee/data/apigee-postgresql/pgdata
次に例を示します。
mv /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/ /opt/apigee/data/apigee-postgresql/pgdata
db_upgradeコマンドを再実行します。/opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade
次のエラーが表示された場合...
pg_resetxlog: could not open file "global/pg_control" for reading: No such file or directory次のコマンドを使用して、
pg_control.oldファイルの名前をpg_controlに変更します。mv /apigee/apigeeinst/data/apigee-postgresql/pgdata/global/pg_control.old /apigee/apigeeinst/data/apigee-postgresql/pgdata/global/pg_control
db_upgradeコマンドを再実行します。/opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade
問題が解決しない場合は、原因: PostgreSQL 構成ファイルのレプリケーション設定が正しくないに進みます。
原因: PostgreSQL 構成ファイルのレプリケーション設定が正しくない
診断
- PostgreSQL 構成ファイル
/opt/apigee/apigee-postgresql/conf/pg_hba.confに、目的のレプリケーション設定があるかどうかを確認します。 - このファイルに想定されるレプリケーション設定が含まれている場合は、「apigee」ユーザー以外の別のインストール ユーザーによって実行された PostgreSQL のインストールに進みます。
- 一致しない場合は、解決策に進みます。
解決策
次のコマンドを使用して、PostgreSQL データフォルダの名前を変更します。
mv /opt/apigee/data/apigee-postgresql/pgdata /opt/apigee/data/apigee-postgresql/pgdata-bkp
元のバックアップ データが
/opt/apigee/data/apigee-postgresql/pgdata-version.old/という名前のフォルダにあることを確認します。次に例を示します。
/opt/apigee/data/apigee-postgresql/pgdata-9.6.old/次のコマンドを使用して、
/opt/apigee/data/apigee-postgresql/pgdata-version.old/から/opt/apigee/data/apigee-postgresql/pgdataにバックアップ データを復元します。mv /opt/apigee/data/apigee-postgresql/pgdata-version.old/ /opt/apigee/data/apigee-postgresql/pgdata
次に例を示します。
mv /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/ /opt/apigee/data/apigee-postgresql/pgdata
スレーブホストを変更した場合は、
/opt/apigee/customer/application/postgresql.propertiesの次のプロパティを更新して、構成ファイルpg_hba.confを更新する必要があります。conf_pg_hba_replication.connection=host replication apigee existing_slave_ip/32 trust\ \nhost replication apigee new_slave_ip/32 trustapigee-postgresqlサービスを再起動して、上記の手順 4 で設定したプロパティが構成ファイルpg_hba.confに更新されるようにします。/opt/apigee/apigee-service/bin/apigee-service apigee-postgresql restart
次のコマンドを使用して構成ファイル
pg_hba.confを不変にします。これにより、PostgreSQL のアップグレード中に誤った設定で更新されないようにします。chattr +i /opt/apigee/apigee-postgresql/conf/pg_hba.conf
db_upgradeコマンドを再実行します。/opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade
構成ファイル
pg_hba.confの不変設定を削除します。chattr -i /opt/apigee/apigee-postgresql/conf/pg_hba.conf
原因: apigee ユーザー以外の別のインストール ユーザーによって PostgreSQL のインストールが実行された
診断
次の手順で、rolesuper が true に設定されている他のユーザーがいるかどうかを確認します。
PostgreSQL ノードで、次のコマンドを使用して PostgreSQL にログインします。
psql -h $(hostname -i) -U apigee
次の SQL クエリを実行します。
select * from pg_authid;
rolesuper が true に設定されているユーザーが複数存在するかどうかを確認します。別のユーザーが apigee ユーザーではなくインストール ユーザーとして設定されているため、PostgreSQL のアップグレードが失敗しています。rolesuper ロールを持ち、OID が小さいユーザーは、インストール ユーザーと見なされます。
この種の問題を確認するには、次の SQL クエリを実行します。
select oid,rolname,rolsuper from pg_roles; select * from pg_user;
解決策
次のコマンドを使用して PostgreSQL にログインします。
psql -h $(hostname -i) -U apigee
古い DB の既存の
apigeeロールの名前を一時ユーザー(apigee2など)に変更します。update pg_authid set rolname ='apigee2' where rolname = 'apigee';
別のインストール ユーザー
srcapigeがいたとします。srcapigeロールの名前をapigeeに変更します。update pg_authid set rolname ='apigee' where rolname = 'srcapigee';
apigee2をsrcapigeユーザーに名前変更します。update pg_authid set rolname ='secapigee' where rolname = 'apigee2';
名前を変更したすべてのユーザーのパスワードを更新します。
ALTER ROLE apigee WITH PASSWORD '<secret>'; ALTER ROLE srcapige WITH PASSWORD '<secret>';次のコマンドを使用して、PostgreSQL データフォルダの名前を変更します。
mv /opt/apigee/data/apigee-postgresql/pgdata /opt/apigee/data/apigee-postgresql/pgdata-bkp
/opt/apigee/data/apigee-postgresql/pgdata-version.old/という名前のフォルダ内に元のバックアップ データがあることを確認します。次に例を示します。
/opt/apigee/data/apigee-postgresql/pgdata-9.6.old/次のコマンドを使用して、
/opt/apigee/data/apigee-postgresql/pgdata-version.old/フォルダのデータを/opt/apigee/data/apigee-postgresql/pgdataに復元します。mv /opt/apigee/data/apigee-postgresql/pgdata-version.old/ /opt/apigee/data/apigee-postgresql/pgdata
次に例を示します。
mv /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/ /opt/apigee/data/apigee-postgresql/pgdata
db_upgradeコマンドを再実行します。/opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade
すべての
apigee-qpiddサービスとedge-qpid-serverサービスを再起動します。/opt/apigee/apigee-service/bin/apigee-service apigee-qpidd restart/opt/apigee/apigee-service/bin/apigee-service edge-qpid-server restart
問題が解決しない場合は、診断情報の収集が必要な場合に進みます。
診断情報の収集が必要な場合
上記のトラブルシューティングの手順を行っても問題が解決しない場合は、次の診断情報を収集してください。Apigee サポートに連絡して、次の情報をサポートチームに提供してください。
/opt/apigee/apigee-postgresql/lib/actions/db_upgradeファイルの 2 行目にset -xを追加します。共通の診断手順に沿って、
db_upgradeコマンドのコンソール出力をサポートチームに提供します。opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade
次のログファイルをサポートチームに提供します。
/opt/apigee/var/log/apigee-postgresql/apigee-postgresql.log /opt/apigee/var/log/apigee-postgresql/update.log次のオペレーティング システム コマンドの出力を提供して、代替が
autoに設定されているかどうかを確認します。update-alternatives --display psql
または
update-alternatives --display pgsqlupdate-alternatives --list代替が
manualに設定されている場合は、次のコマンドを使用してautoに設定できます。update-alternatives --auto psql
代替を
autoに設定すると、psqlバイナリとpostgresバイナリがアップグレードされたバージョンを指すようになります。そうしないと、バイナリが古いバージョンを指し、問題が発生する可能性があります。