2016-03-30 18 views
2

Üç üyeden oluşan bir çoğaltma kümem var. Sadece iki ikincil düğümden birinden okumak istediğim mümkün mü? Ipin ikincil konumlardan biri olduğu şu kodu kullanıyorum, ancak yine de trafiğin diğer düğümlere konuşlandırıldığını gördüm.mongo çoğaltma kümesindeki belirli düğümlerden veri okuma

Mongo mongo = new MongoClient("171.21.43.34"); 
+1

için readpreference ayarlayın. Tüm bağlantı dizesinde niyetinizi belirtmeniz gerekiyor. https://docs.mongodb.org/manual/core/read-preference/ sayfasına bakın. Her zaman herhangi bir düğümden doğrudan okuyabilirsiniz. – Saleem

+0

Bir "ikincil" (gerçekten yapmamanız gereken) adresinin belirtilmesi bile bir okuma tercihi ayarlamadıkça, ** sadece ** düğüm bağlı olduğu anlamına gelmez. Bu bir kopya olduğundan, sürücü "kendini keşfedecektir "Yine de tüm üye düğümler. Bu yüzden okuma tercihi" kral "dır.Ayrıca üyeleriniz" dengeli "değilse (yani biri diğerinden daha yetenekli bir sunucuysa) bu çok kötü bir şey olabilir. oplog'un gerisinde kalmaya neden olabilecek daha yavaş düğümünde bir "gecikme" ile yukarı doğru ilerler. –

+0

Evet, ikinci @BlakesSeven.Özel gereksinimleriniz olmadıkça doğrudan özel ikincil dosyadan okuma yapmamalısınız. raporlama sunucusu gibi ikincil. – Saleem

cevap

4

En iyi yöntem, etiketleri mongodb el kitabında belirtildiği şekilde kullanmaktır.

https://docs.mongodb.com/manual/tutorial/configure-replica-set-tag-sets/

istemcisi olarak
conf = rs.conf() 
conf.members[0].tags = { "offline": "false"} 
conf.members[1].tags = { "offline": "false"} 
conf.members[2].tags = { "offline": "true"} 
rs.reconfig(conf) 

, sadece sen olarak sekonder okuyabilir bu etikete Nitekim

MongoClientOptions options = MongoClientOptions 
        .builder() 
        .connectionsPerHost(config.connectionLimit) 
        .readPreference(TaggableReadPreference.secondaryPreferred(new TagSet(new Tag("offline", "true")))) 
        .socketTimeout(config.socketTimeout) 
        .connectTimeout(config.connectionTimeout) 
        .build(); 
    mongo = new MongoClient(NewsDAOConfig.parseAddresses(config.mongoAddress), options); 
İlgili konular