Thiết lập Database Replication (Master-Slave/Multi-Master)
Thiết lập Database Replication (Master-Slave/Multi-Master): Đảm bảo tính sẵn sàng cao cho dữ liệu
Khi ứng dụng phát triển, database trở thành điểm yếu chí mạng. Một sự cố downtime hoặc mất dữ liệu có thể gây thiệt hại nghiêm trọng. Database Replication giúp sao chép dữ liệu thời gian thực giữa các server, đảm bảo High Availability (HA) và khả năng phục hồi nhanh. Bài viết này hướng dẫn chi tiết cách triển khai MySQL Group Replication và PostgreSQL Streaming Replication trên VPS, từ Master-Slave truyền thống đến Multi-Master hiện đại năm 2026.
1. Tại sao cần Database Replication?
Replication không chỉ là backup mà còn mang lại nhiều lợi ích quan trọng:
- High Availability: Khi Master down, Slave có thể thay thế ngay lập tức.
- Load Balancing: Phân tải Read queries sang Slave.
- Disaster Recovery: Dữ liệu được sao chép liên tục.
- Zero Data Loss: Với cấu hình synchronous replication.
// Interface mô phỏng Database Replication Status
interface ReplicationStatus {
serverRole: "Master" | "Slave" | "Multi-Master";
lagSeconds: number;
isHealthy: boolean;
lastSync: Date;
replicationMode: "Async" | "Semi-Sync" | "Group";
}
function checkReplicationHealth(status: ReplicationStatus): boolean {
if (status.lagSeconds > 5) {
console.warn(`[REPLICATION ALERT] Lag cao: ${status.lagSeconds} giây trên ${status.serverRole}`);
return false;
}
console.log(`[REPLICATION] ${status.serverRole} healthy - Lag: ${status.lagSeconds}s`);
return true;
}
2. So sánh MySQL và PostgreSQL Replication
| Tiêu chí | MySQL Group Replication | PostgreSQL Streaming Replication |
|---|---|---|
| Kiến trúc | Multi-Master (True Active-Active) | Master-Slave (có thể Cascading) |
| Tính nhất quán | Multi-Master với Conflict Detection | Strong Consistency |
| Hiệu suất Write | Tốt cho scale write | Xuất sắc cho Read Replica |
| Độ phức tạp | Trung bình - Cao | Thấp - Trung bình |
3. Yêu cầu VPS cho Database Replication
Nên dùng ít nhất 3 VPS (1 Master + 2 Slave) để có quorum và High Availability.
4. Thiết lập MySQL Group Replication (Multi-Master)
// my.cnf configuration cho Group Replication
const mysqlGroupConfig = `
server_id = 1
gtid_mode = ON
enforce_gtid_consistency = ON
binlog_checksum = NONE
group_replication_group_name = "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee"
group_replication_start_on_boot = ON
group_replication_local_address = "192.168.1.10:33061"
group_replication_group_seeds = "192.168.1.10:33061,192.168.1.11:33061,192.168.1.12:33061"
group_replication_bootstrap_group = OFF
`;
console.log("[MySQL] Group Replication config đã được áp dụng");
5. Thiết lập PostgreSQL Streaming Replication
// postgresql.conf trên Master
const pgMasterConfig = `
wal_level = replica
max_wal_senders = 10
wal_keep_size = 1GB
hot_standby = on
`;
// recovery.conf / postgresql.conf trên Slave
const pgSlaveConfig = `
primary_conninfo = 'host=master-ip port=5432 user=repl_user password=strongpass'
restore_command = 'cp /var/lib/postgresql/archive/%f %p'
`;
console.log("[PostgreSQL] Streaming Replication đã được thiết lập Master → Slave");
6. Giám sát và Failover
- Sử dụng Orchestrator hoặc Patroni cho PostgreSQL automatic failover.
- ProxySQL / HAProxy cho MySQL routing traffic.
- Monitor replication lag qua Prometheus + Grafana.
// Monitoring Replication Lag
function monitorReplicationLag() {
const lag = 2.3; // giây
if (lag > 10) {
console.error(`[FAILOVER ALERT] Replication lag quá cao: ${lag}s - Kích hoạt cảnh báo`);
}
}
monitorReplicationLag();
7. Best Practices khi triển khai Replication
- Sử dụng dedicated VPS cho Database.
- Bật Semi-Synchronous hoặc Synchronous Replication cho dữ liệu quan trọng.
- Backup định kỳ + Point-in-Time Recovery.
- Test failover định kỳ (chaos engineering).
- Giám sát disk I/O và network bandwidth.
- Tránh Multi-Master nếu không thực sự cần.
8. Kết luận: Checklist triển khai Database Replication
Trước khi đưa vào production, hãy kiểm tra:
- Đã chọn mô hình phù hợp (Master-Slave hay Multi-Master)?
- Replication đã hoạt động ổn định và lag thấp?
- Có cơ chế Failover tự động hoặc thủ công nhanh?
- Đã thiết lập monitoring replication lag?
- Backup và Point-in-Time Recovery đã sẵn sàng?
- Đã test scenario server down?
Việc triển khai Database Replication là bước quan trọng giúp hệ thống của bạn đạt tính sẵn sàng cao (High Availability). Cho dù dùng MySQL hay PostgreSQL, replication sẽ giúp bạn yên tâm phát triển ứng dụng mà không lo mất dữ liệu hoặc downtime dài.
Hy vọng hướng dẫn chi tiết này giúp bạn thiết lập thành công hệ thống Database Replication mạnh mẽ và ổn định trên VPS!
