Redis Sentinel ile Yüksek Erişilebilirlik Kurulumu: Kesintisiz Veri Akışı İçin Mimari Yaklaşım

 · 

Redis Sentinel ile Yüksek Erişilebilirlik Kurulumu: Kesintisiz Veri Akışı İçin Mimari Yaklaşım

Redis Sentinel ile Yüksek Erişilebilirlik Kurulumu: Kesintisiz Veri Akışı İçin Mimari Yaklaşım

Uygulama katmanının temel bileşenlerinden biri olan Redis, düşük gecikmeli veri erişimi ve yüksek performansıyla kritik rol oynar. Ancak tekil bir Redis instance'ı, arıza durumunda tüm sistemi etkileyebilecek bir tek hata noktası (Single Point of Failure - SPOF) barındırır. Bu riski ortadan kaldırmak ve veri erişilebilirliğini garanti altına almak için Redis Sentinel devreye girer. Sentinel, Redis master-replica mimarisini sürekli izleyerek, bir arıza anında otomatik failover (yük devretme) süreçlerini yöneten dağıtık bir sistemdir.

Redis Sentinel'in Temel İşleyişi ve Mimarisi

Redis Sentinel, birden fazla Sentinel süreci (instance) tarafından yönetilen bir gözlemci sistemidir. Her Sentinel süreci, belirli bir Redis master'ını ve onun replikalarını izler. Bir Sentinel, master'ın erişilemez olduğunu tespit ettiğinde, diğer Sentinel'lerle konsensüs (quorum) sağlayarak otomatik bir failover başlatır. Bu süreç, kesintisiz hizmet sunumu için hayati öneme sahiptir.

Sentinel Bileşenleri ve Rolleri

  • Sentinel Süreçleri: Redis instance'larından ayrı çalışan, genellikle en az üç adet olan hafif süreçlerdir. Bunlar birbirleriyle ve izledikleri Redis instance'larıyla iletişim halindedirler.
  • Redis Master: Yazma ve okuma işlemlerini yürüten birincil Redis instance'ıdır.
  • Redis Replicas: Master'ın verilerinin kopyalarını tutan ve okuma işlemlerine hizmet edebilen pasif instance'lardır. Master arızalandığında, bir replica yeni master olarak terfi ettirilir.

Sentinel'in kararlarını almasında kritik parametreler mevcuttur:

  • quorum: Bir master'ın arızalı olduğuna karar vermek ve failover başlatmak için kaç Sentinel'in aynı fikirde olması gerektiğini belirten sayıdır.
  • down-after-milliseconds: Bir Redis instance'ının ne kadar süreyle erişilemez kalması durumunda 'SDOWN' (Subjectively Down) olarak işaretleneceğini belirler.
  • failover-timeout: Bir failover sürecinin maksimum ne kadar sürede tamamlanması gerektiğini belirler.
  • parallel-syncs: Yeni master seçildikten sonra, kaç replikanın aynı anda yeni master ile senkronize olabileceğini belirler. Bu, ağ trafiğini ve yükü yönetmek için önemlidir.

Üretim Ortamı İçin Sentinel Konfigürasyonu

Bir Sentinel instance'ının temel konfigürasyonu genellikle aşağıdaki gibidir. Her Sentinel sunucusunda bu dosya ayrı ayrı yapılandırılmalıdır:

port 26379dir /var/lib/redis-sentinel# 'mymaster' adında bir master'ı izle. IP'si 192.168.1.10, portu 6379. Failover için 2 Sentinel'in konsensüsü gerek.sentinel monitor mymaster 192.168.1.10 6379 2# Bir Redis instance'ının ne kadar süre erişilemez kalırsa down olarak işaretleneceği. (Milisaniye)sentinel down-after-milliseconds mymaster 5000# Bir failover sürecinin maksimum ne kadar sürede tamamlanması gerektiği. (Milisaniye)sentinel failover-timeout mymaster 60000# Bir failover sonrası kaç replikanın aynı anda yeni master ile senkronize olabileceği.sentinel parallel-syncs mymaster 1# İsteğe bağlı: Sentinel'in belirli bir olayda çalıştıracağı betikler.sentinel notification-script mymaster /etc/redis/notify.shsentinel client-reconfig-script mymaster /etc/redis/reconfig.sh

Yukarıdaki konfigürasyon, mymaster adlı Redis master'ını izleyen bir Sentinel kurulumunu gösterir. quorum değeri 2 olduğu için, en az iki Sentinel'in master'ın erişilemez olduğu konusunda hemfikir olması gerekir. Bu, hatalı pozitifleri önlemek ve sistemin kararlı kalmasını sağlamak için önemlidir.

Client Tarafında Bağlantı Yönetimi

Uygulama tarafında Redis client'larının Sentinel ile entegre olması, failover durumlarında kesintisiz bağlantı sağlamak için kritik öneme sahiptir. Geleneksel olarak, client'lar doğrudan master IP adresine bağlanırken, Sentinel mimarisinde client'lar bir Sentinel instance'ına bağlanır ve master'ın güncel adresini öğrenir. Çoğu modern Redis client kütüphanesi (örn. Java Jedis, Python redis-py, Node.js ioredis) Sentinel desteği sunar.

