PostgreSQL-Upgrade fehlgeschlagen

Sie sehen sich die Dokumentation zu Apigee Edge an.
Sehen Sie sich die Apigee X-Dokumentation an.
info

Symptom

Beim Aktualisieren der PostgreSQL-Datenbank wird ein Fehler angezeigt.

Fehlermeldung

ERROR: PostgreSQL Upgrade FAILED 

Mögliche Ursachen

Ursache Beschreibung Anleitungen zur Fehlerbehebung gelten 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 durch einen anderen Installationsnutzer als den apigee-Nutzer PostgreSQL wurde ursprünglich mit einem anderen Nutzer als Installationsnutzer installiert. was dazu führt, dass das Upgrade fehlschlägt. Edge Private Cloud-Nutzer

Allgemeine Diagnoseschritte

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

  1. Benennen Sie den PostgreSQL-Datenordner um:

    mv /opt/apigee/data/apigee-postgresql/pgdata /opt/apigee/data/apigee-postgresql/pgdata-bkp
    
  2. Die ursprünglichen Sicherungsdaten müssen sich 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. Wiederherstellen Sie die Sicherungsdaten in /opt/apigee/data/apigee-postgresql/pgdata-version.old/ mit dem folgenden Befehl in /opt/apigee/data/apigee-postgresql/pgdata:

    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 folgende Fehlermeldung angezeigt wird:

    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, rufen Sie Ursache: Falsche Replikationseinstellungen in der PostgreSQL-Konfigurationsdatei auf.

Ursache: Falsche Replikationseinstellungen in 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, fahren Sie mit PostgreSQL-Installation durch einen anderen Installationsnutzer als „apigee“ fort.
  3. Wenn 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. Die ursprünglichen Sicherungsdaten müssen sich 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. Wiederherstellen Sie die Sicherungsdaten von /opt/apigee/data/apigee-postgresql/pgdata-version.old/ nach /opt/apigee/data/apigee-postgresql/pgdata mit dem folgenden Befehl:

    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 jemals den Slave-Host geändert haben, müssen Sie die folgende Eigenschaft in /opt/apigee/customer/application/postgresql.properties zum Aktualisieren der Konfigurationsdatei 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. Starten Sie den Dienst apigee-postgresql neu, damit die in Schritt 4 oben festgelegte Property in der 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 aus 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. Sehen Sie nach, ob es noch andere Nutzer gibt, für die 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 mehrere Nutzer die Rolle rolesuper mit dem Wert true haben. Falls ja, schlägt das PostgreSQL-Upgrade fehl, weil ein anderer Nutzer anstelle des apigee-Nutzers als Installationsnutzer festgelegt wurde. Jeder Nutzer mit dem rolesuper-Rolle hat und eine niedrigere OID als Installationsnutzer gilt.

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

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

Lösung

  1. Melden Sie sich mit dem folgenden Befehl bei 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 gab einen weiteren Installationsnutzer srcapige. Benennen Sie die Rolle srcapige in apigee um:

    update pg_authid set rolname ='apigee' where rolname = 'srcapigee';
    
  4. Benennen Sie den Nutzer apigee2 in srcapige 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 die ursprünglichen Sicherungsdaten in einem Ordner mit dem Namen /opt/apigee/data/apigee-postgresql/pgdata-version.old/

    Beispiel:

    /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/
    
  8. Daten in /opt/apigee/data/apigee-postgresql/pgdata-version.old/ wiederherstellen mit dem folgenden Befehl in /opt/apigee/data/apigee-postgresql/pgdata verschieben:

    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 apigee-qpidd- und edge-qpid-server-Dienste 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 der oben beschriebenen Fehlerbehebung weiterhin besteht, erfassen Sie die folgenden Diagnoseinformationen. Wenden Sie sich an den Apigee-Support und teilen Sie dem Supportteam die folgenden Informationen mit:

  1. Fügen Sie in der zweiten Zeile der Datei /opt/apigee/apigee-postgresql/lib/actions/db_upgrade die Zeichenfolge set -x hinzu.
  2. Führen Sie die allgemeinen Diagnoseschritte aus 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. Stellen Sie die Ausgabe der folgenden Betriebssystembefehle bereit, um zu prüfen, ob Alternativen sind auf auto gesetzt.

    update-alternatives --display psql 
    

    ODER

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

    ODER

    update-alternatives --list pgsql
    

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

    update-alternatives --auto psql
    

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