อัปเกรด PostgreSQL ไม่สำเร็จ

คุณกำลังดูเอกสารประกอบ Apigee Edge
ไปที่เอกสารประกอบของ Apigee X
info

ลักษณะปัญหา

คุณได้รับข้อผิดพลาดเมื่ออัปเดตฐานข้อมูล PostgreSQL

ข้อความแสดงข้อผิดพลาด

ERROR: PostgreSQL Upgrade FAILED 

สาเหตุที่เป็นไปได้

สาเหตุ คำอธิบาย วิธีการแก้ปัญหามีผลกับ
การตั้งค่าการทําซ้ำไม่ถูกต้องในไฟล์การกําหนดค่า PostgreSQL การอัปเกรด PostgreSQL ล้มเหลวเนื่องจากการตั้งค่าการจำลองไม่ถูกต้องระหว่างการอัปเกรด ผู้ใช้ Edge Private Cloud
การติดตั้ง PostgreSQL ที่ดำเนินการโดยผู้ใช้ติดตั้งรายอื่นที่ไม่ใช่ผู้ใช้ Apigee ตอนแรกมีการติดตั้ง PostgreSQL โดยมีผู้ใช้รายอื่นเป็นผู้ใช้ตัวติดตั้ง ซึ่งทำให้อัปเกรดไม่สำเร็จ ผู้ใช้ Edge Private Cloud

ขั้นตอนการวินิจฉัยทั่วไป

หากได้รับข้อผิดพลาดขณะอัปเกรดฐานข้อมูล PostgreSQL ให้ดำเนินการต่อไปนี้ ขั้นตอนการวินิจฉัยก่อน:

  1. เปลี่ยนชื่อโฟลเดอร์ข้อมูล PostgreSQL

    mv /opt/apigee/data/apigee-postgresql/pgdata /opt/apigee/data/apigee-postgresql/pgdata-bkp
    
  2. ตรวจสอบว่าข้อมูลสํารองข้อมูลเดิมอยู่ในโฟลเดอร์ชื่อ /opt/apigee/data/apigee-postgresql/pgdata-version.old/

    เช่น

    /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/
    
  3. กู้คืนข้อมูลสำรองใน /opt/apigee/data/apigee-postgresql/pgdata-version.old/ เป็น /opt/apigee/data/apigee-postgresql/pgdata โดยใช้คำสั่งต่อไปนี้

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

    เช่น

    mv /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/ /opt/apigee/data/apigee-postgresql/pgdata
  4. เรียกใช้คำสั่ง db_upgrade อีกครั้ง:

    /opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade
    
  5. หากได้รับข้อผิดพลาดต่อไปนี้...

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

    ...จากนั้นเปลี่ยนชื่อไฟล์ pg_control.old เป็น pg_control โดยใช้คําสั่งต่อไปนี้

    mv /apigee/apigeeinst/data/apigee-postgresql/pgdata/global/pg_control.old /apigee/apigeeinst/data/apigee-postgresql/pgdata/global/pg_control 
    
  6. เรียกใช้คำสั่ง db_upgrade อีกครั้ง:

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

    หากยังพบปัญหาอยู่ ให้ไปที่สาเหตุ: การตั้งค่าการจำลองในไฟล์การกำหนดค่า PostgreSQL ไม่ถูกต้อง

สาเหตุ: การตั้งค่าการจำลองในไฟล์การกำหนดค่า PostgreSQL ไม่ถูกต้อง

การวิเคราะห์

  1. ตรวจสอบว่าไฟล์การกำหนดค่า PostgreSQL /opt/apigee/apigee-postgresql/conf/pg_hba.conf ใช่หรือไม่ มีการตั้งค่าการจำลองที่คุณต้องการ
  2. หากไฟล์นี้มีการตั้งค่าการจําลองข้อมูลที่คาดไว้ ให้ไปที่การติดตั้ง PostgreSQL โดยผู้ใช้ที่ติดตั้งรายอื่นที่ไม่ใช่ผู้ใช้ "apigee"
  3. หากยัง ให้ไปที่การแก้ปัญหา

