Foruma hoş geldin 👋, Ziyaretçi

Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak tamamen ücretsizdir.

Redis Cluster'da Slot Atama, Veri Dağılımı ve Yeniden Dengeleme (Resharding) İşlemlerini Yönetme

webnix

Üye
Katılım
14 Mart 2026
Mesajlar
19
Merhaba arkadaşlar, bugün sizlere Redis Cluster mimarisinin bel kemiği olan slot kavramını, verilerin bu slotlar üzerinden nasıl dağıtıldığını ve sistemin can damarı sayılabilecek yeniden dengeleme (resharding) işlemlerini nasıl yöneteceğimizi anlatacağım. Özellikle büyüyen bir uygulamanız varsa veya donanımınızı güncellemeniz gerekiyorsa, bu işlemleri doğru yapmak cluster'ınızın sağlığı ve performansı için hayati önem taşıyor.

🔍 Redis Cluster ve Slot Mantığı Nedir?

Redis Cluster, veriyi 16384 adet "hash slot"a bölerek çalışır. Her anahtar, CRC16 algoritmasından geçirilip mod 16384 işlemine tabi tutularak bu slotlardan birine atanır. Cluster'daki her ana (master) düğüm, bu slot aralıklarından bir bölümünün sorumluluğunu üstlenir. Bu sayede veri otomatik olarak parçalanmış (sharded) olur.

Örneğin 3 master'lı bir cluster'da slot dağılımı şöyle olabilir:
- Node-1: 0 - 5500 arası slotlar
- Node-2: 5501 - 11000 arası slotlar
- Node-3: 11001 - 16383 arası slotlar

Hangi düğümün hangi slotlara sahip olduğunu görmek için herhangi bir Redis düğümüne bağlanıp CLUSTER SLOTS komutunu kullanabilirsiniz. Bu komut, yönetim sırasında elinizin altında olması gereken en temel araçlardan biridir.

⚙️ Slotları Taşıma (Resharding) İşlemine Hazırlık

Resharding, slotları bir düğümden diğerine taşıma işlemidir. Yeni bir düğüm eklerken, bir düğümü kaldırırken veya yükü dengelemek için bu işlemi yaparsınız. İşleme başlamadan önce mutlaka bir yedeğinizi aldığınızdan ve işlemi trafiğin nispeten az olduğu bir zamanda planladığınızdan emin olun.

İlk adım, mevcut durumu kaydetmek. Aşağıdaki komutla cluster'ın mevcut yapılandırmasını bir dosyaya yazabilirsiniz. Bu, bir sorun olması durumunda geri dönüş yol haritanız olacaktır.

Bash:
redis-cli -c -p 6379 CLUSTER NODES > redis_cluster_backup_$(date +%F).txt

⚠️ Dikkat Edilmesi Gerekenler

Resharding sırasında cluster "servis kesintisi olmadan" çalışmaya devam eder, ancak taşınan slotlardaki tek tek anahtarlar için çok kısa süreli bloklamalar yaşanabilir. Bu nedenle:
- Çok yüksek yazma işlemi olan slotları taşırken dikkatli olun.
- redis-trib.rb aracı artık kullanılmıyor. Tüm cluster yönetim işlemleri için redis-cli içindeki --cluster komutlarını kullanmalısınız.
- İşlem sırasında network bağlantısının kararlı olduğundan emin olun.

🔄 Redis-CLI ile Adım Adım Resharding

Diyelim ki IP'si 192.168.1.50 olan yeni bir master düğüm ekledik ve mevcut cluster'dan bu düğüme slot taşımak istiyoruz. İşlemleri cluster'daki herhangi bir düğümden başlatabilirsiniz.

Öncelikle yeni düğümü cluster'a master olarak ekliyoruz:

Bash:
redis-cli --cluster add-node 192.168.1.50:6379 192.168.1.10:6379

Bu komut, yeni düğümü (192.168.1.50:6379), mevcut bir düğümün (192.168.1.10:6379) adresini kullanarak cluster'a ekler. Ancak henüz hiç slot atanmamış durumdadır.

Şimdi asıl resharding işlemini başlatalım. Aşağıdaki komut interaktif bir sihirbaz başlatacak ve size adım adım ne yapmak istediğinizi soracaktır.

Bash:
redis-cli --cluster reshard 192.168.1.10:6379

Sihirbaz sırayla şunları sorar:
1. Taşınacak slot sayısı: Kaç slot taşımak istediğinizi girin (örneğin 1000).
2. Alıcı düğümün ID'si: Slotları alacak olan yeni düğümümüzün (192.168.1.50) Node ID'sini girmelisiniz. Node ID'yi `CLUSTER NODES` komutu ile öğrenebilirsiniz.
3. Gönderici düğüm kaynağı: Slotları nereden almak istediğinizi belirtirsiniz. Burada 3 seçeneğiniz var:
- Belirli bir düğümün ID'sini yazarsanız, tüm slotlar o düğümden alınır.
- `all` yazarsanız, slotlar mevcut tüm master düğümlerden rastgele ve eşit şekilde alınır. Yük dengeleme için en ideal yöntem budur.
- `done` yazarsanız, daha önce belirttiğiniz gönderici düğümlerden slot alınır.
4. Son olarak, özeti gösterdikten sonra devam etmek için `yes` yazmanızı ister.

📊 Taşıma Sonrası Kontroller ve Dengeleme

İşlem tamamlandığında, slot dağılımını tekrar kontrol etmek çok önemli. Aşağıdaki komut, cluster durumunu özetler ve her düğümdeki slot sayısını gösterir. Dağılımın dengeli olup olmadığını buradan rahatlıkla görebilirsiniz.

Bash:
redis-cli --cluster check 192.168.1.10:6379

Eğer düğümler arasında ciddi bir dengesizlik (örneğin bir düğümde 6000 slot, diğerinde 2000 slot) görürseniz, aynı `reshard` komutunu kullanarak `all` seçeneği ile slotları yeniden dengeleyebilirsiniz. Bu, benim sunucularda periyodik bakım sonrası sıkça yaptığım bir işlemdir.

✅ Sonuç ve Öneriler

Redis Cluster'ın bu esnek yapısı, sistemin büyümesine ve değişmesine izin verir. Ancak otomatik bir sihirbaz değildir, dikkatli bir şekilde planlama ve yönetim ister. Slot taşıma işlemini anlamak, cluster'ınızı geleceğe hazırlamanın ilk adımıdır.

Ben genellikle her büyük ölçekli değişiklik öncesi ve sonrası `CLUSTER CHECK` ve `CLUSTER INFO` komutlarını çalıştırıp durumu not alırım. Siz bu konfigürasyonu kendi sunucularınızda nasıl yapıyorsunuz? Farklı bir tool veya izlediğiniz bir metodunuz var mı? Ya da takıldığınız bir nokta olursa aşağıya yazmaktan çekinmeyin, beraber çözelim.
 

Tema özelleştirme sistemi

Bu menüden forum temasının bazı alanlarını kendinize özel olarak düzenleye bilirsiniz.

Zevkine göre renk kombinasyonunu belirle

Tam ekran yada dar ekran

Temanızın gövde büyüklüğünü sevkiniz, ihtiyacınıza göre dar yada geniş olarak kulana bilirsiniz.

Geri