Hata Nedir?
Bu hata mesajı, MongoDB istemcisinin, veritabanı bağlantısı kurarken ana sunucuya yazma işlemi göndermeye çalıştığını ancak bağlanmaya çalıştığı sunucunun artık bir ana sunucu olmadığı durumlarda meydana gelir. Ayrıca, *slaveOk* ayarı yapılmadığında, istemci sadece okuma işlemi yapabileceği bir sunucuya bağlanmaya çalışır.
Hatanın Sebebi
1. Ana sunucunun değişmesi: MongoDB replika setinde bir değişiklik olmuş ve istemci, artık ana sunucu olmayan bir sunucuya bağlantı kurmaya çalışıyor.
2. SlaveOk parametresi eksik: Eğer istemci sadece bir yedek sunucuya bağlanıyorsa, yazma işlemi yapmak mümkün olmayacaktır. Bunun için *slaveOk* parametresinin doğru şekilde yapılandırılması gerekir.
3. Bağlantı parametreleri hatalı: MongoDB istemcisinin doğru parametrelerle bağlanmaması bu hataya yol açabilir.
Çözüm
# 1. Ana Sunucu Durumunu Kontrol Edin
İlk olarak, MongoDB replika setinin durumunu kontrol etmeniz gerekiyor. Replika setinin hangi sunucusunun ana (primary) olduğunu görmek için aşağıdaki komutu kullanabilirsiniz:
rs.status()
Bu komut, Replika Set'in mevcut durumunu ve ana sunucunun hangi düğüm olduğunu size gösterecektir. Eğer ana sunucu değişmişse, istemcinizin doğru sunucuya bağlandığından emin olun.
# 2. SlaveOk Parametresini Ayarlayın
Eğer yazma işlemi yapmak istiyorsanız, istemcinin bağlanmaya çalıştığı sunucunun *primary* (ana) olmasına dikkat edin. Ancak, okuma işlemi yapacaksanız ve sadece *secondary* (yedek) bir sunucuya bağlanmak istiyorsanız, MongoDB bağlantınızı şu şekilde yapılandırmanız gerekir:
// MongoDB bağlantısı için gerekli parametreyi ekleyin
const client = new MongoClient('mongodb://your_mongo_uri', {
replicaSet: 'yourReplicaSetName',
readPreference: 'secondary', // Sadece secondary sunucuya okuma yapmak için
slaveOk: true // SlaveOk ayarını aktif edin
});
Burada, *readPreference* parametresi ile veritabanı istemcisinin hangi sunucudan veri alacağını belirleyebilirsiniz. *secondary* ayarı ile sadece yedek sunuculardan okuma yapılmasını sağlarsınız.
# 3. Bağlantı URL’sini Doğru Yapılandırın
Bağlantı URL’sinin doğru olduğundan emin olun. MongoDB'nin doğru replika seti ve sunucu bağlantısını kurmak için aşağıdaki örneğe benzer şekilde bağlantı string'ini kullanın:
// MongoDB bağlantı stringi örneği
mongodb://user:password@host1:port1,host2:port2,host3:port3/?replicaSet=yourReplicaSetName
Bu bağlantı, MongoDB'nin doğru şekilde çalışmasını sağlar ve *Not Master and SlaveOk Not Set* hatasının oluşmasını engeller.
Özetle
Unutmayın, MongoDB ile çalışırken bağlantı parametrelerine dikkat etmek çok önemlidir. Bu tür hataları hızlıca çözebilmek için her zaman sunucu durumunu kontrol edin ve doğru bağlantı string'ini kullandığınızdan emin olun.