วิธีแก้ปัญหา

  1. เปลี่ยนชื่อโฟลเดอร์ข้อมูล PostgreSQL โดยใช้คําสั่งต่อไปนี้

    mv /opt/apigee/data/apigee-postgresql/pgdata /opt/apigee/data/apigee-postgresql/pgdata-bkp
    
  2. ตรวจสอบว่าข้อมูลสํารองข้อมูลเดิมอยู่ในโฟลเดอร์ชื่อ /opt/apigee/data/apigee-postgresql/pgdata-version.old/

    เช่น

    /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/
    
  3. กู้คืนข้อมูลสํารองจาก /opt/apigee/data/apigee-postgresql/pgdata-version.old/ ไปยัง /opt/apigee/data/apigee-postgresql/pgdata โดยใช้คําสั่งต่อไปนี้

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

    เช่น

    mv /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/ /opt/apigee/data/apigee-postgresql/pgdata 
    
  4. หากเคยเปลี่ยนโฮสต์สเลฟ คุณต้องอัปเดตพร็อพเพอร์ตี้ต่อไปนี้ใน /opt/apigee/customer/application/postgresql.propertiesเพื่ออัปเดตไฟล์การกําหนดค่า 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. รีสตาร์ทบริการ apigee-postgresql เพื่อให้แน่ใจว่าพร็อพเพอร์ตี้ที่ตั้งค่าไว้ในขั้นตอนที่ 4 ด้านบนได้รับการอัปเดตลงในไฟล์การกําหนดค่า pg_hba.conf

    /opt/apigee/apigee-service/bin/apigee-service apigee-postgresql restart
    
  6. ทำให้ไฟล์การกำหนดค่า pg_hba.conf เปลี่ยนแปลงไม่ได้โดยใช้คำสั่งต่อไปนี้เพื่อ ตรวจสอบว่าไม่มีการอัปเดตด้วยการตั้งค่าที่ไม่ถูกต้องระหว่างการอัปเกรด PostgreSQL

    chattr +i /opt/apigee/apigee-postgresql/conf/pg_hba.conf 
    
  7. เรียกใช้คำสั่ง db_upgrade อีกครั้งโดยทำดังนี้

    /opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade
    
  8. นำการตั้งค่าแบบคงที่ในไฟล์การกําหนดค่า pg_hba.conf ออกโดยทําดังนี้

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

สาเหตุ: การติดตั้ง PostgreSQL โดยผู้ใช้ที่ติดตั้งรายอื่นที่ไม่ใช่ผู้ใช้ apigee

การวินิจฉัย

  1. ตรวจสอบว่ามีผู้ใช้รายอื่นตั้งค่า rolesuper เป็น true หรือไม่โดยทำตามขั้นตอนต่อไปนี้

    1. ในโหนด PostgreSQL ให้เข้าสู่ระบบ PostgreSQL โดยใช้คําสั่งต่อไปนี้

      psql -h $(hostname -i)  -U apigee
      
    2. เรียกใช้การค้นหา SQL ต่อไปนี้

      select * from pg_authid;
      
    3. ตรวจสอบว่ามีผู้ใช้หลายรายที่ตั้งค่า rolesuper เป็น true หรือไม่ หากมี แสดงว่าการอัปเกรด PostgreSQL ไม่สำเร็จเนื่องจากมีการตั้งค่าผู้ใช้รายอื่นเป็นผู้ใช้ที่ติดตั้งแทนผู้ใช้ apigee ผู้ใช้ทุกคนที่มี rolesuper และ OID ที่ต่ำกว่าจะถือว่าเป็นผู้ใช้ที่ติดตั้ง

      หากต้องการตรวจสอบปัญหาบทบาทประเภทนี้ ให้เรียกใช้การค้นหา SQL ต่อไปนี้

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

