PostgreSQL-Upgrade fehlgeschlagen

Sie lesen gerade die Dokumentation zu Apigee Edge.
Apigee X-Dokumentation aufrufen.
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 zu einem Fehler beim Upgrade führt. Edge Private Cloud-Nutzer

Allgemeine 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. 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. 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 die 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, fahren Sie mit Ursache: Falsche Replikationseinstellungen in der PostgreSQL-Konfigurationsdatei fort.

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 enthält.
  2. Wenn diese Datei die erwarteten Replikationseinstellungen enthält, fahren Sie mit PostgreSQL-Installation durch einen anderen Installationsnutzer als den Nutzer „apigee“ fort.
  3. Falls nicht, gehen Sie zum Abschnitt 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. Stellen Sie die Sicherungsdaten mit dem folgenden Befehl von /opt/apigee/data/apigee-postgresql/pgdata-version.old/ nach /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 geändert haben, müssen Sie das folgende Attribut 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 die in Schritt 4 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 in der Konfigurationsdatei pg_hba.conf:

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

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

Diagnose

  1. Prüfen Sie anhand der folgenden Schritte, ob ein anderer Nutzer rolesuper auf true gesetzt hat:

    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 dies der Fall ist, schlägt das PostgreSQL-Upgrade fehl, weil ein anderer Nutzer als Installationsnutzer anstelle des Nutzers apigee festgelegt wurde. Jeder Nutzer mit der Rolle rolesuper und einer niedrigeren OID gilt als Installationsnutzer.

      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 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 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 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. Prüfen Sie, ob sich in einem Ordner mit dem Namen /opt/apigee/data/apigee-postgresql/pgdata-version.old/ Original-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 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 auch nach Befolgen der obigen Anleitung zur Fehlerbehebung weiterhin besteht, sammeln Sie die folgenden Diagnoseinformationen. Wenden Sie sich an den Apigee-Support und teilen Sie dem Supportteam die folgenden Informationen mit:

  1. Fügen Sie set -x in der zweiten Zeile der Datei /opt/apigee/apigee-postgresql/lib/actions/db_upgrade hinzu.
  2. Folgen Sie der allgemeinen Anleitung zur Fehlerbehebung und stellen Sie dem Supportteam die Konsolenausgabe des Befehls db_upgrade zur Verfügung:

    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 
    

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

    update-alternatives --auto psql
    

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