【问题标题】:MongoDB: How to ensure read from a particular secondary from shard cluster?MongoDB:如何确保从分片集群中读取特定辅助节点?
【发布时间】:2019-05-29 14:51:32
【问题描述】:

在这里,我有一个 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 中执行。

请分享你的想法!

提前致谢,

【问题讨论】:

  • 我不确定您说的是从特定的辅助节点还是成员读取,因为辅助节点可以被选为主节点,但如果您希望该成员始终是辅助节点,请将其标记为优先级 0 成员

标签: java mongodb spring-data-mongodb mongotemplate


【解决方案1】:

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

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

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

使用spring-data-mongodb

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

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

【讨论】:

    猜你喜欢
    • 2017-12-09
    • 1970-01-01
    • 2021-06-08
    • 1970-01-01
    • 2021-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多