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:
Đổ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à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
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à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 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
- 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. - 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".
- Nếu không, hãy chuyển đến phần Giải pháp.
Độ 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:
/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/
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
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ì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 đã đặ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
Đặ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
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: 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
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:
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 đ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
Đă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 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/
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ả cá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 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ợ:
- 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 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
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 đâ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ànhauto
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ânpsql
vàpostgres
đế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ố.