从mongo副本集中的特定节点读取数据

时间:2016-03-30 00:40:11

标签: mongodb mongodb-replica-set

我有三个成员的副本。我是否有可能只想读取两个辅助节点之一?我使用以下代码,其中ip是次要的,但我仍然看到流量已部署到其他节点。

Mongo mongo = new MongoClient("171.21.43.34");

1 个答案:

答案 0 :(得分:4)

最好的方法是使用mongodb手册中所述的标签。

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

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

在客户端中,您只需将readpreference设置为该标记

    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);