Overview
副本集支持 MongoDB 部署在维护窗口的大部分时间保持可用。
本文档概述对副本集各成员执行维护的基本过程。此外,此特定序列还能最大限度地减少主节点不可用的时间,并控制对整个部署的影响。
将这些步骤作为常见副本集操作的基础,尤其是升级到最新版本的 MongoDB 等过程。
步骤
对于副本集的各成员,从从节点开始,执行以下事件序列,到主节点结束:
在不同端口上将从节点作为独立节点重启。
在操作系统 Shell 提示符下,将 mongod 作为独立实例重启。
如果使用配置文件,请进行以下配置更新:
注释掉
replication.replSetName选项。将
net.port更改为另一个端口。以注释的形式记下原始端口设置。在
setParameter部分中将参数disableLogicalSessionCacheRefresh设置为true。注释掉
sharding.clusterRole选项。在
setParameter部分中将参数skipShardingConfigurationChecks设置为true。
例如,如果在分片/配置服务器副本集节点上执行维护,则更新后的配置文件将包含类似以下示例的内容:
net: bindIp: localhost,<hostname(s)|ip address(es)> port: 27218 # port: 27018 #replication: # replSetName: shardA #sharding: # clusterRole: shardsvr setParameter: skipShardingConfigurationChecks: true disableLogicalSessionCacheRefresh: true
如果使用命令行选项,请进行以下配置更新以重新启动:
将
--port修改为不同的端口。在
--setParameter选项中将参数disableLogicalSessionCacheRefresh设置为true。如果是分片成员,则删除
--shardsvr;如果是配置服务器分片,则删除 {--configsvr。在
setParameter部分中将参数skipShardingConfigurationChecks设置为true。
示例,要重新启动不属于分分片集群的副本集成员:
mongod --port 27218 --dbpath /srv/mongodb --bind_ip localhost,<hostname(s)|ip address(es)> --setParameter disableLogicalSessionCacheRefresh=true
例如,要重新启动分片/配置服务器副本集节点进行维护,请执行以下操作:
mongod --port 27218 --dbpath /srv/mongodb --bind_ip localhost,<hostname(s)|ip address(es)> --setParameter skipShardingConfigurationChecks=true --setParameter disableLogicalSessionCacheRefresh=true
警告
将实例绑定到可公开访问的 IP 地址之前,必须保护集群免遭未经授权的访问。有关安全建议的完整列表,请参阅自管理部署的安全清单。至少应考虑启用身份验证和强化网络基础设施。
即使将副本集成员作为独立实例重新启动,也应始终使用同一个用户启动 mongod。
在从节点上执行维护操作。
当节点为独立运行节点时,使用mongosh 执行维护:
mongo --port 27218
重要
虽然该节点是独立的,但不会将任何写入复制到此节点,也不会将此节点上的写入复制到副本集的其他成员。
确保该独立节点上的任何写入都不会与成员重新加入副本集时应用于该成员的 oplog 写入发生冲突。
mongod将 重新启动为副本集的节点。
执行所有维护任务后,请使用以下过程,在常用端口上将 mongod 作为副本集成员重启。
在mongosh 中,完成维护后关闭独立运行服务器:
use admin db.shutdownServer()
以副本集成员身份重启 mongod 实例,并保留其原始配置,即撤销以独立成员启动时对配置所做的变更。
提示
请务必删除 disableLogicalSessionCacheRefresh 参数。
对于分片或配置服务器节点,请务必删除 skipShardingConfigurationChecks 参数。
启动后,将mongosh 连接到重新启动的实例。
从从节点(secondary node from replica set)需要时间才能赶上主节点RECOVERING (primary nodemongosh in the replicaSECONDARY set)。从 开始,使用以下命令验证该成员是否已从 状态赶上 状态。
rs.status()
最后维护主节点。
要在完成所有从节点的维护任务后对主节点 (primary node in the replica set)执行维护,请将
mongosh连接到主节点rs.stepDown()(primary node in the replica set)并使用 降级主节点 (primary node in the replica set),并允许从节点之一当选为新的主节点 (primary node in the replica set)。指定300 秒的等待时间,以防止该成员在五分钟内再次被选举主节点 (primary node in the replica set):rs.stepDown(300) 在主节点降级后,副本集将选举新的主节点。
将
mongod作为独立实例重启,更新以下配置。
如果使用配置文件,请进行以下配置更新:
注释掉
replication.replSetName选项。将
net.port更改为另一个端口。以注释的形式记下原始端口设置。在
--setParameter选项中将参数disableLogicalSessionCacheRefresh设置为true。注释掉
sharding.clusterRole选项。在
setParameter部分中将参数skipShardingConfigurationChecks设置为true。
例如,如果在分片/配置服务器副本集节点上执行维护,则更新后的配置文件将包含类似以下示例的内容:
net: bindIp: localhost,<hostname(s)|ip address(es)> port: 27218 # port: 27018 #replication: # replSetName: shardA #sharding: # clusterRole: shardsvr setParameter: skipShardingConfigurationChecks: true disableLogicalSessionCacheRefresh: true
警告
将实例绑定到可公开访问的 IP 地址之前,必须保护集群免遭未经授权的访问。有关安全建议的完整列表,请参阅自管理部署的安全清单。至少应考虑启用身份验证和强化网络基础设施。
如果使用命令行选项,请进行以下配置更新:
将
--port修改为不同的端口。在
--setParameter选项中将参数disableLogicalSessionCacheRefresh设置为true。如果是分片成员,则删除
--shardsvr;如果是配置服务器分片,则删除 {--configsvr。在
setParameter部分中将参数skipShardingConfigurationChecks设置为true。
示例,要重新启动不属于分分片集群的副本集成员:
mongod --port 27218 --dbpath /srv/mongodb --bind_ip localhost,<hostname(s)|ip address(es)> --setParameter disableLogicalSessionCacheRefresh=true
例如,要重新启动分片/配置服务器副本集节点进行维护,请执行以下操作:
mongod --port 27218 --dbpath /srv/mongodb --bind_ip localhost,<hostname(s)|ip address(es)> --setParameter skipShardingConfigurationChecks=true --setParameter disableLogicalSessionCacheRefresh=true
警告
将实例绑定到可公开访问的 IP 地址之前,必须保护集群免遭未经授权的访问。有关安全建议的完整列表,请参阅自管理部署的安全清单。至少应考虑启用身份验证和强化网络基础设施。
在新的独立实例上执行维护任务。
重要
虽然该节点是独立的,但不会将任何写入复制到此节点,也不会将此节点上的写入复制到副本集的其他成员。
确保该独立节点上的任何写入都不会与成员重新加入副本集时应用于该成员的 oplog 写入发生冲突。
在执行所有维护任务后,以副本集成员身份重启
mongod实例,并保留其原始配置,即撤销以独立成员启动时对配置所做的变更。提示
请务必删除
disableLogicalSessionCacheRefresh参数。对于分片或配置服务器节点,请务必删除
skipShardingConfigurationChecks参数。