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:
Đổi tên thư mục dữ liệu PostgreSQL:
mv /opt/apigee/data/apigee-postgresql/pgdata /opt/apigee/data/apigee-postgresql/pgdata-bkp
Đả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/
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
Chạy lại lệnh
db_upgrade
:/opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade
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ànhpg_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
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
- 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. - 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".
- Nếu không, hãy chuyển đến phần Độ phân giải.
Độ phân giải
Đổ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
Đả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/
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
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ìnhpg_hba.conf
:conf_pg_hba_replication.connection=host replication apigee existing_slave_ip/32 trust\ \nhost replication apigee new_slave_ip/32 trust
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ìnhpg_hba.conf
:/opt/apigee/apigee-service/bin/apigee-service apigee-postgresql restart
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
Chạy lại lệnh
db_upgrade
:/opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade
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
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:
Trên nút PostgreSQL, hãy đăng nhập vào PostgreSQL bằng lệnh sau:
psql -h $(hostname -i) -U apigee
Chạy truy vấn SQL sau:
select * from pg_authid;
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
Đăng nhập vào PostgreSQL bằng lệnh sau:
psql -h $(hostname -i) -U apigee
Đổ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';
Giả sử có một người dùng cài đặt khác
srcapige
. Đổi tên vai tròsrcapige
thànhapigee
:update pg_authid set rolname ='apigee' where rolname = 'srcapigee';
Đổi tên
apigee2
thành người dùngsrcapige
:update pg_authid set rolname ='secapigee' where rolname = 'apigee2';
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>';
Đổ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
Đả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/
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
Chạy lại lệnh
db_upgrade
:/opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade
Khởi động lại tất cả dịch vụ
apigee-qpidd
vàedge-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ợ:
- Thêm
set -x
vào dòng thứ hai của tệp/opt/apigee/apigee-postgresql/lib/actions/db_upgrade
. 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
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
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ànhauto
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ânpsql
vàpostgres
đế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ố.