MongoDB: 如何确保从分片集群中的特定辅助读取?

MongoDB: How to ensure read from a particular secondary from shard cluster?

在这里,我有一个 mongo 集群设置,有两个配置服务器,两个分片,每个分片有 3 个节点和一个 mongos 服务器。例如

配置服务器 IP1 configsvr1 IP2 configsvr2

碎片 1 IP3 shardsvr1(主要) IP4 shardsvr2(中学) IP5 shardsvr3(中学)

碎片 2 IP6 shardsvr4(主要) IP7 shardsvr5(中学) IP8 shardsvr6(中学)

IP9 mongos

现在,是否可以在每个分片的特定节点上进行所有读取操作 -

所有读取操作都应在节点 'shardsvr3' 上的分片 1 和 shardsvr6 上的分片 2 中执行。

请分享您的想法!

提前致谢,

经过摸索,我知道可以在特定的辅助节点上执行所有读取操作。

以下是执行此操作的几个步骤 -

  • 给辅助节点添加标签 配置文件 = rs.conf() conf.members[0].tags = {"use": "production" } rs.reconfig(会议)
  • 设置次要阅读偏好 db.getMongo().setReadPref('secondary')
  • 现在通过在查询字符串中传递标签进行查询

正在使用 spring-data-mongodb

MongoClientOptions mongoClientOptions = MongoClientOptions.builder() .connectTimeout(connectionTimeoutInterval) .socketTimeout(socketTimeoutInterval) .serverSelectionTimeout(serverSelectionTimeoutInterval) .readPreference(TaggableReadPreference.secondary(新标签集(createTagList()))) .build();

return new MongoClient(new ServerAddress(host, port), Collections.singletonList(MongoCredential.createCredential(dbUserName, databaseName, dbPassword.toCharArray())), mongoClientOptions);