Redis Sentinel ile Yüksek Erişilebilir ve Dayanıklı Bir Mimari Oluşturma

 · 

Redis Sentinel ile Yüksek Erişilebilir ve Dayanıklı Bir Mimari Oluşturma

Redis Sentinel ile Yüksek Erişilebilir ve Dayanıklı Bir Mimari Oluşturma

Redis'in hafıza içi veri depolama yeteneği, uygulamalara inanılmaz hız avantajları sunar. Mikroservis mimarilerinden gerçek zamanlı veri işleme sistemlerine kadar geniş bir yelpazede kritik bileşen olarak görev alır. Ancak, tekil bir Redis sunucusu, yüksek erişilebilirlik gereksinimleri olan üretim ortamları için ciddi bir risk faktörüdür. Birincil sunucunun (master) beklenmedik bir şekilde durması, veri kaybına veya uygulama kesintilerine yol açabilir. Bu noktada Redis Sentinel devreye girer; Redis kurulumunuz için otomatik failover, izleme ve yapılandırma yönetimi sağlayarak dayanıklılığı artırır.

Redis Yüksek Erişilebilirlik Neden Gereklidir?

Bir uygulamanın performansı ve kesintisiz çalışması, veri katmanının güvenilirliğine doğrudan bağlıdır. Tek bir Redis master sunucusu, birincil hata noktası (Single Point of Failure - SPoF) oluşturur. Donanım arızası, ağ kesintisi veya yazılım hatası gibi herhangi bir problem, tüm sistemi etkileyebilir. Yüksek erişilebilirlik, bu tür durumlarda dahi servis sürekliliğini sağlamak için tasarlanmıştır. Redis Sentinel, bir master sunucusunun erişilemez hale geldiğini tespit ettiğinde, otomatik olarak bir replikayı yeni master olarak terfi ettirir ve istemcileri bu yeni master'a yönlendirir. Bu süreç, manuel müdahaleye gerek kalmadan iş sürekliliğini garanti eder.

Redis Sentinel'in Temel Mimarisi ve Çalışma Prensibi

Redis Sentinel, Redis dağıtımının bir parçasıdır ve bağımsız bir süreç olarak çalışır. Genellikle her biri farklı sunucularda çalışan en az üç Sentinel örneği ile bir topoloji oluşturulur. Bu Sentineller birbirlerini ve izledikleri Redis master ve replika sunucularını sürekli olarak denetler.

Sentinel'in Görevleri

  • İzleme (Monitoring): Sentineller, master ve replika Redis instance'larının sürekli olarak çalışır durumda olup olmadığını ping göndererek kontrol eder. Bir instance'ın belirli bir süre yanıt vermemesi durumunda 'SDOWN' (Subjectively Down) durumuna geçer.
  • Bildirim (Notification): Sentinel, bir Redis instance'ında bir olay (örneğin bir failover) meydana geldiğinde, yapılandırılmış diğer Sentinel'leri ve dış sistemleri bilgilendirebilir.
  • Otomatik Failover (Automatic Failover): Bir master sunucusunun gerçekten erişilemez olduğuna karar verildiğinde ('ODOWN' - Objectively Down), Sentineller anlaşarak bir failover başlatır. En uygun replikayı yeni master olarak seçer, diğer replikaları yeni master'ı takip edecek şekilde yapılandırır ve eski master geri geldiğinde onu yeni master'ın replikası yapar.
  • Yapılandırma Sağlayıcı (Configuration Provider): İstemciler, master sunucusunun IP adresini ve portunu almak için Sentinel'lere bağlanabilir. Bir failover sonrası, Sentinel yeni master'ın bağlantı bilgilerini istemcilere iletir.

Quorum ve Majority Kavramları

Sentinel mimarisinin merkezinde `quorum` ve `majority` kavramları yer alır:

  • Quorum: Bir Sentinel'in master sunucusunun erişilemez olduğunu teyit etmesi için kaç başka Sentinel'in aynı fikirde olması gerektiğini belirten sayıdır. Bir Sentinel, `SDOWN` durumuna geçen bir master hakkında diğer Sentinellerden `quorum` sayısı kadar teyit aldığında, master'ı `ODOWN` olarak işaretler ve failover sürecini başlatmak için oy kullanmaya başlar.
  • Majority: Failover sürecini başarıyla başlatmak ve tamamlamak için kaç Sentinel'in yeni master seçimini onaylaması gerektiğini belirten sayıdır. Sentinel setindeki toplam Sentinel sayısının yarısından fazlası (`N/2 + 1`) Sentinel'in failover kararına katılması gerekir. Örneğin, 3 Sentinel varsa, 2 Sentinel'in (3/2+1 = 2) onayı gereklidir. Bu, Sentinel kümesinin bölünmüş beyin (split-brain) senaryolarından kaçınmasına yardımcı olur.

