Không nâng cấp được PostgreSQL

Bạn đang xem tài liệu về Apigee Edge.
Chuyển đến tài liệu về Apigee X.
thông tin

Triệu chứng

Bạn gặp lỗi khi cập nhật cơ sở dữ liệu PostgreSQL.

Thông báo lỗi

ERROR: PostgreSQL Upgrade FAILED 

Nguyên nhân có thể xảy ra

Nguyên nhân Nội dung mô tả Hướng dẫn khắc phục sự cố áp dụng cho
Chế độ cài đặt sao chép không chính xác trong tệp cấu hình PostgreSQL Không nâng cấp được PostgreSQL do chế độ cài đặt sao chép không chính xác trong quá trình nâng cấp. Người dùng đám mây riêng tư ở Edge
Quá trình cài đặt PostgreSQL do một người dùng cài đặt khác không phải là người dùng API thực hiện Ban đầu, PostgreSQL được cài đặt cho một người dùng khác với tư cách là người dùng cài đặt, điều này dẫn đến lỗi nâng cấp. Người dùng đám mây riêng tư ở Edge

Các bước chẩn đoán thông thường

Nếu bạn gặp lỗi khi nâng cấp cơ sở dữ liệu PostgreSQL, trước tiên hãy thực hiện các bước chẩn đoán sau:

  1. Đổi tên thư mục dữ liệu PostgreSQL:

    mv /opt/apigee/data/apigee-postgresql/pgdata /opt/apigee/data/apigee-postgresql/pgdata-bkp
    
  2. Đảm bảo rằng dữ liệu sao lưu ban đầu của bạn nằm trong thư mục có tên /opt/apigee/data/apigee-postgresql/pgdata-version.old/

    Ví dụ:

    /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/
    
  3. Khôi phục dữ liệu sao lưu trong /opt/apigee/data/apigee-postgresql/pgdata-version.old/ vào /opt/apigee/data/apigee-postgresql/pgdata bằng lệnh sau:

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

    Ví dụ:

    mv /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/ /opt/apigee/data/apigee-postgresql/pgdata
  4. Chạy lại lệnh db_upgrade:

    /opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade
    
  5. Nếu bạn gặp lỗi sau đây...

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

    ...rồi đổi tên tệp pg_control.old thành pg_control bằng lệnh sau:

    mv /apigee/apigeeinst/data/apigee-postgresql/pgdata/global/pg_control.old /apigee/apigeeinst/data/apigee-postgresql/pgdata/global/pg_control 
    
  6. Chạy lại lệnh db_upgrade:

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

    Nếu vấn đề vẫn tiếp diễn, hãy chuyển đến phần Nguyên nhân: Chế độ cài đặt sao chép không chính xác trong tệp cấu hình PostgreSQL.

Nguyên nhân: Chế độ cài đặt sao chép không chính xác trong tệp cấu hình PostgreSQL

Chẩn đoán

  1. Kiểm tra xem tệp cấu hình PostgreSQL /opt/apigee/apigee-postgresql/conf/pg_hba.conf có chế độ cài đặt sao chép như bạn dự định hay không.
  2. Nếu tệp này có chế độ cài đặt sao chép dự kiến, hãy chuyển đến phần Quá trình cài đặt PostgreSQL do một người dùng cài đặt khác thực hiện không phải là người dùng "apigee".
  3. Nếu không, hãy chuyển đến phần Giải pháp.

Độ phân giải

  1. Đổi tên thư mục dữ liệu PostgreSQL bằng lệnh sau:

    mv /opt/apigee/data/apigee-postgresql/pgdata /opt/apigee/data/apigee-postgresql/pgdata-bkp
    
  2. Đảm bảo rằng dữ liệu sao lưu gốc nằm trong thư mục có tên: /opt/apigee/data/apigee-postgresql/pgdata-version.old/

    Ví dụ:

    /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/
    
  3. Khôi phục dữ liệu sao lưu từ /opt/apigee/data/apigee-postgresql/pgdata-version.old/ sang /opt/apigee/data/apigee-postgresql/pgdata bằng lệnh sau:

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

    Ví dụ:

    mv /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/ /opt/apigee/data/apigee-postgresql/pgdata 
    
  4. Nếu đã từng thay đổi máy chủ phụ, bạn phải cập nhật thuộc tính sau trong /opt/apigee/customer/application/postgresql.properties để cập nhật tệp cấu hình 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. Khởi động lại dịch vụ apigee-postgresql để đảm bảo rằng thuộc tính đã đặt trong Bước 4 ở trên được cập nhật vào tệp cấu hình pg_hba.conf:

    /opt/apigee/apigee-service/bin/apigee-service apigee-postgresql restart
    
  6. Đặt tệp cấu hình pg_hba.conf ở chế độ không thể thay đổi bằng lệnh sau để đảm bảo rằng tệp này không được cập nhật bằng các chế độ cài đặt không chính xác trong quá trình nâng cấp PostgreSQL:

    chattr +i /opt/apigee/apigee-postgresql/conf/pg_hba.conf 
    
  7. Chạy lại lệnh db_upgrade:

    /opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade
    
  8. Xoá chế độ cài đặt không thể thay đổi trên tệp cấu hình pg_hba.conf:

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

