重启自管理的分片集群
本教程针对MongoDB 8.0。对于MongoDB的早期版本,请参阅MongoDB手册的相应版本。
本过程演示了重启分片集群的关闭和启动顺序。以不同的顺序停止或启动分片集群的组件可能会导致成员之间的通信错误。例如,分片 服务器可能会挂起,如果没有可用的 配置服务器。
重要
此过程应在计划维护期间执行。在此期间,应用程序应停止对集群的所有读取和写入操作,以防止潜在的数据丢失或读取过时的数据。
开始之前
从MongoDB 8.0开始,您可以使用 directShardOperations 角色执行需要直接针对分片执行命令的维护操作。
警告
使用 directShardOperations 角色运行命令可能导致您的集群无法正常工作并可能导致数据损坏。仅将 directShardOperations 角色用于维护目的或在MongoDB支持人员的指导下。完成维护操作后,停止使用 directShardOperations 角色。
禁用均衡器
禁用均衡器以停止 数据分片迁移,直到过程结束前不执行任何元数据写入操作。如果正在进行迁移,均衡器将在停止前完成正在进行的迁移。
要禁用均衡器,连接到集群的任意一个 mongos 实例,并执行以下命令:[1]
sh.stopBalancer()
要检查均衡器状态,执行 sh.getBalancerState() 命令。
有关更多信息,请参阅禁用均衡器。
| [1] | 从 MongoDB 6.0.3 版本开始,不再执行自动分片拆分。这是因为平衡策略的改进。自动拆分命令仍然存在,但不执行任何操作。在 MongoDB 6.0.3 之前的版本中,sh.stopBalancer() 也会禁用分片集群的自动拆分。 |
停止分片集群
停止 mongos 路由器。
在每个 mongos 路由器上从 admin 数据库运行 db.shutdownServer()
use admin db.shutdownServer()
停止每个分片副本集。
在每个分片副本集成员上从 admin 数据库运行 db.shutdownServer() 以关闭其 mongod 进程。在副本集中的每个副本集关闭主节点之前先关闭所有次要成员。
停止配置服务器。
在每个db.shutdownServer()配置服务器上从admin数据库中运行,以关闭其配置服务器的mongod进程。在关闭主节点之前,先关闭所有次要成员。
启动分片集群
启动配置服务器.
在启动每个mongod时,使用配置文件或命令行指定mongod设置。有关启动参数的更多信息,请参阅mongod参考页面。
配置文件
如果使用配置文件,请使用--config选项设置配置文件路径来启动mongod。
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 设置。
配置文件
如果使用配置文件,请使用--config选项设置配置文件路径来启动mongod。
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 路由器。
配置文件
如果使用配置文件,请使用指定 --config 选项和配置文件路径启动 mongos。
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 版本开始,不再执行自动分片拆分。这是因为平衡策略的改进。自动拆分命令仍然存在,但不执行任何操作。在MongoDB 6.0.3之前的版本中,sh.startBalancer() 还会为分片集群启用自动分割。 |
验证集群可访问性
将一个 mongo 壳层连接到集群中的一个 mongos 进程。使用 sh.status() 检查集群的整体状态。
为了确认所有分片都可以访问并通信,向临时分片集合中插入测试数据。确认数据在您的集群中的每个分片之间被分割和迁移。您可以将一个 mongo 壳层连接到每个分片的主节点,并使用 db.collection.find() 验证数据是否按预期分片。
重要
为了防止潜在的数据丢失或读取过时的数据,在确认集群健康且可访问之前,不要开始对集群进行应用程序的读写操作。