Redis + Sentinel + Docker?
Modern web uygulamalarında, performans ve erişilebilirlik kritik. Önbellekleme, veri hızını artırmak için çok yaygın; bu alanda öne çıkan isimlerden biri de Redis. Ancak tek bir Redis sunucusu kullanmak bazen yetersiz kalabilir — sunucu arızalanırsa önbellek devredışı kalır, cache hit-rate düşer, uygulama yavaşlayabilir.
İşte bu durumda Redis’in “yüksek erişilebilirlik (HA)” sağlama aracı Redis Sentinel devreye giriyor. Redis Sentinel’in sunduğu başlıca faydalar şunlar:
- Monitoring — Sentinel, “master” ve “slave/replica” Redis sunucularını izler. Redis+1
- Bildirim / Uyarı — İzlenen sunuculardan biri arızalanırsa sistem uyarı üretebilir. Redis+1
- Otomatik Failover — Eğer master sunucu düşerse, otomatik olarak bir replica “yeni master” olarak yükseltilir. Bu sayede uygulama aksama yaşamadan çalışmaya devam eder. Medium+1
- Configuration Provider (Service Discovery) — Uygulamanın her zaman doğru “master” sunucuya bağlanmasını sağlar; failover sonrası da yeni master adresi otomatik olarak bildirilir. Redis+1
Docker Compose ile bu mimariyi kurmak ise hem kolay hem taşınabilir; birden çok Redis + Sentinel konteynerini tek bir config dosyasıyla ayağa kaldırabilirsin. Repodaki örnek yapı da tam bu senaryoya hizmet ediyor.
Kurulum Adımları
Aşağıda genel akışı anlatıyorum:
- Docker Compose ile bir ağ (network) tanımlanır — Tüm Redis ve Sentinel konteynerleri aynı ağ içinde olur.
- Bir master Redis sunucusu oluşturulur, ardından bir veya birden fazla slave/replica Redis sunucusu tanımlanır.
- Sentinel konteynerleri çalıştırılır; bu Sentinel’ler master + replica’ları izler.
- Uygulama (örneğin backend servis) — uygulama kodu — Sentinel’e sorarak “şu anki master hangisi?” bilgisini alır ve isteklerini master’a yönlendirir.
- Master arızalanırsa Sentinel’ler quorum (yeterli sayıda Sentinel) kontrolüyle failover başlatır, bir replica master olur; uygulama otomatik olarak yeni master’a yönlendirilir.
Bu adımlar, repodaki docker-compose.yml ve ilgili konfigürasyon dosyaları ile tanımlanmış. Eğer istersen, repodaki örnek docker-compose.yml’i, blog okuyucularının kolayca kopyalayıp “kendi ortamlarında” çalıştırabileceği şekilde yazıya dahil edebilirim.
Senaryo: Bir Web Uygulamasında Redis Sentinel’in Getirdiği Güvenlik ve Güvenilirlik
Diyelim ki bir web/blog uygulaman var (örneğin WordPress + özel eklentiler ya da kendi yazdığın backend).
- Yeni bir yazı yayınlıyorsun; sistem cache’den içerikleri çekiyor — cache miss olursa veritabanına düşüyor.
- Tek bir Redis sunucusu var: eğer o düştüyse, cache çalışmaz, her istek veritabanına gider — yük artar, kullanıcı deneyimi düşer.
- Ancak Redis + Sentinel + Replica yapılandırılmışsa: master düşse bile yeni master otomatik seçilir. Uygulaman reddedilmez, kesintisiz çalışır.
- Tekrar ayağa kalkma, manuel konfigürasyon derdi yok. Yüksek erişilebilirlik ve uptime sağlar.
Yani özellikle kullanıcı trafiği yüksek sistemlerde (blog, API, e-ticaret vb.) Redis + Sentinel + Docker Compose kombinasyonu çok doğru bir mimari seçim.
(Opsiyonel) Örnek Docker Compose Konfigürasyonu
Aşağıdaki örnek yazıda gösterebileceğin, kolayca kopyalanabilir bir
docker-compose.ymlşablonu:
version: '3.8'
services:
redis-master:
image: redis:latest
container_name: redis-master
ports:
- "6379:6379"
networks:
- redis-net
redis-slave1:
image: redis:latest
container_name: redis-slave1
command: ["redis-server", "--slaveof", "redis-master", "6379"]
depends_on:
- redis-master
networks:
- redis-net
redis-slave2:
image: redis:latest
container_name: redis-slave2
command: ["redis-server", "--slaveof", "redis-master", "6379"]
depends_on:
- redis-master
networks:
- redis-net
sentinel:
image: redis:latest
container_name: redis-sentinel
command: >
redis-sentinel /etc/redis/sentinel.conf
depends_on:
- redis-master
- redis-slave1
- redis-slave2
ports:
- "26379:26379"
networks:
- redis-net
networks:
redis-net:
driver: bridge
sentinel.conf
port 26379
sentinel monitor myMaster 127.0.0.1 6379 1
sentinel down-after-milliseconds myMaster 5000
sentinel parallel-syncs myMaster 1
sentinel failover-timeout myMaster 10000
sentinel announce-ip 127.0.0.1
sentinel announce-port 26379
Sonuç & Tavsiye
Redis + Sentinel + Docker Compose kombinasyonu, özellikle üretim ortamlarında “tek sunucuya bağlı kalmak” riskini ortadan kaldırıyor. Uygulamanın ölçeklenebilirliği, güvenilirliği ve uptime’ı artıyor.
Eğer WordPress blog’un ya da başka bir backend sistemin yüksek trafik alıyorsa; cache katmanı olarak Redis kullanıyorsan; bu yapı kesinlikle değerlendirilmeli.