本教程特定于MongoDB 4.2。对于MongoDB的早期版本,请参考《 MongoDB手册》的相应版本。
此过程演示了重新启动分片群集的关闭和启动顺序。以不同顺序停止或启动分片群集的组件可能会导致成员之间的通信错误。例如,分片服务器可能会挂起如果没有配置服务器 可用。
重要
此过程仅应在计划的维护期内执行。在此期间,应用程序应停止对集群的所有读取和写入,以防止潜在的数据丢失或读取过时的数据。
禁用平衡器以停止块迁移,并且在过程完成之前不要执行任何元数据写入操作。如果正在进行迁移,那么平衡器将在停止之前完成正在进行的迁移。
要禁用平衡器,请连接到集群的一个
mongos
实例,然后发出以下命令:[1]
要检查平衡器状态,请发出sh.getBalancerState()
命令。
有关更多信息,请参阅禁用平衡器。
[1] | 从MongoDB 4.2开始,sh.stopBalancer() 还会禁用分片群集的自动拆分。 |
mongos
路由器。¶db.shutdownServer()
从admin
每个mongos
路由器上的数据库
运行:
运行db.shutdownServer()
在admin
每个数据库
碎片副本集成员来关闭其mongod
进程。在关闭每个副本集中的主要成员之前,请先关闭所有辅助成员。
db.shutdownServer()
从admin
每个配置服务器上的数据库运行以关闭其mongod
进程。关闭所有辅助成员之前,请先关闭主要成员。
重新启用平衡器以恢复 块迁移。
连接到集群的一个mongos
实例并运行sh.startBalancer()
命令:[2]
要检查平衡器状态,请发出sh.getBalancerState()
命令。
有关更多信息,请参阅启用平衡器。
[2] | 从MongoDB 4.2开始,sh.startBalancer() 还可以对分片群集进行自动拆分。 |
将mongo
外壳连接到集群的
mongos
进程之一。使用sh.status()
检查整个集群的状态。
要确认所有分片均可以访问并可以通信,请将测试数据插入临时分片集合中。确认正在集群中的每个分片之间拆分和迁移数据。您可以将mongo
外壳连接到每个分片主数据库,并用于db.collection.find()
验证数据是否按预期分片。
重要
为防止潜在的数据丢失或读取过时的数据,请先确认集群运行状况良好且可访问,然后再开始对集群进行应用程序读写。