重启自管理的分片集群
本教程仅适用于 MongoDB 8.0 。 对于早期版本的 MongoDB,请参阅相应版本的 MongoDB 手册。
此过程演示了重新启动分片集群的关闭和初创企业顺序。 以不同的顺序停止或启动分分片集群的组件可能会导致成员之间出现通信错误。 示例,如果没有可用的 配置服务器 ,则 分 分片 服务器可能会挂起。
重要
此程序只能在计划维护期内执行。在此期间,应用程序应停止对集群的所有读取和写入操作,以防止潜在的数据丢失或读取过时的数据。
开始之前
从 MongoDB 8.0 开始,您可以使用 directShardOperations
角色来执行需要您直接对分片执行命令的维护操作。
警告
使用directShardOperations
角色运行命令可能会导致集群停止正常工作,并可能导致数据损坏。 仅将directShardOperations
角色用于维护目的或在MongoDB支持的指导下使用。 执行完维护操作后,请停止使用directShardOperations
角色。
禁用负载均衡器
禁用负载均衡器以停止数据段迁移,并且在该进程完成之前不要执行任何元数据写入操作。如果迁移正在进行,负载均衡器将在停止之前完成进行中的迁移。
要禁用负载均衡器,请连接到集群的其中一个 mongos
实例并发出以下命令:[1]
sh.stopBalancer()
要检查负载均衡器状态,请发出 sh.getBalancerState()
命令。
有关更多信息,请参阅禁用负载均衡器。
[1] | 从 MongoDB 6.0.3 开始,不再执行自动数据块分割。这是因为均衡策略的改进。自动分割命令仍然存在,但不执行操作。在 6.0.3 之前的 MongoDB 版本中,sh.stopBalancer() 还会为分片集群禁用自动分割。 |
停止分片集群
停止mongos
路由器。
从每个 mongos
路由器上的 admin
数据库运行 db.shutdownServer()
:
use admin db.shutdownServer()
停止每个分片副本集。
从每个分片副本集成员上的 admin
数据库运行 db.shutdownServer()
,关闭 mongod
进程。在关闭每个副本集中的主成员之前,先关闭所有从成员。
停止配置服务器。
在每个配置服务器上,从 admin
数据库运行 db.shutdownServer()
,关闭 mongod
进程。在关闭主节点之前,先关闭所有从节点。
启动分片集群
启动配置服务器。
启动每个 mongod
时,可使用配置文件或命令行指定 mongod
设置。有关启动参数的更多信息,请参阅 mongod
参考页面。
配置文件
如果使用配置文件,请启动 mongod
,并将 --config
选项设置为配置文件路径。
mongod --config <path-to-config-file>
命令行
如果使用命令行选项,请使用 --configsvr
、--replSet
、--bind_ip
和其他适合部署的选项启动 mongod
。例如:
mongod --configsvr --replSet <replica set name> --dbpath <path> --bind_ip localhost,<hostname(s)|ip address(es)>
启动所有配置服务器后,连接主成员 mongod
并运行 rs.status()
,确认每个 CSRS 成员的健康状况和可用性。
启动每个分片副本集。
启动每个 mongod
时,使用配置文件或命令行指定 mongod
设置。
配置文件
如果使用配置文件,请启动 mongod
,并将 --config
选项设置为配置文件路径。
mongod --config <path-to-config-file>
命令行
如果使用命令行选项,请使用 --replSet
、--shardsvr
和 --bind_ip
选项以及其他适合部署的选项启动 mongod
。例如:
mongod --shardsvr --replSet <replSetname> --dbpath <path> --bind_ip localhost,<hostname(s)|ip address(es)>
启动每个分片的所有成员后,连接到每个主成员 mongod
并运行 rs.status()
,确认每个成员的运行状况和可用性。
启动mongos
路由器。
使用配置文件或命令行参数启动 mongos
路由器,从而指定配置服务器。
配置文件
如果使用配置文件,请启动 mongos
,同时指定 --config
选项和配置文件的路径。
mongos --config <path-to-config>
有关配置文件的更多信息,请参阅配置选项。
命令行
如果使用命令行参数,请启动 mongos
,并根据部署情况指定 --configdb
、--bind_ip
和其他选项。例如:
警告
将实例绑定到可公开访问的 IP 地址之前,必须保护集群免遭未经授权的访问。有关安全建议的完整列表,请参阅自管理部署的安全清单。至少应考虑启用身份验证和强化网络基础设施。
mongos --configdb <configReplSetName>/cfg1.example.net:27019,cfg2.example.net:27019 --bind_ip localhost,<hostname(s)|ip address(es)>
包括适合您部署的任何其他选项。
重新启用负载均衡器
重新启用负载均衡器以恢复数据段迁移。
连接到集群的 mongos
实例之一,然后运行 sh.startBalancer()
命令:[2]
sh.startBalancer()
要检查负载均衡器状态,请发出 sh.getBalancerState()
命令。
有关更多信息,请参阅启用负载均衡器。
[2] | 从 MongoDB 6.0.3 开始,不再执行自动数据块分割。这是因为均衡策略的改进。自动分割命令仍然存在,但不执行操作。在 6.0.3 之前的 MongoDB 版本中,sh.startBalancer() 还支持分片集群的自动分割。 |
验证集群可访问性
将 mongo
shell 连接到集群的其中一个 mongos
进程。使用 sh.status()
检查整个集群状态。
要确认所有分片均可访问和通信,请将测试数据插入临时分片集合中。确认数据正在集群中的每个分片之间进行拆分和迁移。您可以将 mongo
Shell 连接到每个主分片,并使用 db.collection.find()
来验证数据是否按预期进行分片。
重要
为了防止潜在的数据丢失或读取过时的数据,在确认集群运行状况良好且可访问之前,不要启动应用程序对集群的读取和写入操作。