Nie udało się uaktualnić PostgreSQL

Przeglądasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X.
Informacje

Krótki opis problemu

Podczas aktualizowania bazy danych PostgreSQL pojawia się błąd.

Komunikat o błędzie

ERROR: PostgreSQL Upgrade FAILED 

Możliwe przyczyny

Przyczyna Opis Instrukcje rozwiązywania problemów dotyczą
Nieprawidłowe ustawienia replikacji w pliku konfiguracji PostgreSQL Uaktualnienie PostgreSQL nie powiedzie się z powodu nieprawidłowych ustawień replikacji podczas uaktualniania. Użytkownicy chmury Edge Private Cloud
Instalacja PostgreSQL wykonana przez innego użytkownika instalacyjnego innego niż użytkownik Apigee PostgreSQL został początkowo zainstalowany razem z innym użytkownikiem jako użytkownik instalacyjny, co doprowadziło do błędu uaktualnienia. Użytkownicy chmury Edge Private Cloud

Najczęstsze kroki diagnostyki

Jeśli podczas uaktualniania bazy danych PostgreSQL pojawi się błąd, najpierw wykonaj te czynności diagnostyczne:

  1. Zmień nazwę folderu danych PostgreSQL:

    mv /opt/apigee/data/apigee-postgresql/pgdata /opt/apigee/data/apigee-postgresql/pgdata-bkp
    
  2. Upewnij się, że oryginalne dane kopii zapasowej znajdują się w folderze o nazwie /opt/apigee/data/apigee-postgresql/pgdata-version.old/

    Na przykład:

    /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/
    
  3. Przywróć dane kopii zapasowej z folderu /opt/apigee/data/apigee-postgresql/pgdata-version.old/ do folderu /opt/apigee/data/apigee-postgresql/pgdata za pomocą tego polecenia:

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

    Na przykład:

    mv /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/ /opt/apigee/data/apigee-postgresql/pgdata
  4. Uruchom ponownie polecenie db_upgrade:

    /opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade
    
  5. Jeśli pojawi się następujący błąd...

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

    ...a następnie zmień nazwę pliku pg_control.old na pg_control za pomocą tego polecenia:

    mv /apigee/apigeeinst/data/apigee-postgresql/pgdata/global/pg_control.old /apigee/apigeeinst/data/apigee-postgresql/pgdata/global/pg_control 
    
  6. Uruchom ponownie polecenie db_upgrade:

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

    Jeśli problem będzie się powtarzać, przejdź do sekcji Przyczyna: nieprawidłowe ustawienia replikacji w pliku konfiguracji PostgreSQL.

Przyczyna: nieprawidłowe ustawienia replikacji w pliku konfiguracji PostgreSQL

Diagnoza

  1. Sprawdź, czy plik konfiguracji PostgreSQL /opt/apigee/apigee-postgresql/conf/pg_hba.conf ma odpowiednie ustawienia replikacji.
  2. Jeśli ten plik ma oczekiwane ustawienia replikacji, przejdź do sekcji Instalacja PostgreSQL wykonana przez innego użytkownika instalacyjnego innego niż użytkownika „apigee”.
  3. Jeśli nie, przejdź do sekcji Rozwiązanie.

Rozwiązanie

  1. Zmień nazwę folderu danych PostgreSQL za pomocą tego polecenia:

    mv /opt/apigee/data/apigee-postgresql/pgdata /opt/apigee/data/apigee-postgresql/pgdata-bkp
    
  2. Sprawdź, czy oryginalne dane kopii zapasowej znajdują się w folderze o nazwie: /opt/apigee/data/apigee-postgresql/pgdata-version.old/

    Na przykład:

    /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/
    
  3. Przywróć dane kopii zapasowej z /opt/apigee/data/apigee-postgresql/pgdata-version.old/ do /opt/apigee/data/apigee-postgresql/pgdata przy użyciu tego polecenia:

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

    Na przykład:

    mv /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/ /opt/apigee/data/apigee-postgresql/pgdata 
    
  4. Jeśli kiedykolwiek zmienisz host podrzędny, musisz zaktualizować tę właściwość w /opt/apigee/customer/application/postgresql.properties, aby zaktualizować plik konfiguracyjny 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. Ponownie uruchom usługę apigee-postgresql, aby mieć pewność, że właściwość ustawiona w kroku 4 powyżej została zaktualizowana do pliku konfiguracyjnego pg_hba.conf:

    /opt/apigee/apigee-service/bin/apigee-service apigee-postgresql restart
    
  6. Użyj tego polecenia, aby ustawić plik konfiguracyjny pg_hba.conf jako stały za pomocą tego polecenia, aby mieć pewność, że podczas uaktualniania PostgreSQL nie zostanie zaktualizowany przez nieprawidłowe ustawienia:

    chattr +i /opt/apigee/apigee-postgresql/conf/pg_hba.conf 
    
  7. Uruchom ponownie polecenie db_upgrade:

    /opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade
    
  8. Usuń ustawienie stałe z pliku konfiguracyjnego pg_hba.conf:

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