วิธีแก้ปัญหา

  1. เข้าสู่ระบบ PostgreSQL โดยใช้คําสั่งต่อไปนี้

    psql -h $(hostname -i)  -U apigee
    
  2. เปลี่ยนชื่อบทบาท apigee ที่มีอยู่เดิมในฐานข้อมูลเก่าเป็นผู้ใช้ชั่วคราว (เช่น apigee2)

    update pg_authid set rolname ='apigee2' where rolname = 'apigee'; 
    
  3. สมมติว่ามีผู้ใช้อีกรายในการติดตั้ง srcapige เปลี่ยนชื่อ srcapige บทบาทกับ apigee:

    update pg_authid set rolname ='apigee' where rolname = 'srcapigee';
    
  4. เปลี่ยนชื่อผู้ใช้ apigee2 เป็น srcapige โดยทำดังนี้

    update pg_authid set rolname ='secapigee' where rolname = 'apigee2'; 
    
  5. อัปเดตรหัสผ่านของผู้ใช้ทั้งหมดที่เปลี่ยนชื่อแล้ว โดยทำดังนี้

    ALTER ROLE apigee WITH PASSWORD '<secret>'; 
    ALTER ROLE srcapige WITH PASSWORD '<secret>'; 
    
  6. เปลี่ยนชื่อโฟลเดอร์ข้อมูล PostgreSQL โดยใช้คําสั่งต่อไปนี้

    mv /opt/apigee/data/apigee-postgresql/pgdata /opt/apigee/data/apigee-postgresql/pgdata-bkp
    
  7. ตรวจสอบว่ามีข้อมูลสํารองข้อมูลเดิมอยู่ในโฟลเดอร์ชื่อ /opt/apigee/data/apigee-postgresql/pgdata-version.old/

    เช่น

    /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/
    
  8. กู้คืนข้อมูลในโฟลเดอร์ /opt/apigee/data/apigee-postgresql/pgdata-version.old/ ไปยัง /opt/apigee/data/apigee-postgresql/pgdata โดยใช้คำสั่งต่อไปนี้

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

    เช่น

    mv /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/ /opt/apigee/data/apigee-postgresql/pgdata 
    
  9. เรียกใช้คำสั่ง db_upgrade อีกครั้ง:

    /opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade 
    
  10. รีสตาร์ทบริการ apigee-qpidd และ edge-qpid-server ทั้งหมด

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

หากยังคงพบปัญหาอยู่ ให้ไปที่หัวข้อต้องรวบรวมข้อมูลการวินิจฉัย

ต้องรวบรวมข้อมูลการวินิจฉัย

หากยังพบปัญหาเดิมอยู่หลังจากทําตามวิธีการแก้ปัญหาข้างต้นแล้ว ให้รวบรวมข้อมูลการวินิจฉัยต่อไปนี้ ติดต่อทีมสนับสนุนของ Apigee แล้วแชร์ข้อมูลนี้กับทีมสนับสนุน

  1. เพิ่ม set -x ในบรรทัดที่ 2 ของไฟล์ /opt/apigee/apigee-postgresql/lib/actions/db_upgrade
  2. ปฏิบัติตามขั้นตอนการวิเคราะห์ทั่วไปและระบุ เอาต์พุตคอนโซลของคำสั่ง db_upgrade ไปยังทีมสนับสนุน:

    opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade
    
  3. ส่งไฟล์บันทึกต่อไปนี้ให้ทีมสนับสนุน

    /opt/apigee/var/log/apigee-postgresql/apigee-postgresql.log
    /opt/apigee/var/log/apigee-postgresql/update.log
    
  4. ระบุเอาต์พุตของคำสั่งของระบบปฏิบัติการต่อไปนี้เพื่อตรวจสอบว่า มีการตั้งค่าตัวเลือกอื่นเป็น auto

    update-alternatives --display psql 
    

    หรือ

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

    หรือ

    update-alternatives --list pgsql
    

    หากตั้งค่าทางเลือกเป็น manual คุณตั้งค่าเป็น auto ได้โดยใช้รายการต่อไปนี้ คำสั่ง:

    update-alternatives --auto psql
    

    การตั้งค่าทางเลือกเป็น auto จะกำหนดไบนารี psql และ postgres ให้ไปที่เวอร์ชันที่อัปเกรด ไม่เช่นนั้น ไบนารีจะชี้ไปยังเวอร์ชันเก่า ซึ่งอาจทำให้เกิดปัญหาได้