MongoDB Hatası “Not Master and SlaveOk Not Set”: Nedir, Neden Olur ve Çözümü

MongoDB Hatası “Not Master and SlaveOk Not Set”: Nedir, Neden Olur ve Çözümü

MongoDB "Not Master and SlaveOk Not Set" hatasının nedenlerini ve çözümünü anlatan detaylı bir rehber.

BFS

MongoDB ile çalışırken bazen karşımıza sürpriz hatalar çıkabilir. Bunlardan biri de "Not Master and SlaveOk Not Set" hatası. Eğer siz de bu hatayla karşılaştıysanız, yalnız değilsiniz! Bu yazıda, hatanın ne olduğunu, neden meydana geldiğini ve nasıl çözüleceğini adım adım anlatacağım.

Not Master and SlaveOk Not Set Hatası Nedir?


MongoDB'nin çalışma prensibi, çoklu veritabanı sunucuları arasında veri paylaşımını sağlamaktır. Bu sistemde "Primary" (Ana) ve "Secondary" (Yedek) sunucular bulunur. Ana sunucu, tüm yazma işlemlerini kabul ederken, yedek sunucular sadece okuma işlemleri gerçekleştirir. Ancak, bazı durumlarda bu denetim mekanizması yanlış yapılandırıldığında "Not Master and SlaveOk Not Set" hatasıyla karşılaşılabilir.

Bu hata, MongoDB istemcisinin veritabanına bağlanmaya çalışırken, istediği işlemi gerçekleştirmek için doğru sunucuya yönlendirilmemesi sonucu ortaya çıkar. Yani, istemci bir "Secondary" (Yedek) sunucusuna bağlanmaya çalıştığında ve "SlaveOk" seçeneği aktif değilse, bu hata meydana gelir.

Hata Neden Olur?


"Not Master and SlaveOk Not Set" hatasının birkaç yaygın nedeni vardır:

1. Okuma ve Yazma Ayrımı: MongoDB'nin replikasyon yapısı, yazma işlemlerini yalnızca "Primary" sunucusunda yapar. Yedek sunucularda yalnızca okuma işlemleri yapılabilir. Eğer istemci, bir yedek sunucuya bağlanmaya çalışır ve yazma işlemi yapmaya çalışırsa, bu hata alınır.

2. SlaveOk Ayarının Eksikliği: MongoDB istemcisine bağlanırken, eğer "SlaveOk" ayarı aktif değilse ve istemci bir "Secondary" sunucuya bağlanmaya çalışıyorsa, yazma işlemi gerçekleştirmek istenirse bu hata meydana gelir.

3. Replikasyon Durumu: Eğer MongoDB cluster'ınızda bir replikasyon hatası veya iletişim problemi varsa, istemci yanlış sunucuya yönlendirilmiş olabilir ve bu hatayı alırsınız.

Çözüm: Hata Nasıl Giderilir?


Bu hatayı çözmek için birkaç basit adım izleyebilirsiniz. İşte bu adımlar:

1. "SlaveOk" Seçeneğini Etkinleştirin
Eğer MongoDB istemcisine bağlanırken okuma işlemi yapıyorsanız ve bir yedek sunucuya bağlanıyorsanız, "SlaveOk" özelliğini etkinleştirmeniz gerekir. Bu, istemcinin yedek sunuculardan veri okumasına izin verir. Aşağıdaki gibi bir bağlantı kodu kullanabilirsiniz:


MongoClient mongoClient = new MongoClient("mongodb://localhost:27017/?readPreference=secondaryPreferred");


Burada `readPreference=secondaryPreferred` parametresi, istemcinin tercihen yedek sunuculardan okuma yapmasını sağlar. Ancak yazma işlemleri her zaman "Primary" sunucusuna yapılacaktır.

2. Bağlantı Ayarlarını Gözden Geçirin
Yazma işlemlerini yalnızca "Primary" sunucusuna yönlendirmek istiyorsanız, istemci bağlantınızda replikasyonun doğru şekilde yapılandırıldığından emin olun. Eğer yazma işlemleri için sadece "Primary" sunucuya yönlendirme yapıyorsanız, bağlantı stringinizi şu şekilde düzenleyebilirsiniz:


MongoClient mongoClient = new MongoClient("mongodb://localhost:27017/?readPreference=primary");


Bu bağlantı, sadece "Primary" sunucusuna yazma işlemi yapılmasına izin verir.

3. Replikasyon Durumunu Kontrol Edin
Replikasyon yapılandırmanızda bir sorun olup olmadığını kontrol etmek, bu hatayı önleyebilir. MongoDB replikasyon durumunu görmek için şu komutu kullanabilirsiniz:


rs.status();


Bu komut, replikasyon setinizin durumunu gösterecek ve olası sorunları fark etmenize yardımcı olacaktır.

Sonuç


“Not Master and SlaveOk Not Set” hatası, MongoDB'nin replikasyon yapısı ve istemci bağlantı ayarlarıyla ilgili bir sorundur. Ancak doğru bağlantı ayarları ve replikasyon yapılandırmasıyla bu hatayı kolayca çözebilirsiniz. Yedek sunuculardan okuma yapmak istiyorsanız "SlaveOk" seçeneğini aktif hale getirmeli ve istemcinin doğru sunucuya yönlendirilmesini sağlamalısınız. Ayrıca replikasyonun düzgün çalışıp çalışmadığını kontrol etmek de önemlidir.

Bu adımları takip ederek MongoDB veritabanınızda bu hatayı hızla çözebilir ve sorunsuz bir şekilde veritabanınızı kullanmaya devam edebilirsiniz.

İlgili Yazılar

Benzer konularda diğer yazılarımız

Veritabanı Seçiminde MongoDB vs. PostgreSQL: Hangi Durumda Hangisini Tercih Etmeli?

Veritabanı seçimi, yazılım geliştirme dünyasında en kritik kararlardan biridir. Her proje farklı gereksinimlere ve ölçeklere sahip olduğundan, hangi veritabanının kullanılacağına karar vermek, bir yazılımın başarısını doğrudan etkileyebilir. Bugün, iki...

Veritabanı Yedekleme: PostgreSQL, MySQL ve MongoDB Arasındaki Farklar ve Hangi Durumda Hangisini Seçmelisiniz?

Veritabanı yönetim sistemleri, bir uygulamanın en önemli yapı taşlarından biridir. Ancak bir veritabanı kullanmaya başlamak, sadece sistemin kurulumu ile sınırlı kalmaz; yedekleme, güvenlik, performans optimizasyonu gibi konuları da içerir. Peki, PostgreSQL,...

Veri Güvenliği: MongoDB’de 'Authentication Failed' Hatasına Sebep Olan 5 Yaygın Yanlış Yapılandırma ve Çözümleri

MongoDB kullanıyorsanız, veri güvenliğine verdiğiniz önemin farkındasınız demektir. Ancak, sistemin yapılandırılması sırasında dikkat edilmesi gereken bir takım ince detaylar vardır. Özellikle *"Authentication Failed"* hatası, çoğu zaman kullanıcı hatalarından...