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
:
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: