Kegagalan upgrade PostgreSQL

Anda sedang melihat dokumentasi Apigee Edge.
Buka dokumentasi Apigee X.
info

Gejala

Anda mendapatkan error saat memperbarui database PostgreSQL.

Pesan Error

ERROR: PostgreSQL Upgrade FAILED 

Kemungkinan Penyebab

Penyebab Deskripsi Petunjuk pemecahan masalah berlaku untuk
Setelan replikasi yang salah di file konfigurasi PostgreSQL Upgrade PostgreSQL gagal karena setelan replikasi yang salah selama upgrade. Pengguna Edge Private Cloud
Penginstalan PostgreSQL yang dilakukan oleh pengguna penginstalan lain selain pengguna apigee PostgreSQL awalnya diinstal dengan pengguna lain sebagai pengguna penginstalan, yang menyebabkan kegagalan upgrade. Pengguna Edge Private Cloud

Langkah Diagnosis Umum

Jika Anda mendapatkan error saat mengupgrade database PostgreSQL, lakukan langkah-langkah diagnostik berikut terlebih dahulu:

  1. Ganti nama folder data PostgreSQL:

    mv /opt/apigee/data/apigee-postgresql/pgdata /opt/apigee/data/apigee-postgresql/pgdata-bkp
    
  2. Pastikan data cadangan asli Anda berada dalam folder bernama /opt/apigee/data/apigee-postgresql/pgdata-version.old/

    Contoh:

    /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/
    
  3. Pulihkan data cadangan di /opt/apigee/data/apigee-postgresql/pgdata-version.old/ ke /opt/apigee/data/apigee-postgresql/pgdata menggunakan perintah berikut:

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

    Contoh:

    mv /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/ /opt/apigee/data/apigee-postgresql/pgdata
  4. Jalankan kembali perintah db_upgrade:

    /opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade
    
  5. Jika Anda mendapatkan error berikut...

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

    ...lalu ganti nama file pg_control.old menjadi pg_control menggunakan perintah berikut:

    mv /apigee/apigeeinst/data/apigee-postgresql/pgdata/global/pg_control.old /apigee/apigeeinst/data/apigee-postgresql/pgdata/global/pg_control 
    
  6. Jalankan kembali perintah db_upgrade:

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

    Jika masalah berlanjut, buka Penyebab: Setelan replikasi yang salah di file konfigurasi PostgreSQL.

Penyebab: Setelan replikasi yang salah di file konfigurasi PostgreSQL

Diagnosis

  1. Periksa apakah file konfigurasi PostgreSQL /opt/apigee/apigee-postgresql/conf/pg_hba.conf memiliki setelan replikasi yang Anda inginkan.
  2. Jika file ini memiliki setelan replikasi yang diharapkan, buka Penginstalan PostgreSQL yang dilakukan oleh pengguna penginstalan lain selain pengguna "apigee".
  3. Jika tidak, buka Resolution.

Resolusi

  1. Ganti nama folder data PostgreSQL menggunakan perintah berikut:

    mv /opt/apigee/data/apigee-postgresql/pgdata /opt/apigee/data/apigee-postgresql/pgdata-bkp
    
  2. Pastikan data cadangan asli berada dalam folder dengan nama: /opt/apigee/data/apigee-postgresql/pgdata-version.old/

    Contoh:

    /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/
    
  3. Pulihkan data cadangan dari /opt/apigee/data/apigee-postgresql/pgdata-version.old/ ke /opt/apigee/data/apigee-postgresql/pgdata menggunakan perintah berikut:

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

    Contoh:

    mv /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/ /opt/apigee/data/apigee-postgresql/pgdata 
    
  4. Jika host slave diubah, Anda harus memperbarui properti berikut di /opt/apigee/customer/application/postgresql.properties untuk memperbarui file konfigurasi 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. Mulai ulang layanan apigee-postgresql untuk memastikan bahwa properti yang ditetapkan pada Langkah 4 di atas diperbarui ke file konfigurasi pg_hba.conf:

    /opt/apigee/apigee-service/bin/apigee-service apigee-postgresql restart
    
  6. Buat file konfigurasi pg_hba.conf tidak dapat diubah menggunakan perintah berikut untuk memastikan bahwa file tersebut tidak diperbarui dengan setelan yang salah selama upgrade PostgreSQL:

    chattr +i /opt/apigee/apigee-postgresql/conf/pg_hba.conf 
    
  7. Jalankan kembali perintah db_upgrade:

    /opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade
    
  8. Hapus setelan yang tidak dapat diubah di file konfigurasi pg_hba.conf:

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

