Merhaba arkadaşlar, bugün sizlere Redis sunucularınız için yüksek erişilebilirlik (High Availability) sağlamanın en temel yöntemlerinden biri olan Redis Sentinel kurulumunu adım adım anlatacağım. Özellikle cache veya oturum (session) deposu olarak Redis kullanan uygulamalarınızda, tek bir Redis sunucusunun (master) arızalanması tüm sisteminizi durdurabilir. Sentinel tam da bu noktada devreye giriyor ve otomatik failover (yük devretme) ile kesintisiz hizmet sağlıyor. Benim üretim sunucularımda da güvenle kullandığım bu mimariyi sizlerle paylaşıyorum.
Ön Gereksinimler ve Ortam Hazırlığı
Bu rehberde, 3 adet Ubuntu 22.04 sunucu üzerinde kurulum yapacağız. Senaryomuz şu şekilde:
Sunucu 1 (Master): 192.168.1.10
Sunucu 2 (Replica/Slave): 192.168.1.11
Sunucu 3 (Replica/Slave): 192.168.1.12
Her sunucuda hem Redis hem de Redis Sentinel çalışacak. Sentinel'ler birbirlerini izleyerek master'ın sağlık durumunu kontrol edecekler.
Redis Kurulumu ve Temel Yapılandırma
İlk olarak tüm sunuculara Redis'i kuralım. Ben genelde resmi repo üzerinden kurulum yapmayı tercih ediyorum.
Kurulum tamamlandıktan sonra, her sunucu için ana Redis konfigürasyon dosyasını (/etc/redis/redis.conf) düzenleyelim. Master sunucuda (192.168.1.10) aşağıdaki ayarları yapın:
Replica sunucularda (192.168.1.11 ve 192.168.1.12) ise aynı ayarları yaptıktan sonra, ek olarak kendilerini master'a bağlamalarını söylememiz gerekiyor. Replica sunucuların konfigürasyonuna şu satırı ekleyin:
Tüm sunucularda Redis servisini yeniden başlatalım:
Master sunucuda, replikaların bağlanıp bağlanmadığını kontrol etmek için Redis CLI'ı kullanabiliriz:
Çıktıda "connected_slaves:2" gibi bir ibare görmelisiniz.
Redis Sentinel Kurulumu ve Yapılandırması
Şimdi asıl işin özüne gelelim. Sentinel, Redis ile birlikte gelen bir yazılım. Sentinel için ayrı bir konfigürasyon dosyası oluşturacağız. Tüm sunucularda /etc/redis/sentinel.conf dosyasını düzenleyelim.
Buradaki en kritik ayarlardan biri quorum değeri. 3 Sentinel için bu değeri 2 yaptık. Bu, bir master'ın "down" olarak işaretlenebilmesi için en az 2 Sentinel'in aynı fikirde olması gerektiği anlamına gelir.
Sentinel Servisini Başlatma ve Test Etme
Sentinel'i sistem servisi olarak başlatalım. Önce bir systemd servis dosyası oluşturalım:
İçine şu içeriği yapıştırın:
Servisi etkinleştirip başlatalım:
Kurulumun çalışıp çalışmadığını kontrol etmek için Sentinel CLI'ına bağlanalım:
Bağlandıktan sonra Sentinel durumunu sorgulayalım:
Bu komut, master Redis sunucunuzun durumu, IP'si, kaç tane Sentinel'in onu izlediği gibi tüm detayları gösterecektir.
Dikkat Edilmesi Gerekenler ve Optimizasyon Önerileri
Güvenlik: Bu rehberde basitlik için `bind 0.0.0.0` kullandık. Üretim ortamında mutlaka güvenlik duvarınızı (UFW/iptables) yapılandırarak sadece gerekli sunucuların 6379 (Redis) ve 26379 (Sentinel) portlarına erişebildiğinden emin olun.
Quorum Değeri: Sentinel sayınız değişirse quorum değerini `(Sentinel_Sayisi/2) + 1` formülü ile güncellemeyi unutmayın.
Uygulama Tarafı: PHP, Python, Node.js gibi dillerde Redis istemci kütüphanenizin Sentinel desteği olduğundan emin olun. Bağlantı için master'ın IP'si yerine Sentinel'lerin IP ve portlarını (örn: `['tcp://192.168.1.10:26379', 'tcp://192.168.1.11:26379']`) vermeniz gerekebilir.
Log Takibi: Sorun yaşarsanız ilk bakacağınız yer /var/log/redis/sentinel.log dosyasıdır. Failover olaylarının detayı burada yazar.
Sonuç olarak, Redis Sentinel kurulumu biraz emek istese de, sağladığı otomatik failover özelliği ile gece yarısı bir sunucu arızasında sizi uyandırmayacak kadar değerlidir. Bu kurulumu kendi ortamınıza uyarlarken sorun yaşarsanız veya siz bu konfigürasyonu kendi sunucularınızda nasıl yapıyorsunuz, aşağıdaki yorumlarda paylaşabilirsiniz. Herkese kesintisiz servisler!
Bu rehberde, 3 adet Ubuntu 22.04 sunucu üzerinde kurulum yapacağız. Senaryomuz şu şekilde:
Sunucu 1 (Master): 192.168.1.10
Sunucu 2 (Replica/Slave): 192.168.1.11
Sunucu 3 (Replica/Slave): 192.168.1.12
Her sunucuda hem Redis hem de Redis Sentinel çalışacak. Sentinel'ler birbirlerini izleyerek master'ın sağlık durumunu kontrol edecekler.
İlk olarak tüm sunuculara Redis'i kuralım. Ben genelde resmi repo üzerinden kurulum yapmayı tercih ediyorum.
Bash:
sudo apt update
sudo apt install redis-server -y
Kurulum tamamlandıktan sonra, her sunucu için ana Redis konfigürasyon dosyasını (/etc/redis/redis.conf) düzenleyelim. Master sunucuda (192.168.1.10) aşağıdaki ayarları yapın:
NGINX:
# Bağlantı için tüm arayüzleri dinle
bind 0.0.0.0
# Koruma modunu kapat (şifre kullanacağız)
protected-mode no
# Güçlü bir parola belirleyin
requirepass SifremBuraya123
masterauth SifremBuraya123
# Sunucu 1 için özel ayar: Bu sunucu MASTER olacak
# replicaof ayarı yorum satırında kalacak veya olmayacak
Replica sunucularda (192.168.1.11 ve 192.168.1.12) ise aynı ayarları yaptıktan sonra, ek olarak kendilerini master'a bağlamalarını söylememiz gerekiyor. Replica sunucuların konfigürasyonuna şu satırı ekleyin:
NGINX:
# Master sunucunun IP'sini ve portunu belirt
replicaof 192.168.1.10 6379
Tüm sunucularda Redis servisini yeniden başlatalım:
Bash:
sudo systemctl restart redis-server
sudo systemctl enable redis-server
Master sunucuda, replikaların bağlanıp bağlanmadığını kontrol etmek için Redis CLI'ı kullanabiliriz:
Bash:
redis-cli -a SifremBuraya123 INFO replication
Çıktıda "connected_slaves:2" gibi bir ibare görmelisiniz.
Şimdi asıl işin özüne gelelim. Sentinel, Redis ile birlikte gelen bir yazılım. Sentinel için ayrı bir konfigürasyon dosyası oluşturacağız. Tüm sunucularda /etc/redis/sentinel.conf dosyasını düzenleyelim.
NGINX:
port 26379
bind 0.0.0.0
daemonize yes
pidfile "/var/run/redis-sentinel.pid"
logfile "/var/log/redis/sentinel.log"
# İzlenecek master grubunu tanımla
# 'mymaster' isimli grubu izle, master IP:PORT, QUORUM sayısı 2
sentinel monitor mymaster 192.168.1.10 6379 2
# Master'ın erişilemez sayılması için gereken süre (milisaniye)
sentinel down-after-milliseconds mymaster 5000
# Failover sonrası, yeni slave'lerin eş zamanlanma sayısı
sentinel parallel-syncs mymaster 1
# Failover işlemi için timeout (milisaniye)
sentinel failover-timeout mymaster 10000
# Master Redis parolasını belirt (ÇOK ÖNEMLİ!)
sentinel auth-pass mymaster SifremBuraya123
Buradaki en kritik ayarlardan biri quorum değeri. 3 Sentinel için bu değeri 2 yaptık. Bu, bir master'ın "down" olarak işaretlenebilmesi için en az 2 Sentinel'in aynı fikirde olması gerektiği anlamına gelir.
Sentinel'i sistem servisi olarak başlatalım. Önce bir systemd servis dosyası oluşturalım:
Bash:
sudo nano /etc/systemd/system/redis-sentinel.service
İçine şu içeriği yapıştırın:
INI:
[Unit]
Description=Redis Sentinel
After=network.target
[Service]
Type=forking
User=redis
Group=redis
ExecStart=/usr/bin/redis-sentinel /etc/redis/sentinel.conf --daemonize no
ExecStop=/usr/bin/redis-cli -p 26379 shutdown
[Install]
WantedBy=multi-user.target
Servisi etkinleştirip başlatalım:
Bash:
sudo systemctl daemon-reload
sudo systemctl start redis-sentinel
sudo systemctl enable redis-sentinel
Kurulumun çalışıp çalışmadığını kontrol etmek için Sentinel CLI'ına bağlanalım:
Bash:
redis-cli -p 26379
Bağlandıktan sonra Sentinel durumunu sorgulayalım:
Kod:
sentinel master mymaster
Bu komut, master Redis sunucunuzun durumu, IP'si, kaç tane Sentinel'in onu izlediği gibi tüm detayları gösterecektir.
Güvenlik: Bu rehberde basitlik için `bind 0.0.0.0` kullandık. Üretim ortamında mutlaka güvenlik duvarınızı (UFW/iptables) yapılandırarak sadece gerekli sunucuların 6379 (Redis) ve 26379 (Sentinel) portlarına erişebildiğinden emin olun.
Quorum Değeri: Sentinel sayınız değişirse quorum değerini `(Sentinel_Sayisi/2) + 1` formülü ile güncellemeyi unutmayın.
Uygulama Tarafı: PHP, Python, Node.js gibi dillerde Redis istemci kütüphanenizin Sentinel desteği olduğundan emin olun. Bağlantı için master'ın IP'si yerine Sentinel'lerin IP ve portlarını (örn: `['tcp://192.168.1.10:26379', 'tcp://192.168.1.11:26379']`) vermeniz gerekebilir.
Log Takibi: Sorun yaşarsanız ilk bakacağınız yer /var/log/redis/sentinel.log dosyasıdır. Failover olaylarının detayı burada yazar.
Sonuç olarak, Redis Sentinel kurulumu biraz emek istese de, sağladığı otomatik failover özelliği ile gece yarısı bir sunucu arızasında sizi uyandırmayacak kadar değerlidir. Bu kurulumu kendi ortamınıza uyarlarken sorun yaşarsanız veya siz bu konfigürasyonu kendi sunucularınızda nasıl yapıyorsunuz, aşağıdaki yorumlarda paylaşabilirsiniz. Herkese kesintisiz servisler!