Replikasi Redis bersifat asinkron: master membalas OK ke client sebelum replika menerima datanya, sehingga selalu ada kemungkinan kehilangan tulisan saat failover. Sentinel adalah proses pengawas terpisah yang memantau master, menyepakati kondisi 'down' lewat kuorum, memilih replika terbaik, dan mempromosikannya. Client harus bertanya alamat master ke Sentinel, bukan menyimpannya secara keras di konfigurasi.
1. Replikasi Dasar
# Cara permanen: tulis di redis.conf replicaof 10.0.0.1 6379 masterauth password-master-yang-kuat # Cara sementara saat runtime REPLICAOF 10.0.0.1 6379 # Melepas diri menjadi master mandiri REPLICAOF NO ONE # Memeriksa keadaan INFO replication
Keluaran INFO replication di master menampilkan hal terpenting: master_repl_offset (posisi tulisan master) dan offset tiap replika. Selisih keduanya adalah lag replikasi Anda โ pantau angka ini.
2. Replikasi Redis Bersifat Asinkron
Client Master Replika โ โ โ โโ SET k v โโ>โ โ โ<โโโ OK โโโโโโ (dibalas DULUAN!) โ โ โโโโโ propagasi โโโโโโโโโโ>โ โ โ โ (baru tiba di sini)
Bila master mati tepat di celah antara "OK" dan propagasi, tulisan tersebut hilang permanen setelah failover. Redis tidak menawarkan replikasi sinkron penuh. Karena itu jangan pernah menjadikan Redis satu-satunya penyimpan data yang tidak boleh hilang โ uang, pesanan, dan transaksi tetap harus ditulis ke database yang durabel.
# Tunggu sampai minimal 1 replika mengonfirmasi, maksimal 500 ms SET pesanan:99 diproses WAIT 1 500 # Mengembalikan jumlah replika yang benar-benar sudah menerima. # Ini MENGURANGI jendela kehilangan data, bukan menghilangkannya.
# Di redis.conf master min-replicas-to-write 1 min-replicas-max-lag 10 # Master menolak semua penulisan bila tidak ada minimal 1 replika # yang lag-nya di bawah 10 detik. Lebih baik gagal terang-terangan # daripada menerima data yang diam-diam berisiko hilang.
3. Sentinel: Failover Otomatis
Replikasi saja tidak memberi ketersediaan tinggi โ kalau master mati, tidak ada yang mempromosikan replika. Sentinel adalah proses terpisah yang mengerjakan itu.
Tugas Sentinel ada empat:
- Monitoring โ memeriksa master dan replika masih hidup.
- Notifikasi โ memberi tahu operator saat ada masalah.
- Failover otomatis โ mempromosikan replika menjadi master baru.
- Penyedia konfigurasi โ client bertanya "siapa master sekarang?" ke Sentinel.
port 26379 # Format: sentinel monitor <nama> <ip-master> <port> <kuorum> sentinel monitor mymaster 10.0.0.1 6379 2 # Dianggap tidak responsif setelah 5 detik tanpa balasan sentinel down-after-milliseconds mymaster 5000 # Berapa replika yang disinkronkan bersamaan ke master baru. # Angka 1 = paling aman; replika lain menyusul bergantian # sehingga tidak semuanya sibuk resync di saat bersamaan. sentinel parallel-syncs mymaster 1 # Batas waktu satu siklus failover sentinel failover-timeout mymaster 60000 sentinel auth-pass mymaster password-master-yang-kuat
4. Kenapa Sentinel Harus Ganjil dan Minimal Tiga
Kuorum menentukan berapa Sentinel yang harus sepakat bahwa master terlihat mati. Tetapi untuk benar-benar menjalankan failover, Sentinel yang memimpin harus mendapat suara mayoritas dari seluruh Sentinel.
Dengan hanya 2 Sentinel, kalau satu mati, yang tersisa tidak akan pernah mencapai mayoritas (butuh 2 dari 2) sehingga failover tidak akan pernah terjadi. Pakai 3 Sentinel di tiga mesin/zona berbeda. Menaruh semua Sentinel di satu host membuat seluruh mekanisme HA sia-sia.
5. Client Harus Sadar-Sentinel
# Tanya siapa master saat ini SENTINEL get-master-addr-by-name mymaster # => 1) "10.0.0.2" 2) "6379" SENTINEL master mymaster SENTINEL replicas mymaster SENTINEL sentinels mymaster # Memicu failover manual (berguna saat maintenance terencana) SENTINEL failover mymaster
Setelah failover, IP master berubah. Aplikasi harus terhubung lewat driver yang mendukung Sentinel โ beri daftar alamat Sentinel dan nama master, biarkan driver yang menemukan master dan menyambung ulang otomatis saat terjadi failover.
# Contoh Node.js (ioredis)
new Redis({
sentinels: [
{ host: '10.0.0.11', port: 26379 },
{ host: '10.0.0.12', port: 26379 },
{ host: '10.0.0.13', port: 26379 }
],
name: 'mymaster'
})
6. Split-Brain dan Cara Menguranginya
Bila jaringan terpecah, master lama bisa saja masih menerima tulisan dari sebagian client sementara master baru sudah dipromosikan di sisi lain. Saat jaringan pulih, master lama diturunkan menjadi replika dan seluruh tulisan yang ia terima selama terpisah akan dibuang.
Pengaturan min-replicas-to-write di poin 2 adalah pertahanan utama: master yang terisolasi kehilangan replikanya, sehingga ia berhenti menerima tulisan alih-alih menampung data yang pasti akan hilang.
7. Sentinel vs Cluster โ Pilih yang Mana
| Kebutuhan | Pilihan |
|---|---|
| Data muat di RAM satu mesin, hanya butuh HA | Sentinel โ jauh lebih sederhana |
| Data melebihi kapasitas RAM satu mesin | Cluster โ sharding otomatis |
| Butuh throughput tulis melebihi satu node | Cluster |
| Banyak operasi lintas-key (MSET, SINTER, transaksi multi-key) | Sentinel โ Cluster membatasi ini |