Apigee Edge のドキュメントを表示しています。
Apigee X のドキュメント。 詳細
症状
PostgreSQL データベースの更新時にエラーが発生します。
エラー メッセージ
ERROR: PostgreSQL Upgrade FAILED
考えられる原因
原因 | 説明 | トラブルシューティングの手順は、次の場合に適用されます。 |
---|---|---|
PostgreSQL 構成ファイルのレプリケーション設定が正しくない | アップグレード中にレプリケーション設定が正しくないため、PostgreSQL のアップグレードが失敗します。 | Edge Private Cloud ユーザー |
PostgreSQL のインストールが apigee ユーザー以外の別のインストール ユーザーによって実行されている | 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 trust
apigee-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 pgsql
update-alternatives --list psql
または
update-alternatives --list pgsql
代替が
manual
に設定されている場合は、次のコマンドを使用してauto
に設定できます。update-alternatives --auto psql
代替を
auto
に設定すると、psql
バイナリとpostgres
バイナリがアップグレードされたバージョンにポイントされます。それ以外の場合、バイナリは古いバージョンを指します。 問題が発生する可能性があります。