将成员添加到副本集
概述
本教程解释了如何向现有副本集添加额外节点 。有关复制部署模式的背景,请参阅副本集部署架构文档。
最大投票成员
一个副本集最多可以有七个有投票权的节点。要将成员添加到已经有七个投票成员的副本集,您必须将该成员添加 为非投票节点或从existing member
.
初始化脚本
在生产部署中,您可以配置一个初始化脚本 来管理节点进程。
现有节点
您可以使用这些过程将新节点添加到现有集。您还可以使用相同的过程来“重新添加”已删除的节点。如果被删除的节点的数据仍然相对较新,则可以很容易地恢复和赶上。
数据文件
如果您有现有节点的备份或快照,您可以将数据文件(例如dbPath
目录)移动到新系统并使用它们快速启动新节点
。这些文件必须是:
- 来自同一副本集成员的数据文件的有效副本。有关详细信息,请参阅使用文件系统快照 文档备份和还原。
IMPORTANT
始终使用文件系统快照来创建现有副本集成员的副本。不要使用 mongodump
和mongorestore
播种一个新的副本集节点。
IP绑定
WARNING
在绑定到非本地主机(例如可公开访问的)IP 地址之前,请确保您已保护集群免受未经授权的访问。有关安全建议的完整列表,请参阅 安全清单。至少,考虑 启用身份验证和 强化网络基础设施。
MongoDB 二进制文件,mongod
和mongos
,默认绑定到 localhost。如果为二进制文件设置了net.ipv6
配置文件设置或--ipv6
命令行选项,则二进制文件还会绑定到本地主机 IPv6 地址。
默认情况下mongod
,mongos
绑定到 localhost 的只接受来自在同一台计算机上运行的客户端的连接。这种绑定行为包括 mongosh
以及您的副本集或分片集群的其他成员。远程客户端无法连接到仅绑定到本地主机的二进制文件。
要覆盖默认绑定并绑定到其他 IP 地址,请使用 net.bindIp
配置文件设置或--bind_ip
命令行选项指定主机名或 IP 地址列表。
IMPORTANT
从 MongDB 5.0 开始,水平分割 DNS仅配置了 IP 地址的节点无法启动验证并报告错误。看disableSplitHorizonIPCheck
。
例如,以下mongod
实例绑定到 localhost 和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
IMPORTANT
为避免因 IP 地址更改而导致配置更新,请使用 DNS 主机名而不是 IP 地址。在配置副本集成员或分片集群节点时,使用 DNS 主机名而不是 IP 地址尤为重要。
使用主机名而不是 IP 地址来配置跨分割网络水平的集群。从 MongoDB 5.0 开始,仅配置了 IP 地址的节点将无法通过启动验证而不会启动。
要求
- 一个活跃的副本集。
- 一个新的 MongoDB 系统能够支持您的数据集,活动副本集可以通过网络访问。
程序
准备数据目录
在将新节点添加到现有副本集之前,使用以下策略之一准备新节点的数据目录:
确保新节点的数据目录不包含数据。新成员将从现有节点复制数据。
如果新节点处于恢复状态,它必须退出并成为从节点,然后 MongoDB 才能在复制过程中复制所有数据。此过程需要时间,但不需要管理员干预。
从现有节点手动复制数据目录。新节点成为从节点,并将赶上副本集的当前状态。复制数据可能会缩短新节点成为当前节点的时间。
确保您可以将数据目录复制到新节点,并在 oplog 允许的窗口内开始复制。否则,新实例将必须执行初始同步,这将完全重新同步数据,如重新同步副本集成员中所述。
用于
rs.printReplicationInfo()
检查关于 oplog 的副本集节点的当前状态。
有关复制部署模式的背景,请参阅 副本集部署架构文档。
将成员添加到现有副本集
IMPORTANT
为避免因 IP 地址更改而导致配置更新,请使用 DNS 主机名而不是 IP 地址。在配置副本集成员或分片集群节点时,使用 DNS 主机名而不是 IP 地址尤为重要。
使用主机名而不是 IP 地址来配置跨分割网络水平的集群。从 MongoDB 5.0 开始,仅配置了 IP 地址的节点将无法通过启动验证而不会启动。
启动新
mongod
实例。指定数据目录和副本集名称。以下示例指定/srv/mongodb/db0
数据目录和rs0
副本集:mongod --dbpath /srv/mongodb/db0 --replSet rs0 --bind_ip localhost,<hostname(s)|ip address(es)>
WARNING
在绑定到非本地主机(例如可公开访问的)IP 地址之前,请确保您已保护集群免受未经授权的访问。有关安全建议的完整列表,请参阅 安全清单。至少,考虑 启用身份验证和 强化网络基础设施。
有关配置选项的更多信息,请参阅 mongod
手册页。
NOTE
可选的
mongod.conf
您可以在配置文件中指定数据目录、副本集名称和ip绑定,并 mongod
使用以下命令启动:
mongod --config /etc/mongod.conf
连接到副本集的主节点。
您只能在连接到主节点时添加节点。如果您不知道哪个成员是主节点,请登录副本集的任何节点并发出
db.hello()
命令。用于
rs.add()
将新节点添加到副本集。将 传递member configuration document
给方法。例如,要在 host 上添加一个节点mongodb3.example.net
,请发出以下命令:rs.add( { host: "mongodb3.example.net:27017" } )
WARNING
在 MongoDB 5.0 之前,新添加的从节点仍然算作投票节点,即使它在数据一致之前既不能提供读取服务也不能成为主要节点。如果您运行的是早于 5.0 的 MongoDB 版本并添加一个其votes
和priority
设置大于零的辅助节点,这可能会导致大多数投票成员在线但无法选举主要节点的情况。为避免这种情况,请考虑最初使用 priority :0
和添加新的辅助votes :0
。然后,运行rs.status()
以确保成员已转换为SECONDARY
状态。最后,用于 rs.reconfig()
更新其优先级和选票。
← 将 Standalone 转换为副本集从副本集中删除成员 →
原文链接 - https://docs.mongodb.com/manual/tutorial/expand-replica-set/
译者:陆文龙