Docs 主页 → 开发应用程序 → MongoDB Manual
副本集投票节点
在某些情况下(例如,当您有一个主节点和一个从节点,但受成本限制您无法添加其他从节点时),您可以选择向副本集中添加仲裁节点。仲裁节点将参与主节点的选举,但仲裁节点没有数据集的副本,从而无法成为主节点。
仲裁节点正好有1
张选举票。默认情况下,仲裁节点具有优先级0
。
重要
不要在同时托管副本集主节点或从节点的系统上运行投票节点。
要添加投票节点,请参见将投票节点添加到副本集。
例子
例如,在以下具有2个数据承载节点(主节点和从节点)的副本集中,仲裁节点允许该副本集拥有奇数票数来打破平局:
PSA 副本集的性能问题
如使用主节点-从节点-仲裁节点 (PSA) 三成员架构,请考虑以下因素:
如果从节点不可用或滞后,写关注
"majority"
可能会导致性能问题。有关如何缓解这些问题的建议,请参阅缓解 PSA 副本集的性能问题。如果使用的全局默认值
"majority"
,并且写关注小于大多数的大小,则您的查询可能会返回过时(未完全复制)的数据。
副本集协议版本和仲裁节点
在下列的 MongoDB 版本中,对于带有仲裁节点的副本集,与 pv0
协议版本(MongoDB 4.0+ 中不再支持)相比,pv1
协议版本增加了 w:1
回滚的可能性:
MongoDB 3.4.1
MongoDB 3.4.0
MongoDB 3.2.11 或更早的版本
请参阅副本集协议版本。
更多信息,请参阅 setFeatureCompatibilityVersion
命令。
有关多个仲裁节点的问题
使用单个仲裁节点以避免数据一致性问题。多个仲裁节点会阻止多数写关注(write concern)的可靠使用。
为了确保写入在主节点发生故障后仍能持续,写关注(write concern)要求大多数节点确认写入操作。仲裁节点不存储任何数据,但它们确实会增加副本集中的节点数量。当副本集具有多个仲裁节点时,大多数数据承载节点在节点故障后不太可能可用。
警告
如果从节点落后于主节点,并且集群为 reconfigured
,则多个仲裁节点的投票可能选出落后的节点。新的主节点不会有未复制的写入,即使是旧配置可能已多数提交的写入。结果是数据丢失。
为避免这种情况,最多使用一个仲裁节点。
安全性
身份验证
使用 authorization
运行时,仲裁节点会与副本集的其他节点交换档案以进行身份验证。MongoDB 会对身份验证过程进行加密,MongoDB 身份验证交换也会经过安全加密。
由于仲裁节点不存储数据,因此,它们不具有用于身份验证的用户和角色映射的内部表。这样,当授权处于活动状态时,登录仲裁节点的唯一方法是使用本地主机异常。
通信
仲裁节点和其他副本集节点之间的唯一通信是:选举期间的投票、心跳和配置数据。这些交换未经加密。
但是,如果 MongoDB 部署使用 TLS/SSL,MongoDB 将加密副本集节点之间的所有通信。请参阅为 TLS/SSL 配置 mongod
和 mongos
,了解更多信息。
与所有 MongoDB 组件一样,在受信网络环境中运行仲裁节点。
例子
例如,在以下具有 2 个数据承载节点(主节点和从节点)的副本集中,仲裁节点允许副本集拥有奇数票数来打破平局: