本教程说明了如何向现有副本集添加其他成员 。有关复制部署模式的背景,请参阅副本集部署体系结构文档。
您可以使用以下过程将新成员添加到现有集中。您也可以使用相同的步骤“重新添加”已删除的成员。如果被删除的成员的数据仍然相对较新,则可以轻松恢复和追赶。
如果您有现有成员的备份或快照,则可以将数据文件(例如,dbPath
目录)移动到新系统,并使用它们快速启动新成员。这些文件必须是:
来自相同副本集成员的数据文件的有效副本。有关 更多信息,请参见使用文件系统快照备份和还原文档。
重要
始终使用文件系统快照来创建现有副本集的成员的副本。请勿使用
mongodump
和mongorestore
播种新的副本集成员。
从MongoDB 3.6,MongoDB二进制文件mongod
和开始
mongos
,默认情况下绑定到localhost。如果
为二进制net.ipv6
文件设置了
配置文件设置或--ipv6
命令行选项,则二进制文件还会绑定到本地IPv6地址。
以前,从MongoDB 2.6开始,默认情况下,只有正式的MongoDB RPM(Red Hat,CentOS,Fedora Linux和衍生产品)和DEB(Debian,Ubuntu和衍生产品)的二进制文件才绑定到localhost。
当仅绑定到本地主机时,这些MongoDB 3.6二进制文件只能接受来自mongo
在同一台计算机上运行的客户端(包括Shell,副本集中部署的其他成员和分片群集)中的连接。远程客户端无法连接到仅绑定到本地主机的二进制文件。
要覆盖并绑定到其他IP地址,可以使用
net.bindIp
配置文件设置或
--bind_ip
命令行选项来指定主机名或IP地址的列表。
例如,以下mongod
实例绑定到localhost和My-Example-Associated-Hostname
与ip地址关联的主机名198.51.100.1
:
为了连接到该实例,远程客户端必须指定主机名或其关联的IP地址198.51.100.1
:
小费
如果可能,请使用逻辑DNS主机名而不是IP地址,尤其是在配置副本集成员或分片群集成员时。逻辑DNS主机名的使用避免了由于IP地址更改而导致的配置更改。
在将新成员添加到现有副本集之前,请使用以下策略之一准备新成员的数据目录:
确保新成员的数据目录不包含数据。新成员将复制现有成员的数据。
如果新成员处于恢复状态,则在MongoDB可以将所有数据作为复制过程的一部分进行复制之前,它必须退出并成为辅助成员。此过程需要时间,但不需要管理员干预。
从现有成员手动复制数据目录。新成员成为辅助成员,并将赶上副本集的当前状态。复制数据可能会缩短新成员成为最新成员的时间。
确保可以将数据目录复制到新成员,并在oplog允许的窗口内开始复制。否则,新实例将必须执行初始同步,这将完全重新同步数据,如重新同步副本集的成员中所述。
使用rs.printReplicationInfo()
与问候到OPLOG检查副本集成员的当前状态。
有关复制部署模式的背景,请参阅 副本集部署体系结构文档。
小费
如果可能,请使用逻辑DNS主机名而不是IP地址,尤其是在配置副本集成员或分片群集成员时。逻辑DNS主机名的使用避免了由于IP地址更改而导致的配置更改。
启动新mongod
实例。指定数据目录和副本集名称。下面的示例指定
/srv/mongodb/db0
数据目录和rs0
副本集:
有关配置选项的更多信息,请参见
mongod
手册页。
连接到副本集的主数据库。
您只能在连接到主要成员时添加成员。如果您不知道哪个成员是主要成员,请登录副本集的任何成员并发出db.isMaster()
命令。
使用rs.add()
新的成员添加到副本集。将传递给方法。例如,要在host上添加成员
,请发出以下命令:member configuration document
mongodb3.example.net
小费
当新添加的辅助服务器的votes
且
其priority
设置大于零时,在其初始同步期间,即使该辅助服务器由于其数据不一致而无法提供读取服务或成为主服务器,但仍将作为投票成员。
这可能导致多数投票成员在线但无法选举主要成员的情况。为避免这种情况,请考虑首先使用和添加新的辅助服务器
。然后,一旦成员转换为
状态,即可使用来更新其优先级和投票。priority :0
votes :0
SECONDARY
rs.reconfig()
确保新成员已达到SECONDARY
状态。要检查副本集成员的状态,请运行
rs.status()
:
一旦新添加的成员转换为
SECONDARY
状态,请使用rs.reconfig()
来更新新添加的成员的priority
,
votes
如果需要的话。
例如,如果rs.conf()
将配置文档mongodb3.example.net:27017
作为members
数组中的第五个元素返回,则将其优先级更新并投票为
1
,请使用以下操作序列:
警告
rs.reconfig()
壳方法可以强制当前主下台,这将导致一个选举。当主服务器降级时,将
mongod
关闭所有客户端连接。虽然这通常需要10到20秒,但请尝试在计划的维护期间进行这些更改。