Trong mô hình master-slave (repmlication) của PostgreSQL, dữ liệu từ một máy chủ chính (master) sẽ được sao chép đến một hoặc nhiều máy chủ phụ (slave). Điều này giúp tăng khả năng dự phòng, đảm bảo tính toàn vẹn của dữ liệu, và cải thiện hiệu suất khi thực hiện các thao tác đọc từ máy chủ phụ.
Dưới đây là các bước chi tiết để cấu hình replication master-slave trong PostgreSQL 12.
1. Cấu hình trên máy chủ chính (Master)
1.1. Cập nhật tệp cấu hình postgresql.conf
Mở tệp cấu hình PostgreSQL (postgresql.conf
) và chỉnh sửa các thông số sau:
nano /var/lib/pgsql/12/data/postgresql.conf
- Listen Address: Đặt địa chỉ IP hoặc
*
để lắng nghe trên tất cả các giao diện mạng.
- WAL Level: Đặt thành
replica
để cho phép replication.
- Số lượng kết nối tối đa cho replication: Số lượng kết nối replication tối đa.
- Sao lưu WAL (Write-Ahead Logging): Tăng thời gian giữ WAL để đảm bảo replication không bị gián đoạn.
- Synchronous_commit: Nếu bạn muốn cấu hình replication đồng bộ, bật tùy chọn này.
1.2. Cập nhật tệp pg_hba.conf
Thêm quyền truy cập cho máy chủ phụ (slave) trong tệp pg_hba.conf
.
nano /var/lib/pgsql/12/data/pg_hba.conf
Thêm dòng sau để cho phép replication từ máy chủ phụ (thay IP bằng địa chỉ IP của máy chủ phụ):
host replication all <slave_ip> md5
1.3. Tạo người dùng replication
Để replication hoạt động, bạn cần tạo một user với quyền REPLICATION
.
CREATE USER replicator WITH REPLICATION ENCRYPTED PASSWORD 'your_password';
1.4. Khởi động lại PostgreSQL trên máy chủ chính
Sau khi cấu hình xong, khởi động lại PostgreSQL:
systemctl restart postgresql-12
2. Cấu hình trên máy chủ phụ (Slave)
2.1. Dừng PostgreSQL trên máy chủ phụ
Trước khi sao chép dữ liệu từ master, bạn cần dừng dịch vụ PostgreSQL trên máy chủ phụ:
systemctl stop postgresql-12
2.2. Sao chép dữ liệu từ máy chủ chính
Sử dụng công cụ pg_basebackup
để sao chép toàn bộ dữ liệu từ master đến slave.
pg_basebackup -h <master_ip> -D /var/lib/pgsql/12/data -U replicator -P -v --wal-method=stream
-h
: Địa chỉ IP của máy chủ chính.
-D
: Thư mục đích nơi lưu trữ dữ liệu trên slave.
-U
: Người dùng replication đã tạo.
--wal-method=stream
: Sao chép WAL trong quá trình sao lưu.
2.3. Cấu hình tệp recovery.conf
Sau khi sao chép xong, tạo tệp recovery.conf
trong thư mục dữ liệu của PostgreSQL trên máy chủ phụ.
nano /var/lib/pgsql/12/data/recovery.conf
Thêm nội dung sau:
standby_mode = 'on'
primary_conninfo = 'host=<master_ip> port=5432 user=replicator password=your_password'
primary_slot_name = 'replication_slot'
2.4. Khởi động lại PostgreSQL trên máy chủ phụ
Khởi động lại PostgreSQL trên slave:
systemctl start postgresql-12
3. Kiểm tra trạng thái replication
Trên máy chủ chính (master), bạn có thể kiểm tra trạng thái replication với lệnh sau:
SELECT * FROM pg_stat_replication;
Nếu replication hoạt động bình thường, bạn sẽ thấy thông tin về kết nối replication với slave.
4. Cấu hình streaming replication (tùy chọn)
Bạn có thể thêm replication slot trên máy chủ chính để đảm bảo rằng các bản ghi WAL sẽ không bị xóa trước khi slave có thể sao chép chúng.
4.1. Tạo replication slot trên master
SELECT * FROM pg_create_physical_replication_slot('replication_slot');
Sau khi tạo xong slot, bạn cần cập nhật recovery.conf
trên slave để sử dụng slot này, như đã chỉ ra trong bước 2.3 với dòng primary_slot_name
.
Kết luận
Quá trình cấu hình replication master-slave trong PostgreSQL 12 bao gồm việc cấu hình máy chủ chính để cho phép replication, thiết lập quyền truy cập từ máy chủ phụ, và cấu hình máy chủ phụ để đồng bộ dữ liệu với máy chủ chính. Hệ thống replication giúp đảm bảo tính dự phòng và hiệu suất tốt hơn khi xử lý các truy vấn chỉ đọc từ các slave.