【MongoDB】副本集部署 之 添加新成员

本章内容:

  • 概述
  • 必要条件
  • 步骤

一、概述

本教程说明了如何向现有副本集添加新成员。有关副本部署模式的背景,请参阅文档:副本集部署体系结构

 

1.投票人数上限

一个副本集最多可以有七个投票成员。要将成员添加到已经具有七个投票成员的副本集中,要么将新成员作为非投票成员,要么从现有某一个成员中删除投票功能。

 

2.初始化脚本

在生产环境部署中,可以配置一个初始化脚本来管理成员操作步骤。

 

3.现有成员

可以通过以下步骤将新成员添加到现有副本集中。也可以使用相同的步骤“重新添加”已删除的成员。如果被删除成员的数据仍然是相对较新的,则数据可以容易恢复和更新。

 

4.数据文件

如果有现有成员的备份或快照,则可以将数据文件(例如:dbPath目录)移动到新系统,并使用它们快速创建新成员。这些文件必须是:

重要

始终使用文件系统快照来创建现有副本集的成员的副本。不要使用mongodump和mongorestore初始化新副本集成员数据。

  • 根据primary操作日志中最早的操作更新。通过应用primary成员的操作日志中的操作,新会员必须能变成最新状态。

 

5.IP绑定

从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地址的列表。

警告

绑定到非本地主机(例如可公开访问)的IP地址之前,请确保已保护群集免受未经授权的访问。有关安全建议的完整列表,请参阅“安全检验表”。至少应考虑启用身份验证强化网络基础结构

例如,以下mongod实例同时绑定到localhost和主机名My-Example-Associated-Hostname:

mongod --bind_ip localhost,My-Example-Associated-Hostname

假如主机名My-Example-Associated-Hostname与IP地址198.51.100.1关联。为了连接到该实例,远程客户端必须指定主机名或其关联的IP地址198.51.100.1:

mongo --host My-Example-Associated-Hostname

mongo --host 198.51.100.1

提示

如果可能,请使用逻辑DNS主机名而不是IP地址,尤其是在配置副本集成员或分片群集成员时。逻辑DNS主机名的使用避免了由于IP地址更改而导致的配置更改。

 

二、必要条件

  1. 现有正在运行的副本集。
  2. 新的MongoDB系统能够支持你的数据集,现有副本集可以通过网络对其进行访问。

否则,请使用MongoDB安装教程和“部署副本集”教程。

 

三、步骤

1.准备数据目录

在将新成员添加到现有副本集中之前,请使用以下策略之一准备新成员的数据目录:

  • 确保新成员的数据目录不包含数据。新成员将复制现有成员的数据

如果新成员处于恢复(recovering)状态,作为复制过程的一部分,在MongoDB可以将所有数据进行复制之前,它必须退出并成为 secondary成员。此过程需要时间,但不需要管理员干预。

  • 从现有成员手动复制数据目录。新成员成为辅助成员,并会获得副本集的当前状态。复制数据可能会缩短新成员成为最新成员的时间

确保可以将数据目录复制到新成员,然后在操作日志允许的窗口内开始复制。否则,新实例将必须执行初始同步,这将完全重新同步数据,如重新同步副本集的成员中所述。

使用rs.printReplicationInfo()来检查副本集成员关于oplog的当前状态。

有关复制部署模式的背景,请参阅副本集部署体系结构文档。

 

2.将成员添加到现有副本集中

提示

如果可能,请使用逻辑DNS主机名而不是IP地址,尤其是在配置副本集成员或分片群集成员时。逻辑DNS主机名的使用避免了由于IP地址更改而导致的配置更改。

第1:启动新的mongod实例。

指定数据目录和副本集名称。以下示例指定/srv /mongodb/db0数据目录和rs0副本集:

mongod --dbpath /srv/mongodb/db0 –replSet rs0  --bind_ip localhost, <hostname(s) |ip address(es)>

警告

绑定到非本地主机(例如可公开访问)的IP地址之前,请确保已保护集群免受未经授权的访问。有关安全建议的完整列表,请参阅安全检查表。至少应考虑启用身份验证强化网络基础结构

有关配置选项的更多信息,请参见mongod手册页。

可选的操作

可以在mongod.conf配置文件中指定数据目录,副本集名称和ip绑定,然后使用以下命令启动mongod:

mongod --config /etc/mongod.conf

 

第2:连接到副本集的主副本。

只能在连接到primary成员时,可以添加成员。如果不知道哪个成员是primary成员,请登录到副本集的任何成员,然后发出db.isMaster()命令。

 

第3:使用rs.add()将新成员添加到副本集。

成员配置文档传递给该方法。例如,要在主机mongodb3.example.net上添加成员,请发出以下命令:

rs.add( { host: "mongodb3.example.net:27017", priority: 0, votes: 0 } )

提示

当新添加的辅助节点的投票和优先级设置大于零时,在其初始同步期间,即使辅助节点不能提供读取或成为主节点,因为其数据仍不一致,所以该辅助节点仍算作有表决权的成员。

这可能导致大多数投票成员在线但无法选举主要成员的情况。为避免这种情况,请考虑首先添加优先级为0且投票为0的新辅助节点。然后,一旦成员转换为SECONDARY状态,请使用rs.reconfig()更新其优先级投票权

 

第4:确认新成员已达到SECONDARY状态。

要检查副本集成员的状态,请运行rs.status()

rs.status()

第5:新添加的成员转换为SECONDARY状态后,请使用rs.reconfig()更新新添加成员的优先级投票权(如果需要)。

例如,如果rs.conf()返回mongodb3.example.net:27017的配置文档作为members数组中的第五个元素,以将其优先级和投票权更新为1,请使用以下操作序列:

var cfg = rs.conf();

cfg.members[4].priority = 1

cfg.members[4].votes = 1

rs.reconfig(cfg)

警告

shell方法rs.reconfig()可能强制当前primary数据库降级,从而引起新一轮选举。当主数据库降级时,mongod将关闭所有客户端连接。虽然这通常需要10到20秒,但请尝试在计划的维护期间进行这些更改。

避免重新配置包含不同MongoDB版本成员的副本集,因为验证规则可能在MongoDB版本之间有所不同。

下一篇:删除成员

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值