Chuyển Đổi PostgreSQL từ Slave thành Master
1. Giới Thiệu
Trong một số trường hợp, bạn cần chuyển đổi một PostgreSQL slave node thành master độc lập, ví dụ như khi master chính gặp sự cố hoặc cần tái cấu trúc hệ thống. Bài viết này sẽ hướng dẫn chi tiết quy trình thực hiện.
2. Điều Kiện Tiên Quyết
- PostgreSQL slave node đang hoạt động
- Quyền truy cập root hoặc sudo
- Backup dữ liệu quan trọng (nếu có thể)
3. Quy Trình Chuyển Đổi
3.1 Kiểm Tra Trạng Thái Hiện Tại
# Kiểm tra trạng thái replication
sudo -u postgres psql -c "SELECT pg_is_in_recovery();"
# Kiểm tra thời điểm sync cuối cùng
sudo -u postgres psql -c "SELECT pg_last_xact_replay_timestamp();"
# Kiểm tra lag replication
sudo -u postgres psql -c "SELECT now() - pg_last_xact_replay_timestamp() AS replication_lag;"
3.2 Dừng PostgreSQL Service
# Dừng service PostgreSQL
sudo systemctl stop postgresql
3.3 Xóa Các File Recovery và Replication
cd /var/lib/postgresql/[version]/main
sudo rm -f recovery.conf recovery.done recovery.conf.bak
sudo rm -f backup_label backup_label.old
sudo rm -f standby.signal
3.4 Cập Nhật Cấu Hình PostgreSQL
# Backup cấu hình cũ
sudo cp /etc/postgresql/[version]/main/postgresql.conf /etc/postgresql/[version]/main/postgresql.conf.bak
# Chỉnh sửa postgresql.conf
sudo nano /etc/postgresql/[version]/main/postgresql.conf
Xóa hoặc comment các dòng sau:
# primary_conninfo = 'host=master_ip port=5432 ...'
# primary_slot_name = 'replica_slot_name'
# recovery_target_timeline = 'latest'
Thêm hoặc cập nhật các thông số:
listen_addresses = '*'
wal_level = logical
max_wal_senders = 10
max_replication_slots = 10
hot_standby = on