副本集仲裁器
在某些情况下(例如,当你有一个主节点和一个辅助节点,但成本限制阻止添加另一个辅助节点时),你可能会选择向你的副本集添加一个仲裁器。仲裁器参与主节点选举,但仲裁器没有数据集的副本,并且不能成为主节点。
仲裁器恰好有1
票选举权。默认情况下,仲裁器的优先级为 0
。
重要
不要在同时托管副本集主节点或辅助节点的系统上运行仲裁器。
警告
在分片集群的碎片中使用 主-辅助-仲裁器 (PSA) 架构可能会导致可用性丢失,如果数据承载的辅助节点不可用。PSA集群与典型的副本集不同:在分片集群中,碎片执行 w: majority
写关注操作,如果需要确认操作的剩余集群成员具有仲裁器,则无法完成。
要添加仲裁器,请参阅向自管理副本集添加仲裁器。
发布版本考虑因素
PSA副本集的性能问题
如果您正在使用由主-次要-仲裁器(PSA)组成的三个成员的架构,请考虑以下情况
如果副节点不可用或延迟,则写关注
"majority"
可能会导致性能问题。有关缓解这些问题的建议,请参阅缓解自管理PSA副本集的性能问题。如果您正在使用全局默认的
"majority"
写关注小于多数节点的大小,则您的查询可能返回过时的(未完全复制)数据。
分片键、事务和仲裁器
如果副本集有仲裁器,则无法使用事务更改分片键。仲裁器无法参与多分片事务所需的数据操作。
如果事务的写操作跨越多个分片,并且任何事务操作从包含仲裁器的分片读取或写入,则事务将错误并中止。
关于多个仲裁器的问题
使用单个仲裁者以避免数据一致性问题。多个仲裁者会阻止可靠地使用多数写关注。
为确保在主节点故障后写入持久化,多数写关注要求多数节点确认写入操作。仲裁者不存储任何数据,但它们会增加副本集的节点数量。当副本集有多个仲裁者时,在节点故障后,多数数据节点可能无法可用。
警告
如果辅助节点落后于主节点,并且集群重新配置
,多个仲裁者的票数可以选举出落后的节点。新的主节点即使旧的配置可能已经多数提交了写入,也不会有未复制的写入。结果是数据丢失。
为了避免这种情况,最多使用一个仲裁者。
新版本5.3.
从MongoDB 5.3开始,默认禁用副本集中的多个仲裁者支持。如果您尝试向副本集添加多个仲裁者,服务器将返回错误
MongoServerError: Multiple arbiters are not allowed unless all nodes were started with --setParameter 'allowMultipleArbiters=true'
要使用MongoDB 5.3或更高版本向副本集添加多个仲裁者,请使用带有allowMultipleArbiters
参数设置为true
的参数启动每个节点
mongod --setParameter allowMultipleArbiters=true
安全
认证
当使用授权
时,仲裁者与其他集合成员交换凭据以进行认证。MongoDB加密了认证过程,MongoDB认证交换是加密安全的。
由于仲裁者不存储数据,它们不拥有用于认证的用户和角色映射的内部表。因此,在授权激活的情况下,登录仲裁者的唯一方法是使用localhost异常。
通信
仲裁者与其他集合成员之间唯一的通信方式是:选举期间的投票、心跳和配置数据。这些交换未加密。
然而,如果您的MongoDB部署使用TLS/SSL,MongoDB将加密副本集成员之间的所有通信。有关更多信息,请参阅配置mongod
和mongos
以使用TLS/SSL。
与所有MongoDB组件一样,请在受信任的网络环境中运行仲裁者。
示例
例如,在以下包含2个数据承载成员(主节点和副节点)的副本集中,仲裁者允许集合有奇数个投票来打破平局