将副本集转换为具有嵌入式配置服务器的分片集群
从 MongoDB 8.0 开始,您可以将配置服务器配置为存储您的应用程序数据,除了常规的分片集群元数据。一个存储应用程序数据的配置服务器被称为配置分片或内嵌配置服务器。
将副本集转换为具有内嵌配置服务器的分片集群可以减少
部署中所需的节点数量。
维护单分片集群的复杂性。
关于此任务
您不能直接将副本集转换为配置分片。要将副本集转换为内嵌配置服务器,您必须
将您的副本集转换为具有专用配置服务器的分片集群。
使用
transitionFromDedicatedConfigServer
命令将专用配置服务器配置为配置分片。transitionFromDedicatedConfigServer
命令将配置服务器添加为集群中的一个分片。
在添加配置分片后,减少集群中的分片数量。
访问控制
如果启用了访问控制,则transitionFromDedicatedConfigServer
命令需要集群的transitionFromDedicatedConfigServer
授权操作。
clusterManager
角色具有 transitionFromDedicatedConfigServer
授权操作,可以被分配给用户。
步骤
以下示例将自管理的副本集转换为包含来自副本集的现有用户数据的配置分片。
将您的副本集转换为具有专用配置服务器的分片集群
本教程假定您知道如何将自管理的副本集转换为分片集群。有关完整说明,请参阅将自管理的副本集转换为分片集群。
验证配置服务器现在是否已成为配置分片
要确认分片集群使用配置分片,请在连接到 mongos
并连接到 admin
数据库时运行 listShards
命令,并检查输出中是否有 _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
命令删除集群中的第一个分片。此步骤将您的集群减少到单个配置分片。
有关从集群中删除分片的完整说明,请参阅从分片集群中删除分片。