PostgreSQL Streaming Replication liên tục truyền dữ liệu Write-Ahead Log (WAL) từ nút chính (master) đến các nút dự phòng (slave), tạo bản sao cơ sở dữ liệu gần thời gian thực cho tính sẵn sàng cao và chịu lỗi.
Master Read/Write WAL → Slave 1 (Read-only) → Slave 2 (Read-only)
Cấu hình nút Master
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 replication
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 replication
CREATE ROLE repluser WITH REPLICATION LOGIN PASSWORD 'securepass';
Khởi động lại PostgreSQL trên master sau các thay đổi này.
Cấu hình nút Slave
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. 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. Khởi động Slave
sudo systemctl start postgresql-12 sudo systemctl enable postgresql-12
Xác minh Replication
Chạy trên master để kiểm tra các replica đã 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
Failover thủ công
Nếu master gặp sự cố:
- Ngắt kết nối replication từ master thất bại
- Trên slave, đặt
recovery_target_timeline = 'latest'trongrecovery.conf - Khởi động lại PostgreSQL trên slave được thăng cấp
- Xác minh các slave khác kết nối với master mới sử dụng
pg_stat_replication
Kết luận
PostgreSQL 12 streaming replication trên CentOS 8 liên quan đến cấu hình lưu trữ WAL và truy cập replication trên master, tạo sao lưu cơ sở và recovery.conf trên slave, sau đó xác minh với pg_stat_replication. Failover thủ công thăng cấp slave thành master khi cần thiết.