【问题标题】:why not use arbiter in configdb?为什么不在 configdb 中使用仲裁器?
【发布时间】:2020-11-05 15:34:26
【问题描述】:

我使用仲裁器配置了 MongoDB 分片环境和副本集。 我知道仲裁器用于 MongoDB 集群区域中的副本集设置,但仲裁器不能用于 configdb 区域。 根据 MongoDB 网站,

The following restrictions apply to a replica set configuration when used for config servers:

Must have zero arbiters.
Must have no delayed members.
Must build indexes (i.e. no member should have buildIndexes setting set to false).

问题。 为什么不在 configdb 中使用仲裁器? 我想知道详细原因。

【问题讨论】:

标签: mongodb sharding replicaset mongodb-replica-set mongodb-arbiter


【解决方案1】:

仲裁器的目的是在没有大多数数据承载节点可供投票时允许副本集选举主节点。

这意味着根据定义,需要仲裁器来选举主节点的副本集当前无法处理需要大多数副本集的写入。

多数写入很重要,因为它确保写入不会回滚或丢失。

配置数据库包含有关哪个分片保存每个分片集合的每个块以及哪个分片保存数据库的未分片集合的信息。

如果分片集群平衡器将一个块从一个分片移动到另一个分片并更新配置数据库,并且由于任何原因对配置数据库的写入回滚,则整个数据块将无法访问,因为所有查询都会正在寻找错误的分片。

为了防止这种情况发生,MongoDB 对所有写入配置服务器的操作使用写关注级别多数。

因此,请考虑您是否有一个配置服务器副本集,其中包含 2 个数据承载节点和一个仲裁器。如果其中一个数据承载节点由于任何原因离线,则副本集将有 1 个数据节点和仲裁器,即 2 票,足以选举主节点。但是,当第一个写入进入并由主节点处理时,它无法确认多数写入已完成,直到数据被第二个节点复制,只要另一个数据承载节点关闭,就不会发生这种情况。

在这种情况下,仲裁器没有任何好处,因为集群仍然无法正常工作。

【讨论】:

  • 非常有帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-11-09
  • 1970-01-01
  • 2013-08-15
  • 2017-10-29
  • 2011-08-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多