Üretim Ortamında Redis Sentinel Kurulumu

Üretim ortamında Redis Sentinel kurarken, her bir Sentinel instance'ının farklı fiziksel veya sanal sunucularda çalışmasına dikkat etmek, yüksek erişilebilirliği maksimize eder. Minimum üç Sentinel instance'ı kullanılması önerilir ve her zaman tek sayıda Sentinel kullanmak, majority kararlarında takılmayı önler.

Adım 1: Redis Instance'larının Hazırlanması (Master ve Replikalar)

Öncelikle Redis master ve replika sunucularını yapılandırmanız gerekir. Her bir Redis instance'ı için `redis.conf` dosyalarını düzenleyin.

Master Redis Yapılandırması (`redis-master.conf`):

port 6379daemonize yespidfile /var/run/redis_6379.pidloglevel noticelogfile /var/log/redis/redis_6379.logdir /var/lib/redisdbfilename dump.rdb# bind 127.0.0.1 (Üretimde dış IP'ye bağlanmak için yorum satırı yapın veya IP adresini belirtin)requirepass your_strong_password

Yukarıdaki yapılandırma, temel bir Redis master sunucusu içindir. `requirepass` ile güçlü bir parola belirlemek önemlidir.

Replikalar için Redis Yapılandırması (`redis-replica1.conf`, `redis-replica2.conf` vb.):

port 6380daemonize yespidfile /var/run/redis_6380.pidloglevel noticelogfile /var/log/redis/redis_6380.logdir /var/lib/redisdbfilename dump-6380.rdb# bind 127.0.0.1requirepass your_strong_passwordreplicaof <master_ip_address> 6379masterauth your_strong_password

Replikalar için farklı portlar kullanın (`6380`, `6381` vb.). `replicaof` komutu ile master'ın IP adresini ve portunu belirtin. `masterauth` ile master'ın parolasıyla kimlik doğrulama yapıldığından emin olun.

Adım 2: Redis Sentinel Instance'larının Kurulumu

Her bir Sentinel sunucusu için `sentinel.conf` dosyasını yapılandırın. Genellikle, bu dosyalar aynıdır, sadece çalıştıkları sunucuların IP adresleri farklı olacaktır.

Sentinel Yapılandırması (`sentinel.conf`):

port 26379daemonize yespidfile /var/run/redis-sentinel.pidloglevel noticelogfile /var/log/redis/redis-sentinel.logdir /var/lib/redis# Redis master'ı izlemeye başla. <master-name> Sentinel'in bu master'a atadığı isimdir.sentinel monitor mymaster <master_ip_address> 6379 <quorum_count>sentinel auth-pass mymaster your_strong_password# Bir master'ın SDOWN durumuna geçmesi için geçen süre (milisaniye)sentinel down-after-milliseconds mymaster 5000# Failover gerçekleştiğinde maksimum eş zamanlı replika yeniden senkronizasyon sayısısentinel parallel-syncs mymaster 1# Failover gerçekleştiğinde replikaların yeni master'a yönlendirilmesi için beklenen süre (milisaniye)sentinel failover-timeout mymaster 60000

Burada `mymaster` sizin belirlediğiniz bir isimdir. `<master_ip_address>` ve `6379` master'ın gerçek IP adresi ve portudur. `<quorum_count>` daha önce bahsettiğimiz `quorum` değeridir (örneğin 2 veya 3). `sentinel auth-pass` ile Redis master'ının parolası Sentinel'e tanıtılır.

Adım 3: Redis ve Sentinel'leri Başlatma ve Doğrulama

Redis instance'larını ve Sentinel'leri başlatın:

Redis Master'ı Başlatma:

redis-server /path/to/redis-master.conf

Redis Replikaları Başlatma:

redis-server /path/to/redis-replica1.confredis-server /path/to/redis-replica2.conf

Sentinel'leri Başlatma (Her Sentinel sunucusunda):

redis-sentinel /path/to/sentinel.conf

Tüm servisler başladıktan sonra, Sentinel'lerin durumunu kontrol edebilirsiniz. Herhangi bir Sentinel'e bağlanarak aşağıdaki komutları çalıştırın:

redis-cli -p 26379sentinel masters

Bu komut, izlenen tüm master'ları ve durumlarını listeler. Output, master'ın `is_master` olduğunu ve `num-slaves` değerini göstermelidir. Ayrıca replikaların durumunu da kontrol edebilirsiniz:

sentinel slaves mymaster

Bu, `mymaster` adına sahip master'ın tüm replikalarını listeler ve her birinin `is_slave` durumunda olduğunu doğrular.

Gerçek Dünya Senaryosu: Bir Uygulama Entegrasyonu ve Failover Testi

