对自托管副本集成员进行维护
概述
副本集允许MongoDB部署在大多数维护窗口期间保持可用。
本文档概述了对副本集每个成员执行维护的基本程序。此外,这个特定的顺序旨在最大限度地减少主节点不可用的时间和整个部署的影响。
将以下步骤作为常见副本集操作的基础,特别是对于升级到最新版本的MongoDB等程序。
程序
对于副本集中的每个成员,从辅助成员开始,按以下顺序执行事件,以主节点结束。
在另一个端口上以独立模式重启从节点。
在操作系统命令提示符下,以独立实例重启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
始终使用相同的用户启动 mongod
,即使在作为独立实例重启副本集成员时也是如此。
在副节点上执行维护操作。
在成员为独立模式时,使用 mongosh
执行维护操作
mongo --port 27218
重要
在成员为独立模式时,不会将此成员的任何写操作复制到该成员,也不会将此成员上的写操作复制到副本集的其他成员。
确保此独立实例上的任何写操作都不会与当成员重新加入副本集时将应用到此成员的操作日志(oplog)写操作冲突。
将 mongod
作为副本集成员重启。
完成所有维护任务后,使用以下步骤在默认端口以副本集成员的身份重启 mongod
。
在 mongosh
中,维护完成后关闭独立服务器。
use admin db.shutdownServer()
以原始配置将 mongod
实例作为副本集成员重启;即撤销以独立服务器启动时所做的配置更改。
提示
请务必删除 disableLogicalSessionCacheRefresh
参数。
对于分片或配置服务器成员,请务必删除 skipShardingConfigurationChecks
参数。
启动后,使用 mongosh
连接到重启后的实例。
次要副本需要一些时间才能赶上主要副本。从 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
如果使用命令行选项,请执行以下配置更新
将
--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
对现在的独立实例执行维护任务。
重要
在成员为独立模式时,不会将此成员的任何写操作复制到该成员,也不会将此成员上的写操作复制到副本集的其他成员。
确保此独立实例上的任何写操作都不会与当成员重新加入副本集时将应用到此成员的操作日志(oplog)写操作冲突。
在执行所有维护任务后,以副本集成员的身份重启
mongod
实例,使用其原始配置;即撤销启动时作为独立实例所做的配置更改。提示
请务必删除
disableLogicalSessionCacheRefresh
参数。对于分片或配置服务器成员,请务必删除
skipShardingConfigurationChecks
参数。