PostgreSQL-Upgrade fehlgeschlagen

Sie sehen die Dokumentation zu Apigee Edge.
Zur Apigee X-Dokumentation
weitere Informationen

Symptom

Beim Aktualisieren der PostgreSQL-Datenbank wird ein Fehler angezeigt.

Fehlermeldung

ERROR: PostgreSQL Upgrade FAILED 

Mögliche Ursachen

Ursache Beschreibung Die Anleitung zur Fehlerbehebung gilt für
Falsche Replikationseinstellungen in der PostgreSQL-Konfigurationsdatei Das PostgreSQL-Upgrade schlägt aufgrund falscher Replikationseinstellungen während des Upgrades fehl. Edge Private Cloud-Nutzer
PostgreSQL-Installation, die von einem anderen Installationsnutzer als dem Apigee-Nutzer ausgeführt wird PostgreSQL wurde anfangs mit einem anderen Nutzer als Installationsnutzer installiert, was zu einem Upgradefehler führt. Edge Private Cloud-Nutzer

Häufige Diagnoseschritte

Wenn beim Upgrade der PostgreSQL-Datenbank ein Fehler auftritt, führen Sie zuerst die folgenden Diagnoseschritte aus:

  1. Benennen Sie den PostgreSQL-Datenordner um:

    mv /opt/apigee/data/apigee-postgresql/pgdata /opt/apigee/data/apigee-postgresql/pgdata-bkp
    
  2. Achten Sie darauf, dass sich Ihre ursprünglichen Sicherungsdaten in einem Ordner mit dem Namen /opt/apigee/data/apigee-postgresql/pgdata-version.old/ befinden

    Beispiel:

    /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/
    
  3. Stellen Sie die Sicherungsdaten in /opt/apigee/data/apigee-postgresql/pgdata-version.old/ mit dem folgenden Befehl in /opt/apigee/data/apigee-postgresql/pgdata wieder her:

    mv /opt/apigee/data/apigee-postgresql/pgdata-version.old/ /opt/apigee/data/apigee-postgresql/pgdata 
    

    Beispiel:

    mv /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/ /opt/apigee/data/apigee-postgresql/pgdata
  4. Führen Sie den Befehl db_upgrade noch einmal aus:

    /opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade
    
  5. Wenn Sie folgende Fehlermeldung erhalten...

    pg_resetxlog: could not open file "global/pg_control" for reading:
    No such file or directory
    

    ...benennen Sie dann die Datei pg_control.old mit dem folgenden Befehl in pg_control um:

    mv /apigee/apigeeinst/data/apigee-postgresql/pgdata/global/pg_control.old /apigee/apigeeinst/data/apigee-postgresql/pgdata/global/pg_control 
    
  6. Führen Sie den Befehl db_upgrade noch einmal aus:

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

    Wenn das Problem weiterhin besteht, lesen Sie den Artikel Ursache: Falsche Replikationseinstellungen in der PostgreSQL-Konfigurationsdatei.

Ursache: Falsche Replikationseinstellungen in der PostgreSQL-Konfigurationsdatei

Diagnose

  1. Prüfen Sie, ob die PostgreSQL-Konfigurationsdatei /opt/apigee/apigee-postgresql/conf/pg_hba.conf die gewünschten Replikationseinstellungen hat.
  2. Wenn diese Datei die erwarteten Replikationseinstellungen enthält, gehen Sie zu PostgreSQL-Installation wird von einem anderen Installationsnutzer als „apigee“-Benutzer ausgeführt.
  3. Falls nicht, gehen Sie zu Lösung.

Lösung

  1. Benennen Sie den PostgreSQL-Datenordner mit dem folgenden Befehl um:

    mv /opt/apigee/data/apigee-postgresql/pgdata /opt/apigee/data/apigee-postgresql/pgdata-bkp
    
  2. Achten Sie darauf, dass sich die ursprünglichen Sicherungsdaten in einem Ordner mit dem Namen /opt/apigee/data/apigee-postgresql/pgdata-version.old/ befinden

    Beispiel:

    /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/
    
  3. Stellen Sie die Sicherungsdaten mit dem folgenden Befehl von /opt/apigee/data/apigee-postgresql/pgdata-version.old/ in /opt/apigee/data/apigee-postgresql/pgdata wieder her:

    mv /opt/apigee/data/apigee-postgresql/pgdata-version.old/ /opt/apigee/data/apigee-postgresql/pgdata 
    

    Beispiel:

    mv /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/ /opt/apigee/data/apigee-postgresql/pgdata 
    
  4. Wenn Sie den Slave-Host jemals geändert haben, müssen Sie die folgende Eigenschaft in /opt/apigee/customer/application/postgresql.properties aktualisieren, um die Konfigurationsdatei pg_hba.conf zu aktualisieren:

    conf_pg_hba_replication.connection=host replication apigee
    existing_slave_ip/32 trust\ \nhost replication apigee new_slave_ip/32 trust 
    
  5. Starten Sie den Dienst apigee-postgresql neu, damit das in Schritt 4 oben festgelegte Attribut in die Konfigurationsdatei pg_hba.conf aktualisiert wird:

    /opt/apigee/apigee-service/bin/apigee-service apigee-postgresql restart
    
  6. Machen Sie die Konfigurationsdatei pg_hba.conf mit dem folgenden Befehl unveränderlich, damit sie während des PostgreSQL-Upgrades nicht mit falschen Einstellungen aktualisiert wird:

    chattr +i /opt/apigee/apigee-postgresql/conf/pg_hba.conf 
    
  7. Führen Sie den Befehl db_upgrade noch einmal aus:

    /opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade
    
  8. Entfernen Sie die unveränderliche Einstellung in der Konfigurationsdatei pg_hba.conf:

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

