对自管理副本集成员进行维护
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
连接到重新启动的实例。
从节点需要时间才能赶上主节点 (primary node in the replica set)。 从mongosh
开始,使用以下命令验证该成员是否已从RECOVERING
状态赶上SECONDARY
状态。
rs.status()
最后维护主节点。
要在完成所有从节点的维护任务后对主节点进行维护,请将
mongosh
连接主节点,并使用rs.stepDown()
降级主节点,让其中一个从节点选举成为新的主节点。指定 300 秒等待时间,防止该成员在五分钟内再次被选举为主节点: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
参数。