2

私は 3 つのメンバーのレプリカ セットを持っています。2 つのセカンダリ ノードのいずれかから読み取りたいだけということは可能ですか? IP がセカンダリの 1 つである次のコードを使用しますが、トラフィックが他のノードに展開されていることがわかりました。

Mongo mongo = new MongoClient("171.21.43.34");
4

1 に答える 1

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);
于 2016-06-23T18:43:10.907 に答える