MongoDB:如何确保从分片群集的特定辅助节点读取数据?

时间:2018-10-16 19:01:01

标签: java mongodb spring-data-mongodb mongotemplate

在这里,我有一个mongo群集设置,其中包含两个配置服务器,两个分别具有3个节点和一个mongos服务器的分片。例如。

配置服务器 IP1配置 IP2 configsvr2

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

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

IP9 mongos

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

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

请分享您的想法!

预先感谢

1 个答案:

答案 0 :(得分:0)

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

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

  • 将标签添加到辅助节点 conf = rs.conf() conf.members [0] .tags = {“ use”:“ production”} rs.reconfig(conf)
  • 将读取偏好设置为次要 db.getMongo()。setReadPref('secondary')
  • 现在通过在查询字符串中传递标记来查询

使用spring-data-mongodb

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

返回新的MongoClient(新的ServerAddress(主机,端口),                                    Collections.singletonList(MongoCredential.createCredential(dbUserName,databaseName,dbPassword.toCharArray())),                                    mongoClientOptions);