Nguyên nhân: Quá trình cài đặt PostgreSQL do một người dùng khác cài đặt không phải người dùng apigee thực hiện

Chẩn đoán

  1. Kiểm tra xem có người dùng nào khác đã đặt rolesuper thành true bằng cách làm theo các bước sau:

    1. Trên nút PostgreSQL, hãy đăng nhập vào PostgreSQL bằng lệnh sau:

      psql -h $(hostname -i)  -U apigee
      
    2. Chạy truy vấn SQL sau:

      select * from pg_authid;
      
    3. Kiểm tra xem có nhiều người dùng đang đặt rolesuper thành true hay không. Nếu có, quá trình nâng cấp PostgreSQL sẽ không thành công vì một người dùng khác đã được đặt là người dùng cài đặt thay vì người dùng apigee. Bất kỳ người dùng nào có vai trò rolesuper và có OID thấp hơn đều được coi là người dùng đã cài đặt.

      Để kiểm tra loại vấn đề về vai trò này, hãy chạy các truy vấn SQL sau:

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

Độ phân giải

  1. Đăng nhập vào PostgreSQL bằng lệnh sau:

    psql -h $(hostname -i)  -U apigee
    
  2. Đổi tên vai trò apigee hiện có trong DB cũ thành người dùng tạm thời (ví dụ: apigee2):

    update pg_authid set rolname ='apigee2' where rolname = 'apigee'; 
    
  3. Giả sử có một người dùng cài đặt khác srcapige. Đổi tên vai trò srcapige thành apigee:

    update pg_authid set rolname ='apigee' where rolname = 'srcapigee';
    
  4. Đổi tên apigee2 thành người dùng srcapige:

    update pg_authid set rolname ='secapigee' where rolname = 'apigee2'; 
    
  5. Cập nhật mật khẩu cho tất cả người dùng đã đổi tên:

    ALTER ROLE apigee WITH PASSWORD '<secret>'; 
    ALTER ROLE srcapige WITH PASSWORD '<secret>'; 
    
  6. Đổi tên thư mục dữ liệu PostgreSQL bằng lệnh sau:

    mv /opt/apigee/data/apigee-postgresql/pgdata /opt/apigee/data/apigee-postgresql/pgdata-bkp
    
  7. Đảm bảo rằng có dữ liệu sao lưu gốc bên trong thư mục có tên /opt/apigee/data/apigee-postgresql/pgdata-version.old/

    Ví dụ:

    /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/
    
  8. Khôi phục dữ liệu trong thư mục /opt/apigee/data/apigee-postgresql/pgdata-version.old/ vào /opt/apigee/data/apigee-postgresql/pgdata bằng lệnh sau:

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

    Ví dụ:

    mv /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/ /opt/apigee/data/apigee-postgresql/pgdata 
    
  9. Chạy lại lệnh db_upgrade:

    /opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade 
    
  10. Khởi động lại tất cả các dịch vụ apigee-qpiddedge-qpid-server:

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

Nếu vấn đề vẫn tiếp diễn, hãy chuyển đến mục Phải thu thập thông tin chẩn đoán.

Phải thu thập thông tin chẩn đoán

Nếu vấn đề vẫn tiếp diễn sau khi làm theo hướng dẫn khắc phục sự cố ở trên, hãy thu thập thông tin chẩn đoán sau đây. Hãy liên hệ với Apigee Support rồi chia sẻ thông tin này với nhóm hỗ trợ:

  1. Thêm set -x vào dòng thứ hai của tệp /opt/apigee/apigee-postgresql/lib/actions/db_upgrade.
  2. Làm theo Các bước chẩn đoán phổ biến và cung cấp kết quả trên bảng điều khiển của lệnh db_upgrade cho nhóm hỗ trợ:

    opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade
    
  3. Cung cấp các tệp nhật ký sau cho nhóm hỗ trợ:

    /opt/apigee/var/log/apigee-postgresql/apigee-postgresql.log
    /opt/apigee/var/log/apigee-postgresql/update.log
    
  4. Cung cấp kết quả của các lệnh hệ điều hành sau đây để kiểm tra xem các lựa chọn thay thế có được đặt thành auto hay không.

    update-alternatives --display psql 
    

    HOẶC

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

    HOẶC

    update-alternatives --list pgsql
    

    Nếu thiết lập các lựa chọn thay thế thành manual, bạn có thể đặt các lựa chọn đó thành auto bằng cách sử dụng lệnh sau:

    update-alternatives --auto psql
    

    Việc đặt lựa chọn thay thế thành auto sẽ trỏ các tệp nhị phân psqlpostgres đến phiên bản đã nâng cấp. Nếu không, các tệp nhị phân sẽ trỏ đến phiên bản cũ hơn, điều này có thể gây ra sự cố.