Ursache: PostgreSQL-Installation wurde von einem anderen Installationsnutzer als dem apigee-Nutzer ausgeführt

Diagnose

  1. Prüfen Sie, ob es einen anderen Nutzer gibt, für den rolesuper auf true gesetzt ist. Gehen Sie dazu so vor:

    1. Melden Sie sich auf dem PostgreSQL-Knoten mit dem folgenden Befehl bei PostgreSQL an:

      psql -h $(hostname -i)  -U apigee
      
    2. Führen Sie die folgende SQL-Abfrage aus:

      select * from pg_authid;
      
    3. Prüfen Sie, ob für mehrere Nutzer rolesuper auf true gesetzt ist. Wenn ja, schlägt das PostgreSQL-Upgrade fehl, da ein anderer Nutzer als Installationsnutzer anstelle des Nutzers apigee festgelegt wurde. Jeder Nutzer mit der Rolle rolesuper und einer niedrigeren OID wird als Installationsnutzer betrachtet.

      Führen Sie die folgenden SQL-Abfragen aus, um diese Art von Rollenproblem zu prüfen:

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

Lösung

  1. Melden Sie sich mit dem folgenden Befehl in PostgreSQL an:

    psql -h $(hostname -i)  -U apigee
    
  2. Benennen Sie die vorhandene Rolle apigee in der alten Datenbank in einen temporären Nutzer um (z. B. apigee2):

    update pg_authid set rolname ='apigee2' where rolname = 'apigee'; 
    
  3. Angenommen, es gibt einen anderen Nutzer, der die App installiert hat: srcapige. Benennen Sie die Rolle srcapige in apigee um:

    update pg_authid set rolname ='apigee' where rolname = 'srcapigee';
    
  4. Benennen Sie apigee2 in srcapige-Nutzer um:

    update pg_authid set rolname ='secapigee' where rolname = 'apigee2'; 
    
  5. Aktualisieren Sie das Passwort für alle umbenannten Nutzer:

    ALTER ROLE apigee WITH PASSWORD '<secret>'; 
    ALTER ROLE srcapige WITH PASSWORD '<secret>'; 
    
  6. Benennen Sie den PostgreSQL-Datenordner mit dem folgenden Befehl um:

    mv /opt/apigee/data/apigee-postgresql/pgdata /opt/apigee/data/apigee-postgresql/pgdata-bkp
    
  7. Achten Sie darauf, dass sich in einem Ordner namens /opt/apigee/data/apigee-postgresql/pgdata-version.old/ ursprüngliche Sicherungsdaten befinden

    Beispiel:

    /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/
    
  8. Stellen Sie die Daten im Ordner /opt/apigee/data/apigee-postgresql/pgdata-version.old/ mit dem folgenden Befehl in /opt/apigee/data/apigee-postgresql/pgdata wieder her:

    mv /opt/apigee/data/apigee-postgresql/pgdata-version.old/ /opt/apigee/data/apigee-postgresql/pgdata 
    

    Beispiel:

    mv /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/ /opt/apigee/data/apigee-postgresql/pgdata 
    
  9. Führen Sie den Befehl db_upgrade noch einmal aus:

    /opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade 
    
  10. Starten Sie alle Dienste apigee-qpidd und edge-qpid-server neu:

    /opt/apigee/apigee-service/bin/apigee-service apigee-qpidd restart
    /opt/apigee/apigee-service/bin/apigee-service edge-qpid-server restart
    

Wenn das Problem weiterhin besteht, gehen Sie zu Erfassen von Diagnoseinformationen erforderlich.

Erfassen von Diagnoseinformationen erforderlich

Wenn das Problem nach Ausführung der obigen Anleitung zur Fehlerbehebung weiterhin besteht, erfassen Sie die folgenden Diagnoseinformationen. Wenden Sie sich an den Apigee-Support und geben Sie die folgenden Informationen an das Supportteam weiter:

  1. Fügen Sie set -x in die zweite Zeile der Datei /opt/apigee/apigee-postgresql/lib/actions/db_upgrade ein.
  2. Folgen Sie den allgemeinen Diagnoseschritten und senden Sie dem Supportteam die Konsolenausgabe des Befehls db_upgrade:

    opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade
    
  3. Stellen Sie dem Supportteam die folgenden Protokolldateien zur Verfügung:

    /opt/apigee/var/log/apigee-postgresql/apigee-postgresql.log
    /opt/apigee/var/log/apigee-postgresql/update.log
    
  4. Geben Sie die Ausgabe der folgenden Betriebssystembefehle an, um zu prüfen, ob Alternativen auf auto festgelegt sind.

    update-alternatives --display psql 
    

    ODER

    update-alternatives --display pgsql
    update-alternatives --list psql
    

    ODER

    update-alternatives --list pgsql
    

    Wenn Alternativen auf manual festgelegt sind, können Sie sie mit dem folgenden Befehl auf auto setzen:

    update-alternatives --auto psql
    

    Wenn Sie die Alternativen auto festlegen, werden die Binärdateien psql und postgres auf die aktualisierten Versionen verwiesen. Andernfalls verweisen die Binärdateien auf die ältere Version, was zu Problemen führen kann.