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:
Zmień nazwę folderu danych PostgreSQL:
mv /opt/apigee/data/apigee-postgresql/pgdata /opt/apigee/data/apigee-postgresql/pgdata-bkp
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/
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
Uruchom ponownie polecenie
db_upgrade
:/opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade
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
napg_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
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
- Sprawdź, czy plik konfiguracji PostgreSQL
/opt/apigee/apigee-postgresql/conf/pg_hba.conf
ma odpowiednie ustawienia replikacji. - Jeśli ten plik ma oczekiwane ustawienia replikacji, przejdź do sekcji Instalacja PostgreSQL wykonana przez innego użytkownika instalacyjnego innego niż użytkownika „apigee”.
- Jeśli nie, przejdź do sekcji Rozwiązanie.
Rozwiązanie
Zmień nazwę folderu danych PostgreSQL za pomocą tego polecenia:
mv /opt/apigee/data/apigee-postgresql/pgdata /opt/apigee/data/apigee-postgresql/pgdata-bkp
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/
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
Jeśli kiedykolwiek zmienisz host podrzędny, musisz zaktualizować tę właściwość w
/opt/apigee/customer/application/postgresql.properties
, aby zaktualizować plik konfiguracyjnypg_hba.conf
:conf_pg_hba_replication.connection=host replication apigee existing_slave_ip/32 trust\ \nhost replication apigee new_slave_ip/32 trust
Ponownie uruchom usługę
apigee-postgresql
, aby mieć pewność, że właściwość ustawiona w kroku 4 powyżej została zaktualizowana do pliku konfiguracyjnegopg_hba.conf
:/opt/apigee/apigee-service/bin/apigee-service apigee-postgresql restart
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
Uruchom ponownie polecenie
db_upgrade
:/opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade
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
Aby sprawdzić, czy istnieje inny użytkownik, który ma parametr rolesuper ustawiony na wartość true, wykonaj te czynności:
W węźle PostgreSQL zaloguj się w PostgreSQL przy użyciu tego polecenia:
psql -h $(hostname -i) -U apigee
Uruchom to zapytanie SQL:
select * from pg_authid;
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
Zaloguj się w PostgreSQL za pomocą tego polecenia:
psql -h $(hostname -i) -U apigee
Zmień nazwę istniejącej roli
apigee
w starej bazie danych na użytkownika tymczasowego (na przykładapigee2
):update pg_authid set rolname ='apigee2' where rolname = 'apigee';
Załóżmy, że instalował inny użytkownik:
srcapige
. Zmień nazwę rolisrcapige
naapigee
:update pg_authid set rolname ='apigee' where rolname = 'srcapigee';
Zmień nazwę elementu
apigee2
na użytkownikasrcapige
:update pg_authid set rolname ='secapigee' where rolname = 'apigee2';
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>';
Zmień nazwę folderu danych PostgreSQL za pomocą tego polecenia:
mv /opt/apigee/data/apigee-postgresql/pgdata /opt/apigee/data/apigee-postgresql/pgdata-bkp
Sprawdź, czy w folderze o nazwie
/opt/apigee/data/apigee-postgresql/pgdata-version.old/
znajdują się oryginalne dane kopii zapasowejNa przykład:
/opt/apigee/data/apigee-postgresql/pgdata-9.6.old/
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
Uruchom ponownie polecenie
db_upgrade
:/opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade
Ponownie uruchom wszystkie usługi
apigee-qpidd
iedge-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:
- W drugim wierszu pliku
/opt/apigee/apigee-postgresql/lib/actions/db_upgrade
dodajset -x
. 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
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
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 binarnepsql
ipostgres
na uaktualnione wersje. W przeciwnym razie pliki binarne wskazują starszą wersję, co może powodować problemy.