Redis Cluster kurmak için minimum 3 master, 3 slave node olmalıdır. 3 master, 3 slave node olacak şekilde 6 node sahip olduğumuzu düşünürsek burada kaynaklarımızın kullanım durumuna göre;

  • 1 adet sanal sunucuya örneğin ip adresi 192.168.2.120 ve 6001, 6002,…, 6006 portları üzerinden çalışacak şekilde redis cluster kurulumu yapılabilir.
  • 3 adet sunucuya her birinde 2 adet node olacak şekilde örneğin 1. makine 6001, 6004 2. makine 6002, 6005 3. makine 6003, 6006 portları üzerinden çalışacak şekilde redis cluster kurulumu yapılabilir.
  • 6 adet sunucuya her birinde 1 adet node olacak şekilde örneğin 1. makine 6001, 2. makine 6002, 3. makine 6003, 4. makine 6004, 5. makine 6005, 6. makine 6006 portları üzerinden çalışacak şekilde redis cluster kurulumu yapılabilir. Burada vermiş olduğumuz portlar örnektir siz kullanılmayan başka portları da kullanabilirsiniz.
  • 3 adet sunucuya her birinde 1 master 2 slave olmak üzere toplam 9 adet node olacak şekilde redis cluster kurulumu gerçekleştirebiliriz. Bu yapıda her bir sunucu için 1 master ve 2 farklı mastera ait slave node olacak şekilde ayarlama yaparsak 3 adet sunucudan 2 tane bile down olsa Redis sistemi çalışmaya devam edecektir.

Redis Cluster kurulumu için konfigurasyon yönetimi, kaynak kullanımı ve verilerin güvenlğinin sağlanması açısından ben 2. seçeneğin daha uygun olduğunu düşünüyorum. Çünkü 1. seçeneğin yönetmesi daha kolaydır fakat makinede herhangi bir sorun olursa verilerinizin kaybolma durumu oluşacaktır. 3. seçenekte makinelerden bir veya birkaçında sorun olsa bile redis cluster çalışacaktır fakat 6 adet makine için ayrı ayrı konfigürasyon yapıp yönetmek daha zordur. 4. seçenek en güvenilir seçenektir. Sunuculardan 2 tanesi bile down olsa sistem çalışmaya devam edecektir. Fakat her bir master node için 2 adet slave node olduğundan kaynak kullanımı daha fazla olacaktır. 2. seçenek 3. seçeneğe göre daha az makine olduğundan daha yönetilebilirdir. 1. seçeneğe göre de her bir makinede çapraz master-slave node eşleşmesi yapılırsa (Örneğin 1. makine için m1 ve s3 eşleşmesi 1. makinenin master node ve 3. makinenin slave node) makinelerden biri down olsa bile cluster çalışmaya devam edecektir.

1. Seçeneğe Göre Redis Cluster Kurulumu

Sunucumuza 6001, 6002, 6003, 6004, 6005 ve 6006 portları üzerinde çalışacak şekilde nodeları ayarlayıp, Redis Cluster kuracağız. Her bir node için redis dizini altında aşağıdakı komutları çalıştırarak ayrı ayrı dizin oluşturalım.

  • cd etc/redis
  • mkdir cluster
  • cd cluster
  • mkdir 6001 6002 6003 6004 6005 6006

Herbir node yapılandırma dosyasını kendi dizininde oluşturalım. Öncelikle Redis klasörü içinde bulunan redis.conf dosyasını yukarıda oluşturduğumuz cluster klasörü içerisine kopyalayalım.

  • cp redis.conf cluster/redis.conf

Cluster klasöründeki redis.conf dosyasını 6001 portu için aşağıdaki şekilde ayarlayalım. Ardından bu config dosyasını tüm nodelara kopyalayıp sadece port (6001) ile ilgili kısımları ilgili node göre ayarlayacağız.

  • sudo nano cluster/redis.conf

6001 portu üzerinde çalışacak redis-cluster node dosyası için config aşağıdaki gibidir:

redis.conf

#bind 0.0.0.0

#Bağlantı açmak içim tüm ip adreslerine izin verir.

port 6001

#Clientın bağlantı kuracağı portu belirtir.

protected-mode no

#Bu seçenek no olmalıdır.

requirepass redis.1234!

#Redis clusterı güvenli hale getirip, herkesin bağlanmasını önlemek için requirepass ile parola koyabiliriz. Clientlar bağlantı kurarken bu parola ile bağlanmak zorundadır. requirepass başına # simgesini koyup parolasız bir cluster kurulumu da gerçekleştirebiliriz.

masterauth redis.1234!

