Arsitektur Redis Cluster & Sentinel untuk High Availability Skala Enterprise
Arsitektur Redis Cluster & Sentinel untuk High Availability Skala Enterprise
1. Konteks Industri & Analisis Akar Masalah
Dalam lanskap arsitektur web modern skala enterprise, performa dan ketersediaan tinggi (High Availability) adalah fondasi utama yang tidak dapat ditawar. Ketika aplikasi web memproses jutaan permintaan per detik (QPS) dari pengguna global, basis data relasional seperti MySQL, MariaDB, atau PostgreSQL sering kali menghadapi bottleneck pada I/O disk dan lock contention. Untuk mengatasi masalah latensi ini, Redis hadir sebagai in-memory data structure store yang berfungsi sebagai caching layer, session store, rate limiter, hingga message broker melalui pub/sub dan streams.
Namun, ketergantungan penuh pada Redis sebagai komponen sentral menghadirkan risiko kegagalan sistemik yang masif. Sebuah Single Point of Failure (SPOF) pada instans Redis tunggal dapat melumpuhkan seluruh ekosistem backend—mulai dari layanan Node.js/Go, antrean worker PHP/Supervisor, hingga pengiriman data real-time WebSocket. Di lingkungan produksi enterprise, pemadaman instans Redis bukan lagi pertanyaan 'jika', melainkan 'kapan'.
Sebelum penerapan arsitektur High Availability yang matang, organisasi sering kali mengalami insiden seperti:
- Downtime Total saat Restart/Failover Manual: Administrator harus secara manual mempromosikan replica menjadi master, mengubah konfigurasi DNS/koneksi aplikasi, yang memakan waktu berharga (RTO - Recovery Time Objective tinggi).
- Keterbatasan Memori Vertikal (Vertical Scaling Bottleneck): Memaksa seluruh dataset berada dalam RAM pada satu mesin fisik batasan perangkat keras memori (RAM limit).
- Split-Brain Syndrome: Konfigurasi jaringan yang buruk menyebabkan dua node bertindak sebagai master secara bersamaan, mengakibatkan korupsi data yang parah karena inkonsistensi penulisan.
Setelah menerapkan arsitektur Redis Sentinel untuk sistem failover otomatis dan Redis Cluster untuk distribusi data (sharding), sistem mencapai tingkat ketahanan operasional kelas carrier-grade. Downtime yang tidak terencana berkurang drastis, pemulihan otomatis terjadi dalam hitungan detik tanpa intervensi manual, dan kapasitas penyimpanan dapat diskalakan secara horizontal tanpa batas fisik satu mesin.
[!IMPORTANT] Jangan pernah menjalankan Redis di lingkungan produksi tanpa strategi replikasi dan failover otomatis. Kehilangan data sesi atau kegagalan cache stampede dapat melumpuhkan infrastruktur web secara instan.
2. Konsep Inti & Deep Dive Arsitektur
Untuk memahami cara kerja Redis dalam skala enterprise, kita harus membedah dua pendekatan arsitektural utama yang sering kali disalahpahami: Redis Sentinel dan Redis Cluster.
Redis Sentinel: Fokus pada High Availability (HA)
Redis Sentinel menyediakan High Availability untuk Redis tanpa sharding otomatis. Sentinel memantau instans Master dan Replica, mendeteksi kegagalan, dan melakukan automatic failover.
+--------------------+ +--------------------+
| Redis Sentinel | | Redis Sentinel |
| (Port 26379) | | (Port 26380) |
+---------+----------+ +---------+----------+
| |
+-------------+-------------+
|
v
+---------------------+
| Redis Master | <--- (Writes & Reads)
| (Port 6379) |
+----------+----------+
|
+---------------+---------------+
| (Async Replication) |
v v
+---------------+ +
| Redis Replica | | Redis Replica |
| (Port 6379) | | (Port 6379) |
+---------------+ +---------------+
Redis Cluster: Fokus pada Skalabilitas & ShardingRedis Cluster membagi data secara otomatis ke dalam 16,384 Hash Slots. Setiap node dalam kluster bertanggung jawab atas subset dari slot tersebut. Pendekatan ini memungkinkan horizontal scaling hingga 1,000 node tanpa mengorbankan performa.
+---------------------------------------------------+
| Redis Cluster |
| |
| +------------------+ +------------------+ |
| | Node A | | Node B | |
| | Slots: 0 - 5460 | | Slots: 5461-10922| ... |
| | (Master/Replica) | | (Master/Replica) | |
| +------------------+ +------------------+ |
+---------------------------------------------------+
3. Perbandingan Komparatif / Analisis Pendekatan
Memilih antara Redis Sentinel dan Redis Cluster bergantung pada karakteristik beban kerja aplikasi, kapasitas memori, dan kompleksitas operasional.
| Parameter Komparasi | Redis Sentinel (HA Only) | Redis Cluster (Sharding + HA) |
|---|---|---|
| Skalabilitas Data | Dibatasi oleh RAM satu mesin fisik (vertical). | Tanpa batas fisik (horizontal scaling via sharding). |
| Kompleksitas Setup | Rendah hingga Sedang. Mudah diintegrasikan. | Tinggi. Membutuhkan minimal 3 master & 3 replica. |
| Dukungan Klien | Hampir seluruh klien Redis mendukung Sentinel. | Membutuhkan klien yang mendukung Cluster Protocol (MOVED/ASK). |
| Multi-Key Operations | Didukung penuh (Keys, Transactions, Lua). | Dibatasi; multi-key harus berada di hash tag yang sama {tag}. |
| Failover Otomatis | Ya, dikelola oleh proses Sentinel terpisah. | Ya, dikelola secara internal antar node Redis. |
| Penggunaan Sumber Daya | Efisien CPU dan RAM untuk dataset kecil-menengah. | Overhead tambahan untuk gossip protocol antar node. |
[!TIP] Gunakan Redis Sentinel jika total dataset Anda muat dalam satu RAM server (misal: di bawah 50GB) dan Anda hanya butuh jaminan failover. Gunakan Redis Cluster jika dataset sangat besar dan membutuhkan pemecahan beban tulis (write sharding).
4. Prasyarat Sistem & Persiapan Lingkungan
Sebelum melakukan instalasi dan konfigurasi, pastikan infrastruktur memenuhi standar enterprise berikut:
Spesifikasi Minimum Hardware (per Node):
- CPU: 2 vCPU (Disarankan arsitektur x86_64 modern).
- RAM: 4 GB hingga 32 GB (Tergantung ukuran dataset; pastikan Maxmemory diatur dan Overcommit memory diaktifkan).
- OS: Ubuntu Server 22.04 LTS / Debian 12 / AlmaLinux 9.
- Network: Konektivitas internal berkecepatan tinggi (Minimal 1 Gbps, disarankan 10 Gbps dengan latensi < 1ms).
Persiapan OS Kernel & Security:
Jalankan perintah berikut pada setiap node untuk mengoptimalkan kernel Linux untuk Redis:
# Nonaktifkan Transparent Huge Pages (THP) untuk mencegah latensi tinggi
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
# Tambahkan konfigurasi ke rc.local atau systemd agar permanen setelah reboot
cat << 'EOF' > /etc/systemd/system/disable-thp.service
[Unit]
Description=Disable Transparent Huge Pages (THP)
DefaultDependencies=no
After=sysinit.target local-fs.target
Before=mongod.service redis.service
[Service]
Type=oneshot
ExecStart=/bin/sh -c 'echo never > /sys/kernel/mm/transparent_hugepage/enabled && echo never > /sys/kernel/mm/transparent_hugepage/defrag'
[Install]
WantedBy=basic.target
EOF
systemctl daemon-reload
systemctl enable --now disable-thp.service
# Atur kernel vm.overcommit_memory menjadi 1 (Wajib untuk Redis)
sysctl vm.overcommit_memory=1
echo 'vm.overcommit_memory = 1' >> /etc/sysctl.conf
# Tingkatkan batas file descriptor sistem
ulimit -n 65535
5. Panduan Implementasi Langkah demi Langkah
Kita akan membangun arsitektur Redis Sentinel High Availability dengan 1 Master, 2 Replica, dan 3 Sentinel node yang berjalan pada mesin terpisah untuk mencegah kegagalan koridor jaringan.
A. Instalasi Redis Server (Semua Node)
# Update repositori dan install dependensi
sudo apt update && sudo apt install -y curl lsb-release gnupg
# Tambahkan official Redis GPG key dan repository
curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/$(lsb_release -is | tr '[:upper:]' '[:lower:]') $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/redis.list
# Install Redis
sudo apt update && sudo apt install -y redis
B. Konfigurasi Redis Master (Node 1 - IP: 192.168.1.10)
Edit file /etc/redis/redis.conf:
bind 0.0.0.0
protected-mode yes
port 6379
timeout 0
tcp-keepalive 300
daemonize no
supervised systemd
pidfile /var/run/redis/redis-server.pid
loglevel notice
logfile /var/log/redis/redis-server.log
databases 16
save 900 1
save 300 10
save 60 10000
rdbcompression yes
dbfilename dump.rdb
dir /var/lib/redis
masterauth SuperSecureEnterpriseRedisPassword2024!
requirepass SuperSecureEnterpriseRedisPassword2024!
maxmemory 2gb
maxmemory-policy allkeys-lru
C. Konfigurasi Redis Replica (Node 2 & 3 - IP: 192.168.1.11 & 1.12)
Edit file /etc/redis/redis.conf pada node replica:
bind 0.0.0.0
protected-mode yes
port 6379
daemonize no
supervised systemd
pidfile /var/run/redis/redis-server.pid
loglevel notice
logfile /var/log/redis/redis-server.log
databases 16
dir /var/lib/redis
# Konfigurasi Replikasi
replicaof 192.168.1.10 6379
masterauth SuperSecureEnterpriseRedisPassword2024!
requirepass SuperSecureEnterpriseRedisPassword2024!
replica-serve-stale-data yes
replica-read-only yes
maxmemory 2gb
maxmemory-policy allkeys-lru
D. Konfigurasi Redis Sentinel (Dijalankan di 3 Node Terpisah)
Edit file /etc/redis/sentinel.conf:
port 26379
daemonize no
pidfile /var/run/redis/redis-sentinel.pid
logfile /var/log/redis/redis-sentinel.log
dir /var/lib/redis
# Pantau Master dengan kuorum 2 (dari 3 sentinel)
sentinel monitor mymaster 192.168.1.10 6379 2
# Waktu tunggu sebelum master dianggap down (milliseconds)
sentinel down-after-milliseconds mymaster 5000
# Password autentikasi master
sentinel auth-pass mymaster SuperSecureEnterpriseRedisPassword2024!
# Timeout failover
sentinel failover-timeout mymaster 10000
# Jumlah replika yang dapat melakukan re-config secara bersamaan
sentinel parallel-syncs mymaster 1
6. Bedah Kode & Penjelasan Detail Baris Kunci
Mari kita bedah parameter krusial dalam file konfigurasi di atas untuk memahami dampak operasionalnya:
-
sentinel monitor mymaster 192.168.1.10 6379 2mymaster: Nama unik kluster yang dipantau.192.168.1.10 6379: Alamat IP dan port Master awal.2: Quorum. Angka ini krusial. Karena kita memiliki 3 Sentinel, kuorum 2 berarti minimal 2 sentinel harus sepakat bahwa master tidak dapat dijangkau sebelum proses failover otomatis dipicu. Ini mencegah false positive akibat gangguan jaringan sesaat.
-
sentinel down-after-milliseconds mymaster 5000- Menentukan durasi (dalam milidetik) sebuah node harus berhenti merespons perintah PING sebelum Sentinel menyatakannya Subjectively Down (SDOWN).
-
maxmemory-policy allkeys-lru- Mengatur strategi eviksi memori ketika batas
maxmemory(2GB) tercapai. Algoritma LRU (Least Recently Used) akan menghapus kunci yang paling jarang digunakan di seluruh kunci untuk memastikan memori tidak pernah habis (out of memory).
- Mengatur strategi eviksi memori ketika batas
7. Skenario Produksi & Studi Kasus Dunia Nyata
Dalam sebuah aplikasi e-commerce enterprise dengan beban Flash Sale (100.000 QPS), infrastruktur backend berbasis Node.js/Go terhubung ke Redis Sentinel menggunakan connection pool yang cerdas.
Contoh implementasi koneksi Redis Sentinel menggunakan bahasa Go (go-redis/redis/v8):
package main
import (
"context"
"fmt"
"github.com/go-redis/redis/v8"
"time"
)
var ctx = context.Background()
func main()
{
// Inisialisasi Failover Client dengan Redis Sentinel
rdb := redis.NewFailoverClient(&redis.FailoverOptions{
MasterName: "mymaster",
SentinelAddrs: []string{"192.168.1.10:26379", "192.168.1.11:26379", "192.168.1.12:26379\