从MongoDB8.0 开始,您可以配置配置服务器来存储除通常的 分片集群元数据数据之外的应用程序数据。存储应用程序数据的配置服务器称为配置分片或嵌入式配置服务器。
将副本集转换为具有嵌入式配置分片的分分片分片集群可以减少:
部署中所需的节点数。
维护单分片集群的复杂性。
关于此任务
从MongoDB 8.3 开始,您可以将副本集直接转换为具有嵌入式配置分片的集群。
上一个的版本要求您首先将副本集转换为具有专用配置服务器副本集分片集群,然后将其转换为具有嵌入式配置分分片的集群。
访问控制
如果启用了访问权限控制,则transitionFromDedicatedConfigServer 命令需要对transitionFromDedicatedConfigServer 集群 执行 授权操作。
clusterManager角色具有transitionFromDedicatedConfigServer 授权动作,可以分配给用户。
开始之前
从MongoDB 8.3 开始,以前的分片的片集群副本集无法转换回副本集。
将分片集群转换为副本集时,会保留先前部署的分片元数据,包括分片身份document,以阻止其再次成为分片集群。如果您尝试将自管理转换回分片集群, MongoDB将返回错误。
要将此类副本集转换为分片的集群,联系技术支持。
步骤
以下示例将自管理副本集转换为配置分片,其中包含副本集预先存在的用户数据。
将副本集置于维护模式。
对副本集执行滚动重启。在维护模式下将每个节点作为配置服务器启动:
停止每个节点,从辅助节点开始。要关闭服务器,请使用
db.shutdownServer()方法。db.shutdownServer() 在维护模式下将节点作为配置分片重新启动。
mongod --config /etc/mongodb.conf --configsvr \ --replicaSetConfigShardMaintenanceMode \ --configsvr- 将
mongod实例作为配置服务器启动。 --replicaSetConfigShardMaintenanceMode- 启用配置分片维护模式,该模式会禁用某些启动检查,并允许将服务器转换为嵌入式配置分片。
等待该节点重新加入副本集,然后再重新启动下一个。
查找主节点 (primary node in the replica set)节点。
使用 rs.status() 方法识别新的主节点 (primary node in the replica set)节点。如果您有大型副本集,请使用 db.aggregate() 方法缩小搜索范围。
db.aggregate( [ { $documents: rs.status().members }, { $match: { stateStr: "PRIMARY" } }, { $project: { _id: 1, name: 1 } ] )
[ { _id: 3, name: "192.0.2.3:27017" } ]
将主节点 (primary node in the replica set)转换为配置分片。
连接到主节点 (primary node in the replica set)节点并将其重新配置为作为嵌入式配置分片运行:
使用
rs.conf()方法 GET 当前配置并将其存储在变量中:var conf = rs.conf() 设置
configsvr字段:conf.configsvr = true 递增
version字段:conf.version += 1 重新配置节点:
rs.reconfig(conf) 等待从节点复制更改。您可以通过在节点 document 上运行聚合管道来检查状态:
db.aggregate( [ { $documents: rs.status().members }, { $group: { _id: null, allConfigSvr: { $min: { $eq: ["$configsvr", true] } } } } ] ) { _id: null, allConfigSvr: true } 当
allConfigSvr显示true时,表示重新配置已传播到集群中的所有节点。
重新启动集群。
执行滚动升级以将副本集作为配置服务器重新启动:
停止每个节点,从辅助节点开始。要关闭服务器,请使用
db.shutdownServer()方法。db.shutdownServer() 重新启动节点作为配置服务器,不再处于维护模式:
mongod --config /etc/mongodb.conf --configsvr
启动路由器。
启动 mongos 路由器:
mongos --config /etc/mongodb.conf
将配置服务器转换为嵌入式配置分片。
连接到 mongos 并运行 transitionFromDedicatedConfigServer 命令以将配置分片添加到集群。
db.adminCommand( { transitionFromDedidcatedConfigServer: 1 } )
将应用程序指向路由器。
更新应用程序以连接到 mongos 路由器而不是副本集成员。