Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs 菜单
Docs 主页
/ /

从嵌入式配置服务器过渡到专用配置服务器

要从嵌入式配置服务器过渡到专用配置服务器,必须确保配置分片的数据已迁移到集群中的其余分片。此过程描述如何安全迁移数据并完成过渡。

  1. 此过程使用sh.moveCollection() 方法将集合移出配置分片。在开始此过程之前,查看moveCollection 注意事项和要求,以了解命令行为。

  2. 要过渡到专用配置服务器,请先使用mongos 连接到集群的mongosh 实例之一。

1

要从配置分分片迁移数据,必须启用负载均衡器进程。要检查负载负载均衡器状态,请使用sh.getBalancerState() 方法:

sh.getBalancerState()

如果操作返回true ,则负载均衡器已启用。

如果操作返回false ,请参阅启用负载均衡器。

2

运行listShards 以确认配置分片出现在分片列表中:

db.adminCommand( { listShards: 1 } )

在输出中,shards._id字段包含分片名称。配置分片的_id 通常为 "config"

{
shards: [
{
_id: 'config',
...
},
...
],
ok: 1
...
}
3

admin 数据库运行transitionToDedicatedConfigServer 命令:

use admin
db.adminCommand( { transitionToDedicatedConfigServer: 1 } )

配置分片进入排干状态,负载均衡器开始将数据段从配置分片迁移到集群中的其余分片。根据网络容量和数据量,此操作可能需要几分钟到几天才能完成。

4

使用$listClusterCatalog 聚合阶段识别仍驻留在配置分分片上的未分片集合:

use admin
db.aggregate([
{ $listClusterCatalog: { shards: true } },
{
$match: {
sharded: false,
shards: "config",
type: { $nin: ["timeseries", "view"] },
ns: { $not: { $regex: "^enxcol_\\..*(\\.esc|\\.ecc|\\.ecoc|\\.ecoc\\.compact)$" } },
$or: [
{ ns: { $not: { $regex: "\\.system\\." } } },
{ ns: { $regex: "\\.system\\.buckets\\." } }
],
db: { $nin: ["config", "admin"] }
}
},
{ $project: { _id: 0, ns: 1 } }
])

对于输出中的每个命名空间,使用sh.moveCollection() 将未分片集合从配置分片移动到接收分片:

sh.moveCollection(
"<database>.<collection>",
"<ID of recipient shard>"
)

重复此步骤,直到配置分分片上没有未分片的集合。

5

admin 数据库运行db.printShardingStatus()

use admin
db.printShardingStatus()

在输出的 databases 部分,检查每个数据库的 primary字段。对于主节点 (primary node in the replica set)为配置分片的任何应用程序数据库(configadmin 以外的数据库),请将主分片更改为其他分片。

要更改数据库的主分片,运行movePrimary

db.adminCommand({
movePrimary: "<dbName>",
to: "<recipientShard>"
})

在上一步中未移动的任何集合在movePrimary 运行时都不可用。

6

要检查转换进度,请从 数据库重新运行transitionToDedicatedConfigServer admin

use admin
db.adminCommand( { transitionToDedicatedConfigServer: 1 } )

继续检查状态,直到转换成功完成,输出类似于以下示例:

{
state: 'completed',
msg: 'removeshard completed successfully',
shard: 'config',
ok: 1
}
7

在配置分片报告 state'completed' 后,提交从嵌入式配置服务器到专用配置服务器的转换:

use admin
db.adminCommand( { commitTransitionToDedicatedConfigServer: 1 } )

成功提交返回以下输出:

{
ok: 1,
'$clusterTime': {
...
},
operationTime: ...
}

成功后, MongoDB将从集群元数据中删除 config分片,并完成向专用配置服务器的过渡。如果配置分分片未完全耗尽,则该命令将失败,您必须在重试之前继续检查 { state: 'completed' } 的转换状态。

提交转换后,listShards 不再将配置分片包含在分片列表中。集群现在使用专用的配置服务器,并且配置服务器不再将应用程序数据存储为分片。

后退

删除分片

在此页面上