将仲裁节点添加到自管理副本集
在某些情况下(例如您有一个主节点 (primary node in the replica set)和一个从从节点(secondary node from replica set),但费用限制禁止添加另一个从从节点(secondary node from replica set)),您可以选择将一个 mongod
实例添加到副本集,作为在选举中投票的仲裁节点。
仲裁节点是 mongod
实例,它们是副本集的一部分,但不保存数据(即不提供数据冗余)。但是,仲裁节点可以参加选举。
仲裁节点的资源要求极低,并且不需要专用硬件。您可以将仲裁节点部署在应用服务服务器或监控主机上。
重要
不要在同时托管副本集主节点或从节点的系统上运行投票节点。
警告
请勿在副本集中部署多个仲裁节点。请参阅有关多个仲裁节点的问题。
要将仲裁节点添加到现有副本集:
通常,如果副本集中承载数据的成员少于或等于两个,则可能需要先为副本集设置集群范围的写关注(write concern)。
请参阅集群范围的写关注(write concern),详细了解为什么可能需要设置集群范围的写关注。
在使用具有一个仲裁节点的新副本集之前,您不需要更改集群范围的写关注(write concern)。
Considerations
主从仲裁副本集
如使用主节点-从节点-仲裁节点 (PSA) 三成员架构,请考虑以下因素:
如果从节点不可用或滞后,写关注
"majority"
可能会导致性能问题。有关如何缓解这些问题的建议,请参阅缓解自管理 PSA 副本集的性能问题。如果使用的全局默认值
"majority"
,并且写关注小于大多数的大小,则您的查询可能会返回过时(未完全复制)的数据。
投票节点
仲裁节点不存储数据,但在将仲裁节点的 mongod
进程添加到副本集中之前,仲裁节点会像其他 mongod
进程一样运行,启动时有一组数据文件和完整大小的日志。
IP 绑定
警告
将实例绑定到可公开访问的 IP 地址之前,必须保护集群免遭未经授权的访问。有关安全建议的完整列表,请参阅自管理部署的安全清单。至少应考虑启用身份验证和强化网络基础设施。
MongoDB 二进制文件 mongod
和 mongos
默认绑定到本地主机。如果为此二进制文件设置了 net.ipv6
配置文件设置或 --ipv6
命令行选项,则该二进制文件还会绑定到本地主机 IPv6 地址。
默认情况下,绑定到本地主机的 mongod
和 mongos
只接受来自同一计算机上运行的客户端的连接。这种绑定行为包括 mongosh
以及副本集或分片集群的其他成员。远程客户端无法连接到仅绑定到本地主机的二进制文件。
要覆盖默认绑定并绑定到其他 IP 地址,请使用 net.bindIp
配置文件设置或 --bind_ip
命令行选项来指定主机名或 IP 地址的列表。
警告
从 MongDB5.0 开始, 水平分割 DNS 仅配置了 IP 地址的节点无法启动验证并报告错误。请参阅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
端口上运行的仲裁节点。