Przyczyna: instalacja PostgreSQL została wykonana przez innego użytkownika instalacji innego niż użytkownik apigee

Diagnoza

  1. Aby sprawdzić, czy istnieje inny użytkownik, który ma parametr rolesuper ustawiony na wartość true, wykonaj te czynności:

    1. W węźle PostgreSQL zaloguj się w PostgreSQL przy użyciu tego polecenia:

      psql -h $(hostname -i)  -U apigee
      
    2. Uruchom to zapytanie SQL:

      select * from pg_authid;
      
    3. Sprawdź, czy wielu użytkowników ma parametr rolesuper ustawiony na wartość true. Jeśli tak, oznacza to, że uaktualnienie PostgreSQL nie powiedzie się, ponieważ inny użytkownik został ustawiony jako instalacja użytkownika zamiast użytkownika apigee. Każdy użytkownik o roli rolesuper i niższym OID jest uznawany za użytkownika instalacji.

      Aby sprawdzić ten problem z rolą, uruchom te zapytania SQL:

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

Rozwiązanie

  1. Zaloguj się w PostgreSQL za pomocą tego polecenia:

    psql -h $(hostname -i)  -U apigee
    
  2. Zmień nazwę istniejącej roli apigee w starej bazie danych na użytkownika tymczasowego (na przykład apigee2):

    update pg_authid set rolname ='apigee2' where rolname = 'apigee'; 
    
  3. Załóżmy, że instalował inny użytkownik: srcapige. Zmień nazwę roli srcapige na apigee:

    update pg_authid set rolname ='apigee' where rolname = 'srcapigee';
    
  4. Zmień nazwę elementu apigee2 na użytkownika srcapige:

    update pg_authid set rolname ='secapigee' where rolname = 'apigee2'; 
    
  5. Zaktualizuj hasła wszystkich użytkowników, których nazwy zostały zmienione:

    ALTER ROLE apigee WITH PASSWORD '<secret>'; 
    ALTER ROLE srcapige WITH PASSWORD '<secret>'; 
    
  6. Zmień nazwę folderu danych PostgreSQL za pomocą tego polecenia:

    mv /opt/apigee/data/apigee-postgresql/pgdata /opt/apigee/data/apigee-postgresql/pgdata-bkp
    
  7. Sprawdź, czy w folderze o nazwie /opt/apigee/data/apigee-postgresql/pgdata-version.old/ znajdują się oryginalne dane kopii zapasowej

    Na przykład:

    /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/
    
  8. Przywróć dane z folderu /opt/apigee/data/apigee-postgresql/pgdata-version.old/ do folderu /opt/apigee/data/apigee-postgresql/pgdata za pomocą tego polecenia:

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

    Na przykład:

    mv /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/ /opt/apigee/data/apigee-postgresql/pgdata 
    
  9. Uruchom ponownie polecenie db_upgrade:

    /opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade 
    
  10. Ponownie uruchom wszystkie usługi apigee-qpidd i edge-qpid-server:

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

Jeśli problem nadal występuje, przejdź do artykułu Musisz zebrać informacje diagnostyczne.

Musisz zebrać informacje diagnostyczne

Jeśli po wykonaniu podanych wyżej czynności problem nie ustąpi, skorzystaj z tych informacji diagnostycznych. Skontaktuj się z zespołem pomocy Apigee i przekaż mu te informacje:

  1. W drugim wierszu pliku /opt/apigee/apigee-postgresql/lib/actions/db_upgrade dodaj set -x.
  2. Wykonaj typowe czynności diagnostyczne i przekaż zespołowi pomocy dane wyjściowe polecenia db_upgrade w konsoli:

    opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade
    
  3. Udostępnij zespołowi pomocy te pliki dziennika:

    /opt/apigee/var/log/apigee-postgresql/apigee-postgresql.log
    /opt/apigee/var/log/apigee-postgresql/update.log
    
  4. Podaj dane wyjściowe tych poleceń systemu operacyjnego, aby sprawdzić, czy opcje alternatywne mają wartość auto.

    update-alternatives --display psql 
    

    LUB

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

    LUB

    update-alternatives --list pgsql
    

    Jeśli opcje alternatywne mają wartość manual, możesz ustawić je na wartość auto za pomocą tego polecenia:

    update-alternatives --auto psql
    

    Ustawienie alternatywy na auto wskazuje pliki binarne psql i postgres na uaktualnione wersje. W przeciwnym razie pliki binarne wskazują starszą wersję, co może powodować problemy.