为什么不在 configdb 中使用仲裁器?

why not use arbiter in configdb?

我配置了 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 对配置服务器的所有写入使用多数写入关注级别。

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

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