Redis High Availability dengan Sentinel
/ 5 min read
๐ Daftar Isi (16)
- #Arsitektur
- #Prasyarat
- #Node 1: harbor-01 (Master)
- #Node 2: harbor-02 (Replica)
- #Node 3: harbor-03 (Replica)
- #Verifikasi
- #Cek Role Redis
- #Info Master dari Sentinel
- #Daftar Sentinel
- #Cek Status Replikasi
- #Uji Failover
- #Simulasi Master Down
- #Pantau Failover
- #Kembalikan harbor-01
- #Perintah Sehari-hari
- #Catatan Penting
Redis adalah salah satu database in-memory paling populer untuk caching dan session store. Ketika Redis digunakan di environment production, single point of failure adalah risiko yang harus diantisipasi. Sentinel adalah solusi bawaan Redis untuk high availability yang menangani monitoring, notifikasi, dan failover otomatis tanpa perlu tools tambahan.
Artikel ini akan memandu kamu membangun Redis HA cluster dengan Sentinel di tiga node, lengkap dengan uji failover.
Arsitektur
Kita akan membangun cluster dengan tiga node Docker:
| Node | IP | Redis | Sentinel |
|---|---|---|---|
harbor-01 | 192.168.10.21 | Master | Ya |
harbor-02 | 192.168.10.22 | Replica | Ya |
harbor-03 | 192.168.10.23 | Replica | Ya |
Stack: Redis 7 Alpine ยท Docker Compose ยท 3 Node
Sentinel menggunakan quorum 2, artinya minimal 2 sentinel harus setuju sebelum failover dieksekusi. Ini mencegah split-brain ketika terjadi network partition.
Prasyarat
Pastikan Docker dan Docker Compose sudah terinstall di ketiga node:
docker --version && docker compose versionNode 1: harbor-01 (Master)
Node ini akan menjadi master awal. Konfigurasi Redis tidak memerlukan directive replicaof karena ini adalah master.
mkdir -p ~/redis && cd ~/redis
sudo tee redis.conf << 'EOF'port 6379bind 0.0.0.0requirepass RedisPass2024!masterauth RedisPass2024!appendonly yesEOF
sudo tee sentinel.conf << 'EOF'port 26379bind 0.0.0.0sentinel monitor harbor-redis 192.168.10.21 6379 2sentinel auth-pass harbor-redis RedisPass2024!sentinel announce-ip 192.168.10.21sentinel announce-port 26379sentinel down-after-milliseconds harbor-redis 5000sentinel failover-timeout harbor-redis 10000sentinel parallel-syncs harbor-redis 1EOF
sudo tee docker-compose.yml << 'EOF'services: redis: image: redis:7-alpine container_name: redis restart: unless-stopped ports: - "6379:6379" volumes: - ./redis.conf:/usr/local/etc/redis/redis.conf - redis-data:/data command: redis-server /usr/local/etc/redis/redis.conf
sentinel: image: redis:7-alpine container_name: sentinel restart: unless-stopped ports: - "26379:26379" volumes: - ./sentinel.conf:/usr/local/etc/redis/sentinel.conf command: redis-sentinel /usr/local/etc/redis/sentinel.conf depends_on: - redis
volumes: redis-data:EOF
sudo docker compose up -dPenjelasan konfigurasi Sentinel:
sentinel monitormendefinisikan nama cluster (harbor-redis), IP master, port, dan quorum (2).sentinel announce-ipmemastikan Sentinel mengumumkan IP yang benar ke client, penting di environment multi-node.down-after-milliseconds 5000artinya Sentinel akan menandai node sebagai down setelah 5 detik tidak ada respons.failover-timeout 10000memberi batas 10 detik untuk proses failover.parallel-syncs 1membatasi hanya satu replica yang sync bersamaan, menjaga performa master.
Node 2: harbor-02 (Replica)
Node ini dikonfigurasi sebagai replica dari master di harbor-01.
mkdir -p ~/redis && cd ~/redis
sudo tee redis.conf << 'EOF'port 6379bind 0.0.0.0requirepass RedisPass2024!masterauth RedisPass2024!replicaof 192.168.10.21 6379appendonly yesEOF
sudo tee sentinel.conf << 'EOF'port 26379bind 0.0.0.0sentinel monitor harbor-redis 192.168.10.21 6379 2sentinel auth-pass harbor-redis RedisPass2024!sentinel announce-ip 192.168.10.22sentinel announce-port 26379sentinel down-after-milliseconds harbor-redis 5000sentinel failover-timeout harbor-redis 10000sentinel parallel-syncs harbor-redis 1EOF
sudo tee docker-compose.yml << 'EOF'services: redis: image: redis:7-alpine container_name: redis restart: unless-stopped ports: - "6379:6379" volumes: - ./redis.conf:/usr/local/etc/redis/redis.conf - redis-data:/data command: redis-server /usr/local/etc/redis/redis.conf
sentinel: image: redis:7-alpine container_name: sentinel restart: unless-stopped ports: - "26379:26379" volumes: - ./sentinel.conf:/usr/local/etc/redis/sentinel.conf command: redis-sentinel /usr/local/etc/redis/sentinel.conf depends_on: - redis
volumes: redis-data:EOF
sudo docker compose up -dPerbedaan utama dari harbor-01:
replicaof 192.168.10.21 6379diredis.confmembuat Redis ini menjadi replica dari master.sentinel announce-ipdiubah ke192.168.10.22(IP node ini).sentinel monitortetap mengarah ke192.168.10.21karena Sentinel memonitor master yang dikenal saat startup.
Node 3: harbor-03 (Replica)
Konfigurasi identik dengan harbor-02, hanya berbeda di IP announce.
mkdir -p ~/redis && cd ~/redis
sudo tee redis.conf << 'EOF'port 6379bind 0.0.0.0requirepass RedisPass2024!masterauth RedisPass2024!replicaof 192.168.10.21 6379appendonly yesEOF
sudo tee sentinel.conf << 'EOF'port 26379bind 0.0.0.0sentinel monitor harbor-redis 192.168.10.21 6379 2sentinel auth-pass harbor-redis RedisPass2024!sentinel announce-ip 192.168.10.23sentinel announce-port 26379sentinel down-after-milliseconds harbor-redis 5000sentinel failover-timeout harbor-redis 10000sentinel parallel-syncs harbor-redis 1EOF
sudo tee docker-compose.yml << 'EOF'services: redis: image: redis:7-alpine container_name: redis restart: unless-stopped ports: - "6379:6379" volumes: - ./redis.conf:/usr/local/etc/redis/redis.conf - redis-data:/data command: redis-server /usr/local/etc/redis/redis.conf
sentinel: image: redis:7-alpine container_name: sentinel restart: unless-stopped ports: - "26379:26379" volumes: - ./sentinel.conf:/usr/local/etc/redis/sentinel.conf command: redis-sentinel /usr/local/etc/redis/sentinel.conf depends_on: - redis
volumes: redis-data:EOF
sudo docker compose up -dVerifikasi
Setelah semua node berjalan, lakukan verifikasi untuk memastikan cluster berfungsi dengan benar.
Cek Role Redis
docker exec -it redis redis-cli -a RedisPass2024! INFO replication | grep roleHasil yang diharapkan: role:master di harbor-01, role:slave di harbor-02 dan harbor-03.
Info Master dari Sentinel
docker exec -it sentinel redis-cli -p 26379 SENTINEL master harbor-redisOutput harus menunjukkan:
- IP master:
192.168.10.21 num-slaves: 2num-other-sentinels: 2
Daftar Sentinel
docker exec -it sentinel redis-cli -p 26379 SENTINEL sentinels harbor-redisPerintah ini menampilkan semua instance Sentinel yang terdaftar di cluster.
Cek Status Replikasi
docker exec -it redis redis-cli -a RedisPass2024! INFO replication | grep -E "master_link_status|master_sync"Semua replica harus menunjukkan master_link_status:up.
Uji Failover
Sekarang kita akan mensimulasikan master down dan melihat Sentinel melakukan failover otomatis.
Simulasi Master Down
Jalankan di harbor-01:
sudo docker compose stop redisIni menghentikan container Redis master tanpa menghentikan Sentinel.
Pantau Failover
Jalankan di harbor-02 atau harbor-03:
docker exec -it sentinel redis-cli -p 26379 SENTINEL master harbor-redisDalam waktu sekitar 5 detik (sesuai down-after-milliseconds), Sentinel akan mendeteksi master down dan memilih master baru dari harbor-02 atau harbor-03. Perintah di atas akan menunjukkan IP master baru setelah failover selesai.
Kembalikan harbor-01
# Di harbor-01sudo docker compose start redisRedis di harbor-01 akan otomatis bergabung kembali sebagai replica dari master baru.
Perintah Sehari-hari
# Status containersudo docker compose ps
# Log Redissudo docker compose logs redis -f
# Log Sentinel (berguna untuk debug failover)sudo docker compose logs sentinel -f
# Restart semua servicesudo docker compose restartCatatan Penting
- Quorum harus ganjil: Sentinel menggunakan voting untuk memutuskan failover. Dengan 3 sentinel dan quorum 2, cluster tetap bisa memilih master baru meskipun 1 sentinel mati.
- Password harus konsisten:
requirepassdanmasterauthharus sama di semua node. Tanpamasterauth, replica tidak bisa melakukan autentikasi ke master setelah failover. announce-ipwajib di-set: Di environment multi-host, Sentinel menggunakan IP ini untuk memberitahu client tentang lokasi master. Tanpa ini, client bisa mendapatkan IP yang salah (misalnya IP Docker internal).- Data persist dengan AOF:
appendonly yesmemastikan data tidak hilang saat container restart. Gunakan volume Docker untuk persistensi data.
๐ Artikel Terkait
Harbor HA dengan External PostgreSQL dan Redis Sentinel
Tutorial membangun Harbor 2.15.2 HA cluster dengan external PostgreSQL Patroni, Redis Sentinel, HAProxy, dan Keepalived di 3 node. Plus failover testing.
PostgreSQL High Availability dengan Patroni dan etcd
Tutorial lengkap membangun PostgreSQL HA cluster menggunakan Patroni dan etcd di Ubuntu 26.04, dari hasil trial-error langsung di production.
Load Balancing PostgreSQL dengan HAProxy dan Keepalived
Tutorial setup HAProxy load balancer dengan Keepalived VRRP failover untuk PostgreSQL HA, termasuk health check Patroni API dan leader-only routing.
๐ฌ Komentar
Komentar via GitHub Discussions. Login GitHub diperlukan.