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.
listen_addresses = '*'
  • WAL Level: Đặt thành replica để cho phép replication.
wal_level = replica
  • Số lượng kết nối tối đa cho replication: Số lượng kết nối replication tối đa.
max_wal_senders = 5
  • 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.
wal_keep_size = 16
  • Synchronous_commit: Nếu bạn muốn cấu hình replication đồng bộ, bật tùy chọn này.
synchronous_commit = on

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.