1. Cài đặt PostgreSQL

Đảm bảo rằng PostgreSQL đã được cài đặt trên cả hai máy (master và slave). Bạn có thể cài đặt bằng lệnh sau (trên Ubuntu/Debian):

sudo apt update
sudo apt install postgresql

2. Cấu hình Master

2.1. Chỉnh sửa tệp cấu hình postgresql.conf

Mở tệp cấu hình:

sudo nano /etc/postgresql/{version}/main/postgresql.conf

Thêm hoặc chỉnh sửa các dòng sau:

listen_addresses = '*'
wal_level = replica
max_wal_senders = 3
wal_keep_segments = 64
  • listen_addresses: Để PostgreSQL lắng nghe các kết nối từ các máy khác.
  • wal_level: Cần thiết để cho phép replication.
  • max_wal_senders: Số lượng kết nối WAL sender tối đa.
  • wal_keep_segments: Số lượng segment WAL được giữ lại.

2.2. Chỉnh sửa tệp pg_hba.conf

Mở tệp cấu hình:

sudo nano /etc/postgresql/{version}/main/pg_hba.conf

Thêm dòng sau để cho phép kết nối replication:

host    replication     all             {slave_ip}/32          md5

Thay {slave_ip} bằng địa chỉ IP của máy slave.

2.3. Khởi động lại PostgreSQL

Khởi động lại dịch vụ PostgreSQL để áp dụng các thay đổi:

sudo systemctl restart postgresql

3. Tạo User Replication

Truy cập vào PostgreSQL bằng tài khoản postgres:

sudo -u postgres psql

Tạo một người dùng để replication:

CREATE ROLE replicator WITH REPLICATION LOGIN PASSWORD 'your_password';

4. Cấu hình Slave

4.1. Tắt dịch vụ PostgreSQL

Trước khi sao chép dữ liệu, bạn cần tắt dịch vụ PostgreSQL trên máy slave:

sudo systemctl stop postgresql

4.2. Sao chép dữ liệu từ Master sang Slave

Sử dụng lệnh pg_basebackup để sao chép dữ liệu từ máy master:

pg_basebackup -h {master_ip} -D /var/lib/postgresql/{version}/main -U replicator -P --wal-method=stream

Thay {master_ip} bằng địa chỉ IP của máy master.

4.3. Tạo tệp recovery.conf

Tạo một tệp recovery.conf trong thư mục dữ liệu của PostgreSQL trên máy slave:

sudo nano /var/lib/postgresql/{version}/main/recovery.conf

Thêm các dòng sau vào tệp:

standby_mode = 'on'
primary_conninfo = 'host={master_ip} port=5432 user=replicator password=your_password'
trigger_file = '/tmp/postgresql.trigger.5432'

4.4. Khởi động lại PostgreSQL trên Slave

Khởi động lại dịch vụ PostgreSQL trên máy slave:

sudo systemctl start postgresql

5. Kiểm tra Replication

Để kiểm tra xem replication có hoạt động hay không, bạn có thể sử dụng câu lệnh sau trên máy Slave:

SELECT * FROM pg_stat_replication;

Nếu replication được thiết lập thành công, bạn sẽ thấy thông tin về các kết nối từ máy Master.

Lưu ý

  • Đảm bảo rằng cả hai máy có thể giao tiếp với nhau qua mạng. Bạn có thể kiểm tra bằng cách sử dụng lệnh ping.
  • Cấu hình firewall để cho phép các kết nối cần thiết. Trên Ubuntu, bạn có thể sử dụng ufw để mở cổng 5432:
sudo ufw allow 5432/tcp