MongoDB ve Replika Set Yapısı
Ancak her şeyin düzgün çalışması için doğru yapılandırma gereklidir. Bu bağlamda, MongoDB'yi replikasyon kullanarak yapılandırırken, bazen karşımıza "Not Master and SlaveOk Not Set" hatası çıkar. Hadi bu hatayı ve çözümünü detaylıca inceleyelim!
"Not Master and SlaveOk Not Set" Hatası Nedir?
MongoDB'nin istemci tarafındaki `slaveOk` bayrağı, veritabanının secondary (yedek) düğümünden veri okuma isteği yapıldığında kullanılır. Eğer bu bayrak ayarlanmazsa, MongoDB istemcisi bu okuma isteğini yanlış düğüme yönlendirebilir. Böylece hata mesajı "Not Master and SlaveOk Not Set" olarak çıkar.
Bu durumu daha iyi anlayabilmek için biraz teknik detaylara girelim.
Hata Neden Olur?
Bu hatayı almak, genellikle şu sebeplerden olur:
- MongoDB istemcisi, primary düğümünde okuma yapmak istiyor fakat okuma işlemi sadece secondary düğümünde yapılabilir.
- `slaveOk` bayrağı etkin değil.
- Replika seti doğru yapılandırılmamış.
Çözüm Yolları
MongoDB istemcisine bağlanırken slaveOk bayrağını etkinleştirmek, bu hatanın en hızlı çözümüdür. Eğer MongoDB'nin okuma işlemlerini yedek düğümlerden yapmasını istiyorsanız, istemciye şu şekilde bağlanabilirsiniz:
const MongoClient = require('mongodb').MongoClient;
const url = 'mongodb://localhost:27017/?replicaSet=myReplicaSetName&readPreference=secondary';
MongoClient.connect(url, { useNewUrlParser: true, useUnifiedTopology: true }, (err, db) => {
if (err) throw err;
console.log('Connected to the database');
db.close();
});
Bu kodda `readPreference=secondary` parametresi ile istemcinin sadece secondary düğümünü kullanarak okuma yapmasını sağlıyoruz. Böylece "Not Master and SlaveOk Not Set" hatasını engellemiş oluruz.
Eğer yukarıdaki çözüm işe yaramazsa, replika setinin doğru yapılandırıldığından emin olun. MongoDB replika setini kontrol etmek için şu komutu kullanabilirsiniz:
rs.status()
Bu komut, replika setindeki tüm düğümlerin durumunu gösterir. Eğer primary düğüm düzgün çalışmıyorsa veya secondary düğümleri tanımlamanız gerekiyorsa, replika setini yeniden yapılandırmak gerekebilir.
Yine de hata almaya devam ediyorsanız, bağlantı yaptığınız düğümün primary olduğunu kontrol edin. Eğer primary düğümde bir problem varsa, MongoDB'nin secondary düğümüne yönlendirilmesi gerekebilir.
rs.stepDown()
Bu komut ile MongoDB'yi primary düğümünü yeniden seçmeye zorlayabilir ve replikasyonun düzgün çalıştığından emin olabilirsiniz.
Sonuç
Eğer bu hatayı çözmeyi başardıysanız, MongoDB ile daha rahat bir şekilde çalışabilir, veritabanınızın güvenliğini ve verimliliğini artırabilirsiniz!