PostgreSQL のアップグレードの失敗

Apigee Edge のドキュメントを表示しています。
Apigee X のドキュメント
詳細

症状

PostgreSQL データベースの更新時にエラーが発生します。

エラー メッセージ

ERROR: PostgreSQL Upgrade FAILED 

考えられる原因

原因 説明 トラブルシューティングの手順は、次の場合に適用されます。
PostgreSQL 構成ファイルのレプリケーション設定が正しくない アップグレード中にレプリケーション設定が正しくないため、PostgreSQL のアップグレードが失敗します。 Edge Private Cloud ユーザー
PostgreSQL のインストールが apigee ユーザー以外の別のインストール ユーザーによって実行されている PostgreSQL が最初にインストールされたときに、インストール ユーザーとして別のユーザーが指定されていたため、アップグレードが失敗します。 Edge Private Cloud ユーザー

共通の診断手順

PostgreSQL データベースのアップグレード中にエラーが発生した場合は、まず次の診断手順を実施します。

  1. PostgreSQL データフォルダの名前を変更します。

    mv /opt/apigee/data/apigee-postgresql/pgdata /opt/apigee/data/apigee-postgresql/pgdata-bkp
    
  2. 元のバックアップ データが /opt/apigee/data/apigee-postgresql/pgdata-version.old/ という名前のフォルダにあることを確認します。

    例:

    /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/
    
  3. 次のコマンドを使用して、/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
  4. db_upgrade コマンドを再実行します。

    /opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade
    
  5. 次のエラーが表示される場合:

    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 
    
  6. db_upgrade コマンドを再実行します。

    /opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade
    

    問題が解決しない場合は、原因: PostgreSQL 構成ファイルのレプリケーション設定が正しくないをご覧ください。

原因: PostgreSQL 構成ファイルのレプリケーション設定が正しくない

診断

  1. PostgreSQL 構成ファイルが /opt/apigee/apigee-postgresql/conf/pg_hba.conf であるかどうかを確認する レプリケーション設定が完了しているか。
  2. このファイルに想定されるレプリケーション設定がある場合は、「apigee」ユーザー以外の別のインストール ユーザーが実行した PostgreSQL インストールに進みます。
  3. 解決しない場合は、解決策に進みます。

解決策

  1. 次のコマンドを使用して、PostgreSQL データフォルダの名前を変更します。

    mv /opt/apigee/data/apigee-postgresql/pgdata /opt/apigee/data/apigee-postgresql/pgdata-bkp
    
  2. 元のバックアップ データが /opt/apigee/data/apigee-postgresql/pgdata-version.old/ という名前のフォルダにあることを確認します。

    例:

    /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/
    
  3. 次のコマンドを使用して、バックアップ データを /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 
    
  4. スレーブホストを変更した場合は、/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 
    
  5. apigee-postgresql サービスを再起動して、プロパティが設定されていることを確認します。 上記のステップ 4 が構成ファイル pg_hba.conf に更新されます。

    /opt/apigee/apigee-service/bin/apigee-service apigee-postgresql restart
    
  6. 次のコマンドを使用して構成ファイル pg_hba.conf を変更不可に設定し、PostgreSQL のアップグレード中に誤った設定で更新されないようにします。

    chattr +i /opt/apigee/apigee-postgresql/conf/pg_hba.conf 
    
  7. db_upgrade コマンドを再実行します。

    /opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade
    
  8. 構成ファイル pg_hba.conf の変更不可能な設定を削除します。

    chattr -i /opt/apigee/apigee-postgresql/conf/pg_hba.conf
    

原因: apigee ユーザー以外のインストール ユーザーによって PostgreSQL のインストールが実行された

診断

  1. 次の手順に沿って、rolesupertrue に設定されている他のユーザーがいないかどうかを確認します。

    1. PostgreSQL ノードで、次のコマンドを使用して PostgreSQL にログインします。

      psql -h $(hostname -i)  -U apigee
      
    2. 次の SQL クエリを実行します。

      select * from pg_authid;
      
    3. rolesupertrue に設定されているユーザーが複数存在するかどうかを確認します。ある場合は、apigee ユーザーではなく別のユーザーがインストール ユーザーとして設定されているため、PostgreSQL のアップグレードが失敗しています。rolesuper ロールとそれより低い OID を持つユーザーは、インストール ユーザーと見なされます。

      この種のロールの問題を確認するには、次の SQL クエリを実行します。

      select oid,rolname,rolsuper from pg_roles;
      select * from pg_user;
      

解決策

  1. 次のコマンドを使用して PostgreSQL にログインします。

    psql -h $(hostname -i)  -U apigee
    
  2. 古い DB の既存の apigee ロールの名前を一時ユーザー(apigee2 など)に変更します。

    update pg_authid set rolname ='apigee2' where rolname = 'apigee'; 
    
  3. 別のインストール ユーザー srcapige があるとします。srcapige の名前を変更する ロールを apigee に付与します。

    update pg_authid set rolname ='apigee' where rolname = 'srcapigee';
    
  4. apigee2 の名前を srcapige ユーザーに変更します。

    update pg_authid set rolname ='secapigee' where rolname = 'apigee2'; 
    
  5. 名前を変更したすべてのユーザーのパスワードを更新します。

    ALTER ROLE apigee WITH PASSWORD '<secret>'; 
    ALTER ROLE srcapige WITH PASSWORD '<secret>'; 
    
  6. 次のコマンドを使用して、PostgreSQL データフォルダの名前を変更します。

    mv /opt/apigee/data/apigee-postgresql/pgdata /opt/apigee/data/apigee-postgresql/pgdata-bkp
    
  7. /opt/apigee/data/apigee-postgresql/pgdata-version.old/ という名前のフォルダ内に元のバックアップ データがあることを確認します。

    例:

    /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/
    
  8. 次のコマンドを使用して、/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 
    
  9. db_upgrade コマンドを再実行します。

    /opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade 
    
  10. すべての 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 サポートに連絡し、この情報をサポートチームと共有します。

  1. /opt/apigee/apigee-postgresql/lib/actions/db_upgrade ファイルの 2 行目に set -x を追加します。
  2. 一般的な診断手順に沿って、 サポートチームへの db_upgrade コマンドのコンソール出力:

    opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade
    
  3. サポートチームに次のログファイルを提供します。

    /opt/apigee/var/log/apigee-postgresql/apigee-postgresql.log
    /opt/apigee/var/log/apigee-postgresql/update.log
    
  4. 次のオペレーティング システム コマンドの出力を提供して、代替が 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 バイナリがアップグレードされたバージョンにポイントされます。それ以外の場合、バイナリは古いバージョンを指します。 問題が発生する可能性があります。