本教程仅适用于 MongoDB 6.0 。 对于早期版本的 MongoDB,请参阅相应版本的 MongoDB 手册。
此过程演示了重新启动分片集群的关闭和初创企业顺序。 以不同的顺序停止或启动分分片集群的组件可能会导致成员之间出现通信错误。 示例,如果没有可用的 配置服务器 ,则 分 分片 服务器可能会挂起。
重要
此程序只能在计划维护期内执行。在此期间,应用程序应停止对集群的所有读取和写入操作,以防止潜在的数据丢失或读取过时的数据。
禁用负载均衡器
禁用负载均衡器以停止数据段迁移,并且在该进程完成之前不要执行任何元数据写入操作。如果迁移正在进行,负载均衡器将在停止之前完成进行中的迁移。
要禁用负载均衡器,请连接到群集的 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() 来验证数据是否按预期进行分片。
重要
为了防止潜在的数据丢失或读取过时的数据,在确认集群运行状况良好且可访问之前,不要启动应用程序对集群的读取和写入操作。