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);
在这里,我有一个 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);