Penyebab: Penginstalan PostgreSQL dilakukan oleh pengguna penginstalan lain selain pengguna apigee

Diagnosis

  1. Periksa apakah ada pengguna lain yang menetapkan rolesuper ke true dengan mengikuti langkah-langkah berikut:

    1. Pada node PostgreSQL, login ke PostgreSQL menggunakan perintah berikut:

      psql -h $(hostname -i)  -U apigee
      
    2. Jalankan kueri SQL berikut:

      select * from pg_authid;
      
    3. Periksa apakah ada beberapa pengguna yang menetapkan rolesuper ke true. Jika ada, berarti upgrade PostgreSQL akan gagal karena pengguna lain telah ditetapkan sebagai install user, bukan pengguna apigee. Setiap pengguna yang memiliki peran rolesuper dan OID yang lebih rendah akan dianggap sebagai pengguna penginstalan.

      Untuk memeriksa jenis masalah peran ini, jalankan kueri SQL berikut:

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

Resolusi

  1. Login ke PostgreSQL menggunakan perintah berikut:

    psql -h $(hostname -i)  -U apigee
    
  2. Ganti nama peran apigee yang ada di DB lama menjadi pengguna sementara (misalnya: apigee2):

    update pg_authid set rolname ='apigee2' where rolname = 'apigee'; 
    
  3. Misalkan ada pengguna instal lain srcapige. Ganti nama peran srcapige menjadi apigee:

    update pg_authid set rolname ='apigee' where rolname = 'srcapigee';
    
  4. Ganti nama apigee2 menjadi pengguna srcapige:

    update pg_authid set rolname ='secapigee' where rolname = 'apigee2'; 
    
  5. Perbarui sandi untuk semua pengguna yang namanya diganti:

    ALTER ROLE apigee WITH PASSWORD '<secret>'; 
    ALTER ROLE srcapige WITH PASSWORD '<secret>'; 
    
  6. Ganti nama folder data PostgreSQL menggunakan perintah berikut:

    mv /opt/apigee/data/apigee-postgresql/pgdata /opt/apigee/data/apigee-postgresql/pgdata-bkp
    
  7. Pastikan ada data cadangan asli di dalam folder bernama /opt/apigee/data/apigee-postgresql/pgdata-version.old/

    Contoh:

    /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/
    
  8. Pulihkan data di folder /opt/apigee/data/apigee-postgresql/pgdata-version.old/ ke /opt/apigee/data/apigee-postgresql/pgdata menggunakan perintah berikut:

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

    Contoh:

    mv /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/ /opt/apigee/data/apigee-postgresql/pgdata 
    
  9. Jalankan kembali perintah db_upgrade:

    /opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade 
    
  10. Mulai ulang semua layanan apigee-qpidd dan edge-qpid-server:

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

Jika masalah masih berlanjut, buka Harus mengumpulkan informasi diagnostik.

Harus mengumpulkan informasi diagnostik

Jika masalah terus berlanjut setelah mengikuti petunjuk pemecahan masalah di atas, kumpulkan informasi diagnostik berikut. Hubungi Dukungan Apigee dan bagikan informasi ini kepada tim dukungan:

  1. Tambahkan set -x di baris kedua file /opt/apigee/apigee-postgresql/lib/actions/db_upgrade.
  2. Ikuti Langkah-langkah diagnosis umum dan berikan output konsol dari perintah db_upgrade kepada tim dukungan:

    opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade
    
  3. Berikan file log berikut kepada tim dukungan:

    /opt/apigee/var/log/apigee-postgresql/apigee-postgresql.log
    /opt/apigee/var/log/apigee-postgresql/update.log
    
  4. Berikan output perintah sistem operasi berikut untuk memeriksa apakah alternatif ditetapkan ke auto.

    update-alternatives --display psql 
    

    ATAU

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

    ATAU

    update-alternatives --list pgsql
    

    Jika alternatif ditetapkan ke manual, Anda dapat menetapkannya ke auto menggunakan perintah berikut:

    update-alternatives --auto psql
    

    Menetapkan alternatif ke auto akan mengarahkan biner psql dan postgres ke versi yang telah diupgrade. Jika tidak, biner akan mengarah ke versi yang lebih lama, yang dapat menyebabkan masalah.