从MongoDB8.0 开始,您可以配置配置服务器来存储除通常的 分片集群元数据数据之外的应用程序数据。存储应用程序数据的配置服务器称为配置分片或嵌入式配置服务器。
将副本集转换为具有嵌入式配置服务器的分分片集群可以减少:
部署中所需的节点数。
维护单分片集群的复杂性。
关于此任务
您不能将副本集直接转换为配置分分片。 要将副本集集转换为嵌入式配置服务器,您必须:
使用
transitionFromDedicatedConfigServer命令将专用配置服务器配置为作为配置分片运行。transitionFromDedicatedConfigServer命令将配置服务器添加为分片集群的分片。
添加配置分片后,减少集群中的分片分片。
访问控制
如果启用了访问权限控制,则transitionFromDedicatedConfigServer transitionFromDedicatedConfigServer命令需要对集群执行 授权动作。
clusterManager角色具有transitionFromDedicatedConfigServer 授权动作,可以分配给用户。
步骤
以下示例将自管理副本集集转换为配置分分片,其中包含副本集预先存在的用户数据。
使用专用配置服务器将副本集转换为分分片集群
本教程假定您知道如何将自管理副本集转换为分片分片集群。 有关完整说明,请参阅将自管理副本集转换为分片集群。
验证配置服务器现在是否为配置分分片
您可以通过使用以下方法之一来确认分片集群是否使用了配置分片:
运行
mongosh中的sh.isConfigShardEnabled()方法。如果sh.isConfigShardEnabled()输出包含enabled: true,则集群使用配置分片。如果输出包含enabled: false,则集群不使用配置分片。连接到 时,对 数据库运行
mongoslistShards命令,并检查输出中是否存在将admin_id设立为 的文档。"config"如果listShards输出不包含将_id设立为"config"的文档,则集群不使用配置分片。
以下示例运行 listShards 命令并尝试查找 _id设立为 "config" 的文档。
db.adminCommand({ listShards: 1 })["shards"].find(element => element._id === "config")
在此示例中,返回的文档已将 _id设立为 "config",这确认此集群使用配置分片。
{ _id: "config", host: "configRepl/localhost:27018", state: 1, topologyTime: Timestamp({ t: 1732218671, i: 13 }), replSetConfigVersion: Long('-1') }
注意
如果负载均衡器正在运行,它会自动跨分片迁移数据。否则,请使用moveCollection 或moveChunk 命令手动分发数据。
将集群中的分片数量减少到 1
要在添加配置分片分片集群分片为单个分片,请使用moveCollection 命令将所有未分片的集合移至配置分片片,并使用removeShard 命令删除分片集群的第一个分片。此步骤会将集群缩减为单个配置分分片。