MongoDB Replica Set Kurulumu (v2.4.3)

Bu yazıda nasıl MongoDB Replica Set kurabileceğimizi anlatacağım. Yapılandırma oldukça basit. Config dosyasında(/etc/mongodb.conf) tek bir parametre ekleyerek replica set oluşturmaya başlayabiliriz.

replSet = mkfrs1

İlk olarak primary olacak serverı kendimiz belirliyoruz.
Not: otomatik failover durumunda primary sunucu seçimlerini kendi aralarında yapıyorlar.

PRIMARY Sunucu: (İlk defa kurulum yapılıyorsa)

[root@travego ~]$ mongo MongoDB shell version: 2.4.3 connecting to: test > rs.initiate() PRIMARY> rs.add(“192.168.1.197”) PRIMARY> rs.add(“192.168.1.202”) PRIMARY> rs.addArb(“192.168.1.204”)

Replica Set’e dahil olmasını istediğimiz tüm serverları rs.add() ile ekliyoruz. Bunu yanında, Arbiter dediğimiz üstünde veri tutmayan ve sadece Replica Set seçimlerine katılan bir sunucu eklemek istersek rs.addArb() ile ekliyoruz.

rs.conf() ile hangi sunucular Replica Set’e dahil bakabiliyoruz. rs.status() komutu ile Replica Set’te bulunan sunucuların durumlarını(primary,secondary,recovery,uptime vs) görebiliyoruz.
rs.isMaster() komutu primary mi secondary mi olduğunu ve primary sunucunu bilgilerini gösteriyor.

Replica Set’te bulunan sunucuların önceliğini ayarlamamız her zaman daha kolay otomatik failover sağlayacaktır.
rs.conf() çıktısına baktığınızda members arrayinin eklemiş olduğumuz replica sunucularını içerdiğiniz göreceksiniz. Bu konfigürasyonu cfg değişkenine atıyoruz. Members arrayinin sıfırıncı, birinci vs elemanlarının(sunucuların) priority değerlerini ayarlıyoruz ve yeniden rs.reconfig() fonsiyonuyla da yeni konfigürasyona geçerlilik kazandırıyoruz.

[root@travego ~]$ mongo mkfrs1:PRIMARY> cfg = rs.conf() mkfrs1:PRIMARY> cfg.members[0].priority = 10 mkfrs1:PRIMARY> cfg.members[1].priority = 5 mkfrs1:PRIMARY> cfg.members[2].priority = 5 mkfrs1:PRIMARY> rs.reconfig(cfg)

PRIMARY sunucuya ulaşamıyorsunuz ve Replica Set ayarlarını değiştirmek istiyorsanız aşağıdaki gibi force parametresini vererek yapabilirsiniz.

[root@setra ~]$ mongo mkfrs1:SECONDARY> rs.reconfig(cfg,{force:’true’})

MongoDB CLI ile bağlandığımızda aşağıdaki gibi bir başlangıç yazısı göreceğiz [replSet:status]

mkfrs1:PRIMARY> #Primary sunucu olduğunu belirtiyor. mkfrs1:SECONDARY> #Secondary sunucu olduğunu belirtiyor. mkfrs1:ARBITER> #Arbiter Sunucu sadece seçimlere katılıyor onun dışında replikasyona karışmıyor. mkfrs1:FATAL> #Sunucu etkisiz durumdadır. mkfrs1:RECOVERY>

 Notlar:

  • SECONDARY serverlarda rs.slaveOK() demeden READ yapamazsınız.
  • MongoDB sunucularından biri RECOVERY veya FATAL moduna geçerse data klasörünü silip MongoDB’yi restart ederek replikasyonunu düzeltecektir.

Erkin Çakar

PostgreSQL DBA & Software developer