Nie udało się uaktualnić PostgreSQL

Wyświetlasz 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 konfiguracyjnym PostgreSQL Uaktualnienie PostgreSQL nie udaje się z powodu nieprawidłowych ustawień replikacji podczas uaktualniania. Użytkownicy chmury prywatnej Edge
Instalacja PostgreSQL przeprowadzona przez innego użytkownika niż użytkownik apigee PostgreSQL został początkowo zainstalowany z innym użytkownikiem jako użytkownikiem instalującym, co prowadzi do niepowodzenia aktualizacji. Użytkownicy Edge Private Cloud

Najczęstsze kroki diagnostyki

Jeśli podczas uaktualniania bazy danych PostgreSQL pojawi się błąd, wykonaj te czynności najpierw 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 z 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. Ponownie uruchom polecenie db_upgrade:

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

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

    ...i 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. Ponownie uruchom 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

Diagnostyka

  1. Sprawdź, czy plik konfiguracji PostgreSQL /opt/apigee/apigee-postgresql/conf/pg_hba.conf ma odpowiednie ustawienia replikacji.
  2. Jeśli ten plik zawiera oczekiwane ustawienia replikacji, przejdź do sekcji Instalacja PostgreSQL przeprowadzona przez innego użytkownika niż „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 pierwotna kopia zapasowa danych znajduje 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 hosta podrzędnego, musisz zaktualizować kolejną usługę 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. Uruchom ponownie usługę apigee-postgresql, aby mieć pewność, że właściwości ustawione na apigee-postgresqlkroku 4 powyżej zostaną zaktualizowane w pliku konfiguracji pg_hba.conf:

    /opt/apigee/apigee-service/bin/apigee-service apigee-postgresql restart
    
  6. Ustaw plik konfiguracyjny pg_hba.conf jako stały, używając tego polecenia, aby upewnij się, że podczas uaktualniania PostgreSQL nie zostaną zaktualizowane nieprawidłowe ustawienia:

    chattr +i /opt/apigee/apigee-postgresql/conf/pg_hba.conf 
    
  7. Ponownie uruchom polecenie db_upgrade:

    /opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade
    
  8. Usuń niemodyfikowalne ustawienie w pliku konfiguracyjnym pg_hba.conf:

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

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

Diagnostyka

  1. Aby sprawdzić, czy inny użytkownik ma ustawioną wartość true dla parametru rolesuper:

    1. Na węźle PostgreSQL zaloguj się w PostgreSQL za pomocą tego polecenia:

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

      select * from pg_authid;
      
    3. Sprawdź, czy istnieje wielu użytkowników z wartością rolesuper równą true. Jeśli tak, oznacza to, że uaktualnienie PostgreSQL powoduje błąd, ponieważ inny użytkownik została ustawiona jako instalacja użytkownika, a nie użytkownika apigee. Każdy użytkownik z rolą rolesuper i niższym identyfikatorem OID jest uważany za użytkownika instalacji.

      Aby sprawdzić tego rodzaju problem z rolami, 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 był inny użytkownik instalujący srcapige. Zmień nazwę srcapige rolę użytkownika apigee:

    update pg_authid set rolname ='apigee' where rolname = 'srcapigee';
    
  4. Zmień nazwę pola 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. Upewnij się, że w folderze o nazwie /opt/apigee/data/apigee-postgresql/pgdata-version.old/ znajdują się dane z oryginalnej 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. Ponownie uruchom 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, przeczytaj artykuł Wymagane są informacje diagnostyczne.

Musi zbierać informacje diagnostyczne

Jeśli po wykonaniu powyższych czynności problem nie ustąpi, Zbierzesz poniższe informacje diagnostyczne. Skontaktuj się z zespołem pomocy Apigee i przekaż mu te informacje:

  1. Dodaj set -x w 2. wierszu pliku /opt/apigee/apigee-postgresql/lib/actions/db_upgrade.
  2. Wykonaj standardowe czynności diagnostyczne i prześlij zespołowi pomocy dane z wyjścia konsoli dla polecenia db_upgrade:

    opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade
    
  3. Prześlij zespołowi pomocy te pliki dziennika:

    /opt/apigee/var/log/apigee-postgresql/apigee-postgresql.log
    /opt/apigee/var/log/apigee-postgresql/update.log
    
  4. Aby sprawdzić, czy opcje są ustawione na auto, podaj dane wyjściowe z tych poleceń systemu operacyjnego:

    update-alternatives --display psql 
    

    LUB

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

    LUB

    update-alternatives --list pgsql
    

    Jeśli opcje alternatywne mają ustawienie manual, możesz ustawić je na auto za pomocą tych instrukcji polecenie:

    update-alternatives --auto psql
    

    Ustawienie alternatywnych opcji na auto powoduje, że pliki binarne psql i postgres są kierowane na do nowszej wersji. W przeciwnym razie pliki binarne będą wskazywać starszą wersję, co może powodować problemy.