# Python redis-py kütüphanesi ile Sentinel bağlantı örneğiimport redisfrom redis.sentinel import Sentinel# Sentinel düğümlerinin listesi (IP, Port)sentinels = [('192.168.1.11', 26379), ('192.168.1.12', 26379), ('192.168.1.13', 26379)]# Sentinel nesnesini oluşturSentinel = Sentinel(sentinels, socket_timeout=0.1)# Master'a bağlantı almaster = sentinel.master('mymaster', socket_timeout=0.1)master.set('mykey', 'myvalue')print(f"Master IP: {master.connection_pool.connection_kwargs['host']}")# Replicadan bağlantı al (sadece okuma için)slave = sentinel.slave_for('mymaster', socket_timeout=0.1)print(f"Replica IP: {slave.connection_pool.connection_kwargs['host']}")

Bu yapı, client'ın her zaman aktif master'a yönlendirilmesini sağlar. Bir failover meydana geldiğinde, Sentinel client'lara yeni master'ın adresini bildirir ve client'lar bağlantılarını otomatik olarak günceller.

Gerçek Dünya Senaryosu: Mikroservis Ortamında Sentinel

Büyük bir e-ticaret platformunun mikroservis mimarisinde, sepet (cart) servisi gibi kritik bir bileşenin, kullanıcı oturum verileri ve geçici sepet içerikleri için Redis'i kullandığını varsayalım. Bu servis, yüksek trafik altında çalışır ve milisaniyelik gecikmelere bile tahammülü yoktur. Redis master'ının bir donanım arızası veya ağ kesintisi nedeniyle erişilemez hale gelmesi, doğrudan kullanıcı deneyimini ve platformun gelirini etkileyecektir.

Redis Sentinel devreye girdiğinde, bu senaryo aşağıdaki gibi yönetilir:

  1. Birden fazla sunucuya dağıtılmış 3 Sentinel instance'ı, ana Redis master'ı ve bağlı replikaları sürekli izler.
  2. Redis master instance'ının çalıştığı sunucu beklenmedik bir şekilde çöker.
  3. Sentinel'ler, master'ın down-after-milliseconds değeri kadar süre boyunca yanıt vermediğini tespit eder.
  4. Sentinel'ler, kendi aralarında konsensüs (quorum) sağlayarak master'ın gerçekten erişilemez olduğuna karar verirler.
  5. Sentineller, mevcut replikalar arasından en uygun olanını (örn. en güncel veriye sahip olanı) yeni master olarak seçer ve terfi ettirir.
  6. Kalan replikaları yeni master'a yönlendirerek senkronizasyonu başlatır.
  7. Client'lar, Sentinel'e tekrar bağlanarak veya mevcut bağlantı havuzlarındaki bilgiyi güncelleyerek yeni master'ın adresini öğrenir ve kesintisiz bir şekilde işlemlere devam ederler. Kullanıcılar, sepetlerindeki ürünleri kaybetmeden alışverişlerine devam ederler.

Bu senaryoda Sentinel, manuel müdahaleye gerek kalmadan otomatik olarak arızayı izler, yeni bir master seçer ve sistemi kurtarır. Bu, iş sürekliliği ve veri tutarlılığı açısından kritik bir avantajdır.

Kurulum Adımları ve Dikkat Edilmesi Gerekenler

Adım 1: Redis Master ve Replica Kurulumu

Her sunucuya Redis kurulumunu yapın. Ardından, bir Redis instance'ını master olarak bırakıp, diğerlerini replica olarak yapılandırın. Replica için redis.conf dosyasına:

replicaof 192.168.1.10 6379 # Master IP ve Portu

Adım 2: Sentinel Kurulumu ve Başlatma

Her Sentinel sunucusunda sentinel.conf dosyasını yukarıdaki örneğe göre yapılandırın ve Sentinel'i başlatın:

redis-sentinel /etc/redis/sentinel.conf

Adım 3: İzleme ve Test

Sentinel'lerin durumunu ve izledikleri master'ı kontrol etmek için:

redis-cli -p 26379 info sentinel

Master Redis instance'ını durdurarak (redis-cli -p 6379 shutdown) failover sürecini test edin. Sentinel loglarını izleyin ve client uygulamanızın kesintisiz çalışıp çalışmadığını doğrulayın.

Önemli Notlar:

  • Ağ İzolasyonu: Sentinel ve Redis instance'larının ağ iletişiminin sorunsuz olduğundan emin olun. Firewall kurallarını doğru yapılandırın.
  • Güvenlik: Redis instance'ları için AUTH (parola) kullanıyorsanız, Sentinel konfigürasyonunda da bu parolayı belirtmeniz gerekir (sentinel auth-pass mymaster ).
  • Yedekleme: Yüksek erişilebilirlik, felaket kurtarma anlamına gelmez. Veri kaybına karşı düzenli yedeklemeler alın.
  • Farklı Sunucular: Her Sentinel instance'ını, failover durumlarında tek bir sunucu arızasının tüm Sentinel sistemini etkilememesi için ayrı fiziksel veya sanal sunucularda barındırın.
  • Kubernetes Ortamı: Kubernetes gibi konteyner orkestrasyon platformlarında Redis Sentinel kurulumu, Persistent Volume'lar ve StatefulSet'ler kullanılarak daha dinamik bir şekilde yapılabilir.

Sonuç

Redis Sentinel, kritik uygulamalar için Redis'in yüksek erişilebilirliğini sağlayan, sağlam ve kendini onaran bir mekanizmadır. Doğru yapılandırıldığında, tek hata noktalarını ortadan kaldırır ve altyapınızın beklenmedik arızalara karşı dayanıklılığını önemli ölçüde artırır. Bu mimari yaklaşım, üretim ortamlarında veri erişilebilirliğinin garanti altına alınmasında vazgeçilmez bir araçtır.

← Blog Listesine Dön