Bir e-ticaret uygulamasının kullanıcı oturumlarını Redis'te sakladığını varsayalım. Uygulama, kullanıcının oturum verilerini hızlı bir şekilde alıp kaydetmelidir. Tek bir Redis master'ının çökmesi, tüm oturumların kaybolmasına ve kullanıcıların sistemden atılmasına neden olurdu. Redis Sentinel ile bu senaryo farklı işler.

Uygulama Tarafında Bağlantı Yönetimi

Uygulama, Redis'e doğrudan master IP'si üzerinden bağlanmak yerine, Sentinel kümesine bağlanır. Çoğu modern Redis istemci kütüphanesi (örn. Java için Jedis, Python için redis-py, Go için go-redis), Sentinel'i destekler. İstemci, Sentinel'e bağlanır ve belirli bir master setinin (örneğin `mymaster`) güncel master'ının adresini sorar. Sentinel bu bilgiyi döndürür ve istemci daha sonra doğrudan bu master'a bağlanır. Bir failover olduğunda, istemci Sentinel'e tekrar danışarak yeni master'ın adresini öğrenir ve bağlantısını günceller.

Örnek Java (Jedis) istemci yapılandırması:

Set<String> sentinels = new HashSet<>();sentinels.add("192.168.1.10:26379");sentinels.add("192.168.1.11:26379");sentinels.add("192.168.1.12:26379");JedisSentinelPool pool = new JedisSentinelPool("mymaster", sentinels);try (Jedis jedis = pool.getResource()) {    jedis.set("session:user123", "data");    String sessionData = jedis.get("session:user123");    System.out.println(sessionData);}

Bu kod parçası, uygulamanın Sentinel kümesini nasıl keşfedeceğini ve master'a nasıl bağlanacağını gösterir. `mymaster` ismi, `sentinel.conf` dosyasında tanımlanan isimle eşleşmelidir.

Failover Testi

Kurulumunuzun doğru çalıştığını doğrulamak için manuel bir failover testi gerçekleştirebilirsiniz:

  1. Aktif Redis master sunucusunun çalıştığı sunucuya gidin.
  2. Redis master sürecini durdurun (örneğin `kill -9 <redis_master_pid>` veya `systemctl stop redis_6379`).
  3. Sentinel loglarını izleyin (örneğin `tail -f /var/log/redis/redis-sentinel.log`). Sentinellerin master'ı SDOWN ve ardından ODOWN olarak işaretlediğini, yeni bir master seçtiğini ve failover sürecini tamamladığını göreceksiniz.
  4. Birkaç saniye sonra, herhangi bir Sentinel'e bağlanarak `sentinel masters` komutunu tekrar çalıştırın. Yeni master'ın eski replikalardan biri olduğunu ve durumunun `is_master` olarak değiştiğini göreceksiniz.
  5. Uygulamanızın bu süreçte kesintisiz çalıştığından veya kısa bir bağlantı hatası sonrası otomatik olarak yeni master'a bağlandığından emin olun.

Performans ve Güvenlik İpuçları

  • Ağ Gecikmesi: Sentinel ve Redis instance'ları arasındaki ağ gecikmesi failover sürelerini etkileyebilir. Mümkün olduğunca düşük gecikmeli bir ağda konumlandırılmalıdırlar.
  • Kimlik Doğrulama: Redis master ve replikalarında `requirepass` ve Sentinel'lerde `sentinel auth-pass` kullanarak güvenliği sağlayın.
  • Kaynak Ayırma: Sentinel'ler hafif süreçler olsa da, Redis instance'larının yeterli CPU, RAM ve disk kaynaklarına sahip olduğundan emin olun.
  • Yedekleme: Yüksek erişilebilirlik, felaket kurtarma anlamına gelmez. Düzenli Redis yedeklemeleri (RDB veya AOF) almaya devam edin.
  • İzleme: Sentinel loglarını ve Redis metriklerini (örneğin Prometheus ve Grafana ile) sürekli olarak izleyin.

Sonuç

Redis Sentinel, Redis kurulumlarınız için sağlam bir yüksek erişilebilirlik katmanı sunar. Otomatik failover yetenekleri sayesinde, tekil hata noktalarını ortadan kaldırır ve uygulamalarınızın veri katmanında kesintisiz çalışmasını sağlar. Doğru yapılandırılmış bir Sentinel kümesi, üretim ortamlarında beklenmedik Redis master kesintilerine karşı dayanıklılık sağlayarak operasyonel yükü azaltır ve servis sürekliliğini garanti eder. Bu rehberdeki adımları takip ederek, kendi yüksek erişilebilir Redis mimarinizi başarıyla kurabilir ve yönetebilirsiniz.

← Blog Listesine Dön