MongoDB 'Not Master and SlaveOk Not Set' Hatası ve Çözümü: Adım Adım Rehber

MongoDB 'Not Master and SlaveOk Not Set' hatasının ne olduğunu ve nasıl çözüleceğini anlatan detaylı bir rehber.

BFS

MongoDB ile çalışırken, özellikle Replika Set kullanıyorsanız, karşılaşabileceğiniz yaygın hata mesajlarından biri de *'Not Master and SlaveOk Not Set'* hatasıdır. Bu hata, genellikle Replika Set yapısı içinde ana (master) düğümle bağlantı kurmaya çalışırken karşımıza çıkar. Peki, bu hata ne anlama geliyor ve nasıl çözülür? Gelin, bu hatanın nedenini ve çözümünü adım adım keşfedelim.

Hata Nedir?

MongoDB, dağıtık bir veritabanı yapısıdır ve *Replika Set* adı verilen bir mekanizma ile verilerin yedeğini oluşturur. Replika Set, bir ana (primary) sunucu ve bir veya daha fazla yedek (secondary) sunucudan oluşur. Ana sunucu, yazma işlemlerini yönetirken, yedek sunucular sadece okuma işlemleri yapar.

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

*'Not Master and SlaveOk Not Set'* hatası birkaç temel nedenden kaynaklanabilir:
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

Bu hatayı çözmek için birkaç farklı adım izleyebilirsiniz. İşte size adım adım çözüm rehberi:

# 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

MongoDB 'Not Master and SlaveOk Not Set' hatası, genellikle istemcinin yazma işlemi yapmaya çalıştığı sırada ana sunucuya bağlanamaması nedeniyle meydana gelir. Hata, Replika Set yapılandırmasında bir sorun olduğunda veya *slaveOk* parametresi eksik olduğunda ortaya çıkar. Yukarıdaki adımları izleyerek bu hatayı çözebilir ve MongoDB bağlantınızı stabil hale getirebilirsiniz.

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.

İlgili Yazılar

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

ASP.NET Core 500 Internal Server Error: Sebepleri ve Çözümleri

Bir web geliştiricisi olarak, karşılaştığınız en zorlayıcı hatalardan biri şüphesiz "500 Internal Server Error"dır. Bu hata, web uygulamanızda her şeyin yolunda gittiğini düşündüğünüz bir anda karşınıza çıkabilir ve tüm projeyi durdurabilir. Ancak merak...

Steam İstemcisinin Çökmesi: Sorunları Çözmek İçin Pratik Adımlar

Steam İstemcisinin Çökme Sorunu Neden Olur?Merhaba! Eğer sen de Steam istemcisinin birden bire çökmesiyle karşılaştıysan, yalnız değilsin. Bu, aslında pek çok Steam kullanıcısının karşılaştığı yaygın bir sorun. Steam, oyun dünyasının en popüler platformlarından...

PHP "Warning: Division by zero" Hatası: Sorun, Çözüm ve Dikkat Edilmesi Gerekenler

PHP dünyasında, programcıların karşılaştığı en yaygın hatalardan biri olan "Warning: Division by zero" hatasını ele alıyoruz. Bu hata, küçük bir bölücü hatasından dolayı uygulamanızın çalışmasını engelleyebilir. Hadi, bu hatayı daha yakından inceleyelim...