Database Reliability & High Availability
Replikasi, failover otomatis, quorum, split brain, routing koneksi, dan perawatan database tanpa downtime.
Database yang andal mampu menangani kegagalan tanpa kehilangan data dan tanpa downtime panjang. Ini membutuhkan replikasi, failover, dan prosedur operasional yang teruji.
Replikasi
| Mode | Cara | Trade-off |
|---|---|---|
| Asynchronous | Primary tidak menunggu replica | Cepat, bisa kehilangan data saat failover |
| Synchronous | Primary menunggu konfirmasi replica | Aman, latency lebih tinggi |
| Semi-sync | Sebagian replica | Kompromi |
PostgreSQL streaming replication
Di primary:
wal_level = replica
max_wal_senders = 10
wal_keep_size = 1GBDi replica:
pg_basebackup -h primary -D /var/lib/postgresql/16/main -U replicator -Fp -Xs -P -R-R membuat konfigurasi standby otomatis.
Cek lag:
SELECT client_addr, state, sent_lsn, replay_lsn,
pg_wal_lsn_diff(sent_lsn, replay_lsn) AS lag_bytes
FROM pg_stat_replication;Failover
Manual
- Pastikan primary benar-benar mati.
- Promosikan replica.
- Arahkan koneksi aplikasi.
- Verifikasi data.
- Bangun replica baru.
pg_ctl promote -D /var/lib/postgresql/16/mainOtomatis
Tool seperti Patroni, repmgr, atau layanan cloud mengelola failover.
Komponen utama:
- Consensus (etcd/Consul) untuk memilih leader.
- Health check.
- Fencing untuk mencegah dua primary.
- VIP/DNS untuk routing.
Split brain
Split brain terjadi saat dua node mengira dirinya primary. Ini menyebabkan divergensi data.
Pencegahan:
- Quorum.
- Fencing (STONITH).
- Jangan mempromosikan node tanpa memastikan primary lama mati.
- Gunakan tool yang matang.
Failover otomatis tanpa fencing berbahaya
Jika primary lama masih hidup dan menerima write, dua primary dapat menulis data berbeda. Lebih baik failover manual yang terkontrol daripada otomatis tanpa fencing.
Routing koneksi
Aplikasi perlu tahu ke mana harus menulis dan membaca.
Opsi:
- Environment variable
DB_PRIMARYdanDB_REPLICA. - HAProxy yang memisahkan port read/write.
- PgBouncer di depan primary/replica.
- Service discovery/DNS internal.
App write ──▶ HAProxy :5432 ──▶ primary
App read ──▶ HAProxy :5433 ──▶ replicaPerawatan tanpa downtime
- Jalankan
VACUUM/ANALYZErutin. - Monitor bloat.
- Reindex dengan
CONCURRENTLY. - Failover terkontrol untuk patching.
- Update versi minor secara berkala.
REINDEX INDEX CONCURRENTLY idx_orders_user_created;Upgrade versi
- Baca release notes.
- Uji di staging.
- Backup penuh.
- Gunakan logical replication atau pg_upgrade.
- Siapkan rollback.
- Lakukan saat traffic rendah.
- Verifikasi performa dan data.
Monitoring reliability
| Metrik | Target |
|---|---|
| Replication lag | < beberapa detik |
| Failover time | Sesuai RTO |
| Backup sukses | 100% |
| Restore test | Berkala |
| Koneksi | Di bawah batas |
| Disk | < 80% |
| Deadlock/lock | Rendah |
Game day
Latih skenario:
- Matikan primary.
- Promosikan replica.
- Arahkan aplikasi.
- Pulihkan primary lama sebagai replica.
- Ukur downtime dan data loss.
Catat hasil dan perbaiki runbook.
Ringkasan
- Replikasi meningkatkan read dan kesiapan failover.
- Failover otomatis membutuhkan consensus dan fencing.
- Routing read/write harus jelas.
- Perawatan dan upgrade harus direncanakan.
- Uji failover sebelum insiden nyata.
Selanjutnya
Pantau sistem di Observability & Monitoring Fundamentals.