MongoDB Nedir ve Bu Hata Neden Ortaya Çıkar?
Bu hata, genellikle replica set (yani yedekli veritabanı kümeleri) kullanırken ortaya çıkar. Bir replica set, birden fazla MongoDB sunucusunun verileri tutmak için birlikte çalıştığı bir yapıdır. Kimi zaman, MongoDB'ye yapılan istekler, yanlış bir node’a yönlendirilmiş olabilir. Bu da "Not Master and SlaveOk Not Set" hatasını almanıza neden olabilir.
MongoDB'nin primary node'u, veritabanına yazma işlemleri yapılabilen sunucudur. Eğer bu sunucu bir şekilde devre dışı kalırsa, secondary node'lar devreye girer. Ancak, eğer MongoDB'ye yazma yapmaya çalışırken, veritabanı bu tür secondary node'lara yönlendirilirse, bu hata mesajı ortaya çıkar.
"Not Master and SlaveOk Not Set" Hatası Ne Anlama Geliyor?
Ayrıca, "SlaveOk Not Set" ifadesi, MongoDB'nin secondary node'lara (başka bir deyişle yedek sunuculara) yazma izni verilmediğini gösteriyor. MongoDB'deki secondary node’lar yalnızca okuma işlemleri yapabilir, yazma işlemleri yapmak için primary node gereklidir.
Hata Nasıl Çözülür?
# 1. MongoDB'yi Primary Node’a Yönlendirin
1. MongoDB shell'e bağlanın.
2. rs.status() komutunu çalıştırarak replica set'in durumunu kontrol edin.
3. Eğer primary node'da bir sorun varsa, onu yeniden seçebilirsiniz. Bunun için şu komutu kullanın:
rs.stepDown()
Bu komut, mevcut primary node'u yedeğe alır ve yeni bir primary node seçilmesini sağlar.
# 2. "slaveOk" Seçeneğini Aktif Edin
Bu ayarı şöyle yapabilirsiniz:
db.getMongo().setSlaveOk()
Bu komut, secondary node'larla okuma işlemi yapmanıza olanak tanır.
# 3. Bağlantı Konfigürasyonunu Gözden Geçirin
mongodb://localhost:27017,localhost:27018,localhost:27019/?replicaSet=myReplicaSet
Yukarıdaki bağlantı stringinde, MongoDB'ye bağlanacak olan istemci, replica set'in adıyla bağlantıyı doğru şekilde kurar.
# 4. MongoDB’yi Yeniden Başlatın
sudo systemctl restart mongod
Yeniden başlatma, geçici yapılandırma hatalarını gidermeye yardımcı olabilir.
Sonuç
Unutmayın, MongoDB'nin master-slave yapısını anlamak ve doğru bir şekilde yapılandırmak, uygulamalarınızın sağlıklı bir şekilde çalışması için kritik öneme sahiptir. Bu tür hatalar, genellikle küçük bir yapılandırma hatasından kaynaklanır, ancak doğru adımlarla çok kolay bir şekilde çözülebilir.
Hata mesajı karşınıza geldiğinde, yapmanız gereken ilk şey rs.status() komutuyla sistemin durumunu kontrol etmek ve gerekirse primary node’u doğru şekilde seçmektir.
Umarım bu yazı, karşılaştığınız hatayı çözmede size yardımcı olur! Eğer hâlâ sorun yaşıyorsanız, MongoDB dökümantasyonuna başvurabilir ya da MongoDB topluluk forumlarında sorularınızı paylaşabilirsiniz.