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.
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
*
để lắng nghe trên tất cả các giao diện mạng.listen_addresses = '*'
replica
để cho phép replication.wal_level = replica
max_wal_senders = 5
wal_keep_size = 16
synchronous_commit = on
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
Để 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';
Sau khi cấu hình xong, khởi động lại PostgreSQL:
systemctl restart postgresql-12
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
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.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'
Khởi động lại PostgreSQL trên slave:
systemctl start postgresql-12
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.
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.
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
.
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.