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