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 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 không thành công 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 dịch vụ đám mây riêng tư của Edge
Quá trình cài đặt PostgreSQL do một người dùng cài đặt khác không phải người dùng API thực hiện Ban đầu, PostgreSQL được cài đặt với 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 dịch vụ đám mây riêng tư của Edge

Các bước chẩn đoán thường gặp

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ề /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...

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

    ...sau đó đổ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 sự cố 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ó các chế độ cài đặt sao chép mà 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 Cài đặt PostgreSQL do người dùng cài đặt khác thực hiện ngoài người dùng "apigee".
  3. Nếu không, hãy chuyển đến phần Độ phân giải.

Độ 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 là: /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/ về /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ủ lưu trữ phụ, thì 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 được đặ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. Làm cho tệp cấu hình pg_hba.conf không thể thay đổi được bằng lệnh sau để đảm bảo ứng dụng không bị 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: Một người dùng cài đặt khác đã cài đặt PostgreSQL thay vì người dùng apigee

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 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 có rolesuper được đặt thành true không. Nếu có, thì quá trình nâng cấp PostgreSQL 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. Mọi người dùng có vai trò rolesuper và 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 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ả 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 phần 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. Liên hệ với Bộ phận hỗ trợ API và 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 rồi cung cấp kết quả của lệnh db_upgrade trên bảng điều khiển 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 để kiểm tra xem các phương án thay thế có được đặt thành auto hay không.

    update-alternatives --display psql 
    

    OR

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

    OR

    update-alternatives --list pgsql
    

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

    update-alternatives --auto psql
    

    Việc đặt các phương án thay thế thành auto sẽ trỏ các tệp nhị phân psqlpostgres đến các 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ố.