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

Bạn đang xem tài liệu về Apigee Edge.
Truy cập vào tài liệu Apigee X.
Thông tin

Dấu hiệu

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ể dẫn đến vấn đề này

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 Quá trình nâng cấp 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 Edge Private Cloud
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 người dùng apigee Ban đầu, PostgreSQL được cài đặt với một người dùng khác làm người dùng cài đặt, điều này dẫn đến lỗi nâng cấp. Người dùng Edge Private Cloud

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 một 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 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 đây...

    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 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 mà bạn muốn 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 người dùng "apigee".
  3. Nếu không, hãy chuyển đến phần Độ phân giải.

Cách giải quyết

  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 ban đầu nằm trong một 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ủ lưu trữ 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 được đặt ở Bước 4 ở trên sẽ đượ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. Hãy làm cho tệp cấu hình pg_hba.conf không thay đổi bằng cách sử dụ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 bất biến 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: Người dùng cài đặt khác ngoài người dùng apigee đã thực hiện quy trình cài đặt PostgreSQL

Chẩn đoán

  1. Kiểm tra xem có người dùng nào khác đặt rolesuper thành true hay khô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 hay không. Nếu có, thì quá trình nâng cấp PostgreSQL đang gặp lỗi vì một người dùng khác đã được đặt làm 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;
      

Cách giải quyết

  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 cơ sở dữ liệu 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 người dùng 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 ban đầu trong một 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/
    
  8. Khôi phục dữ liệu trong thư mục /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 
    
  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 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 bạn 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. Liên hệ với Nhóm hỗ trợ Apigee 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 thường gặp và cung cấp đầu ra của bảng điều khiển cho 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 đầu ra của các lệnh hệ điều hành sau để 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 
    

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

    update-alternatives --auto psql
    

    Việc đặt các lựa chọn thay thế cho 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 vấn đề.