#Cluster’a client erişimi için requirepass ileparola koymuşsanız masterauth parametresini de ayarlamamız gerekir. requirepass parametresine girilen parolanın aynısı bu kısma yazılmalıdır. Slave nodelar master’a bu parola ile bağlanır. Clustera parola konulmuşsa ve masterauth setlenmemişse data mastera yazılır fakat mastera yazılan datanın replicası slave nodelara yazılmayacaktır.

cluster-enabled yes

#Redis cluster kuracaksak tüm nodeların config dosyasında cluster-enabled yes yapmalıyız.

cluster-config-file nodes-6001.conf

#Redis cluster kurulumunda herbir node için config dosyasına unique isim vermemiz gerekir. Cluster kurulurken nodelara ait ip vs bilgilerin tutulduğu yerdir. Bu dosyanın sadece ismini vermemiz yeterlidir. Dosyayı cluster kendisi yönetir.

Cluster-node-timeout 15000

#Redis clustera erişim için time out süresini belirtir.

logfile “/usr/local/redis/cluster/redis_6001.log”

#Clusterdaki ilgili node için logların hangi dosyaya yazılacağını belirttir.

loglevel notice

Yukarıda ayarlama yaptığımız cluster klasörü içindeki conf dosyasını tüm nodelara kopyalayalım.

  • cp cluster/redis.conf cluster/6001/redis6001.conf
  • cp cluster/redis.conf cluster/6002/redis6002.conf
  • cp cluster/redis.conf cluster/6003/redis6003.conf
  • cp cluster/redis.conf cluster/6004/redis6004.conf
  • cp cluster/redis.conf cluster/6005/redis6005.conf
  • cp cluster/redis.conf cluster/6006/redis6006.conf

6001 portu için zaten ayarlama yapmıştık, diğer node config lerini ayarlamak için örneğin 6002 portu node için aşağıdaki komutla conf dosyasını açalım ve 6001 yazan yerleri 6002 yapalım.

  • cd cluster
  • sudo nano 6002/redis6002.conf

Tüm node’lar için bu işlemi yaptıktan sonra nodeları çalıştıralım.

  • redis-server cluster/6001/redis6001.conf
  • redis-server cluster/6002/redis6002.conf
  • redis-server cluster/6003/redis6003.conf
  • redis-server cluster/6004/redis6004.conf
  • redis-server cluster/6005/redis6005.conf
  • redis-server cluster/6006/redis6006.conf

Şimdi redis cluster’ı kuralım

  • redis-cli –cluster create 192.168.2.120:6001 192.168.2.120:6002 192.168.2.120:6003 192.168.2.120:6004 192.168.2.120:6005 192.168.2.120:6006 –cluster–replicas 1 -a redis.1234!
Ardından çıkan soruya ‘yes’ yazalım. Redis cluster kurulumu tamamlandı. Şimdi 6001 portu üzerinde çalışan node bağlanalım ve cluster nodes ile master slave tüm nodeları görelim.
  • redis-cli -h 192.168.2.120 -p 6001 -a redis.1234!
  • cluster nodes

Yukarıda Redis Cluster create etme komutunda en sonda –cluster–replicas 1 yazmıştık eğer burada her bir master için birden fazla slave node olacaksa örneğin 2 ise o zaman 9 adet node hazırlayıp buradaki sayıyı 2 yapmalıyız.

Ek Bilgiler

  1. Clusterda herhangi bir node arızalanması durumunda cluster çalışmaya devam etmeli mi?
    Yukarıda redis.conf dosyasındaki bazı parametrelerden bahsetmiştim. Yine bu dosya içinde cluster-require-full-coverage parametresi bulunur. Bu parametrenin default değeri yes’tir. Bu değer no yapılmaz clusterda bulunan 1 adet slave node bile çalışmazsa cluster çalışmaz. Bir adet slave node bile çalışmazsa benim sistemim çalışmasın diyorsanız bu parametre yes olmalıdır. Aksi hale 1 adet master bile down olsa nasıl olsa o masterın slave node var onu master yapıp sistem çalışsın diyorsanız no olarak ayarlamalısınız.

  2. Redis‘i anlatırken verilerin kalıcılığını sağlamak için 2 yöntem var demiştim. Yine redis.conf dosyası içinde save 3600 1 save 300 100 save 60 10000 parametresi bulunur. Bu kısım en az 1 adet key değişirse 3600 sn (1 saat) dump.rdp dosyasına yaz, en az 100 adet key değişirse 300 sn (5 dk)’da bir dump.rdp dosyasına yaz, en az 10000 adet key değişirse 60 sn (1 dk)’da bir dump.rdp dosyasına yaz demektir. Redis’in dump.rdb adıyla snapshot almasını sağlar. Eğer snapshot alınmasın verilerin kalıcılığı olmasın ve makine kapanırsa veriler silinsede olur diskte yer tutmasın diyorsanız. Bu satırların yerine save “” satırını aktif ediniz.