在某些情况下(例如有一个主节点和一个从节点,但成本有限而无法再添加另一个从节点),您可以选择将 mongod 实例添加到副本集,作为仲裁节点在选举中投票。
仲裁节点是 mongod 实例,它们是副本集的一部分,但不保存数据(即不提供数据冗余)。但是,仲裁节点可以参加选举。
仲裁节点的资源要求极低,并且不需要专用硬件。您可以将仲裁节点部署在应用服务服务器或监控主机上。
重要
不要在同时托管副本集主节点或从节点的系统上运行投票节点。
警告
请勿在副本集中部署多个仲裁节点。请参阅有关多个仲裁节点的问题。
要将仲裁节点添加到现有副本集:
通常,如果副本集中承载数据的成员少于或等于两个,则可能需要先为副本集设置集群范围的写关注(write concern)。
请参阅集群范围的写关注(write concern),详细了解为什么可能需要设置集群范围的写关注。
在使用具有一个仲裁节点的新副本集之前,您不需要更改集群范围的写关注(write concern)。
Considerations
主从仲裁副本集
如使用主节点-从节点-仲裁节点 (PSA) 三成员架构,请考虑以下因素:
如果从节点不可用或滞后,写关注(write concern)
"majority"可能会导致性能问题。有关如何缓解这些问题的建议,请参阅缓解自管理 PSA 副本集的性能问题。如果使用的全局默认值
"majority",并且写关注小于大多数的大小,则您的查询可能会返回过时(未完全复制)的数据。
投票节点
仲裁节点不存储数据,但在将仲裁节点的 mongod 进程添加到副本集中之前,仲裁节点会像其他 mongod 进程一样运行,启动时有一组数据文件和完整大小的日志。
IP 绑定
警告
将实例绑定到可公开访问的 IP 地址之前,必须保护集群免遭未经授权的访问。有关安全建议的完整列表,请参阅自管理部署的安全清单。至少应考虑启用身份验证和强化网络基础设施。
MongoDB 二进制文件 mongod 和 mongos 默认绑定到本地主机。如果为此二进制文件设置了 net.ipv6 配置文件设置或 --ipv6 命令行选项,则该二进制文件还会绑定到本地主机 IPv6 地址。
By default mongod and mongos that are bound to localhost only accept connections from clients that are running on the same computer. This binding behavior includes mongosh and other members of your replica set or sharded cluster. Remote clients cannot connect to binaries that are bound only to localhost.
要覆盖默认绑定并绑定到其他 IP 地址,请使用 net.bindIp 配置文件设置或 --bind_ip 命令行选项来指定主机名或 IP 地址的列表。
警告
Starting in MongDB 5.0, split horizon DNS nodes that are only configured with an IP address fail startup validation and report an error. See disableSplitHorizonIPCheck.
例如,以下 mongod 实例会绑定到本地主机和主机名 My-Example-Associated-Hostname,而该主机名与 IP 地址 198.51.100.1 相关联:
mongod --bind_ip localhost,My-Example-Associated-Hostname
为了连接到此实例,远程客户端必须指定主机名或其关联的 IP 地址 198.51.100.1:
mongosh --host My-Example-Associated-Hostname mongosh --host 198.51.100.1
重要
要避免因 IP 地址变更而更新配置,请使用 DNS 主机名而非 IP 地址。在配置副本集成员或分片集群成员时,使用 DNS 主机名而非 IP 地址尤为重要。
在水平分割网络配置下,请使用主机名而非 IP 地址来配置集群。从 MongoDB 5.0 开始,仅配置了 IP 地址的节点将无法通过启动验证,因而不会启动。
添加仲裁节点
警告
请勿在副本集中部署多个仲裁节点。请参阅有关多个仲裁节点的问题。
要将仲裁节点添加到现有副本集:
通常,如果副本集中承载数据的成员少于或等于两个,则可能需要先为副本集设置集群范围的写关注(write concern)。
请参阅集群范围的写关注(write concern),详细了解为什么可能需要设置集群范围的写关注。
在使用具有一个仲裁节点的新副本集之前,您不需要更改集群范围的写关注(write concern)。
重要
要避免因 IP 地址变更而更新配置,请使用 DNS 主机名而非 IP 地址。在配置副本集成员或分片集群成员时,使用 DNS 主机名而非 IP 地址尤为重要。
在水平分割网络配置下,请使用主机名而非 IP 地址来配置集群。从 MongoDB 5.0 开始,仅配置了 IP 地址的节点将无法通过启动验证,因而不会启动。
为仲裁节点创建数据目录(例如
storage.dbPath)。mongod实例使用该目录存储配置数据。该目录不会保存数据集。例如,创建/var/lib/mongodb/arb目录:mkdir /var/lib/mongodb/arb 启动仲裁节点,指定数据目录和要加入的副本集名称。使用
/var/lib/mongodb/arb作为dbPath,将rs作为副本集名称,启动仲裁节点:警告
将实例绑定到可公开访问的 IP 地址之前,必须保护集群免遭未经授权的访问。有关安全建议的完整列表,请参阅自管理部署的安全清单。至少应考虑启用身份验证和强化网络基础设施。
mongod --port 27017 --dbpath /var/lib/mongodb/arb --replSet rs --bind_ip localhost,<hostname(s)|ip address(es)> 连接到主节点,并将仲裁节点添加到副本集。使用
rs.addArb()方法,如以下示例所示,该示例假设m1.example.net是与仲裁节点的指定 IP 地址关联的主机名:rs.addArb("m1.example.net:27017") 此操作会添加在
m1.example.net主机的27017端口上运行的仲裁节点。