PostgreSQL Streaming Replication liên tục truyền dữ liệu Nhật ký ghi trước (WAL) từ nút chính (chính) đến nút dự phòng (nô lệ), tạo các bản sao cơ sở dữ liệu gần như thời gian thực để có tính sẵn sàng cao và khả năng chịu lỗi.
Đọc/ghi chính WAL Slave 1 Slave 2 Chỉ đọc Chỉ đọcCấu hình nút chính
1. Bật lưu trữ WAL
Chỉnh sửa postgresql.conf ?
archive_mode = on archive_command = 'cp %p /var/lib/pgsql/12/archive/%f' wal_level = replica max_wal_senders = 3
2. Cho phép kết nối sao chép
Chỉnh sửa pg_hba.conf ?
# TYPE DATABASE USER ADDRESS METHOD host replication repluser 192.168.1.20/32 md5
3. Tạo người dùng bản sao
CREATE ROLE repluser WITH REPLICATION LOGIN PASSWORD 'securepass';
Khởi động lại PostgreSQL trên máy chủ sau những thay đổi này.
Cấu hình nút phụ
1. Sao lưu cơ sở từ Master
sudo -u postgres pg_basebackup -h master_ip -D /var/lib/pgsql/12/data -U repluser -P -R
2. Định cấu hình recovery.conf
Tạo /var/lib/pgsql/12/data/recovery.conf ?
standby_mode = 'on' primary_conninfo = 'host=master_ip port=5432 user=repluser password=securepass' restore_command = 'cp /var/lib/pgsql/12/archive/%f "%p"'
3. Bắt đầu nô lệ
sudo systemctl start postgresql-12 sudo systemctl enable postgresql-12
Xác minh bản sao
Chạy trên bản gốc để kiểm tra các bản sao được kết nối ?
SELECT client_addr, state, sync_state FROM pg_stat_replication;
client_addr | state | sync_state ----------------+-----------+------------ 192.168.1.20 | streaming | async
Chuyển đổi dự phòng thủ công
Nếu chủ nhân thất bại
- Ngắt kết nối bản sao khỏi bản gốc bị lỗi
- Trên máy phụ, đặt
recovery_target_timeline = 'latest'trongrecovery.conf - Khởi động lại PostgreSQL trên máy phụ được thăng cấp
- Xác minh các máy phụ khác kết nối với máy chủ mới bằng
pg_stat_replication
Kết luận
Sao chép phát trực tuyến PostgreSQL 12 trên CentOS 8 bao gồm việc định cấu hình quyền truy cập sao chép và lưu trữ WAL trên máy chủ, tạo bản sao lưu cơ sở và recovery.conf trên máy phụ, sau đó xác minh bằng pg_stat_replication . Chuyển đổi dự phòng thủ công sẽ chuyển từ nô lệ sang chủ khi cần thiết.