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:

  1. Docker Compose ile bir ağ (network) tanımlanır — Tüm Redis ve Sentinel konteynerleri aynı ağ içinde olur.
  2. Bir master Redis sunucusu oluşturulur, ardından bir veya birden fazla slave/replica Redis sunucusu tanımlanır.
  3. Sentinel konteynerleri çalıştırılır; bu Sentinel’ler master + replica’ları izler.
  4. Uygulama (örneğin backend servis) — uygulama kodu — Sentinel’e sorarak “şu anki master hangisi?” bilgisini alır ve isteklerini master’a yönlendirir.
  5. 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.

Repo Link: https://github.com/kalebasiyakup/docker-examples

Bunlar da hoşunuza gidebilir...