该mergeChunks
命令允许您将同一分片上的连续块合并为一个块。本教程说明了如何合并分片群集中的相邻块。
sh.status()
在输出中,块范围出现在每个分片集合的块计数之后,如以下示例所示:
--- Sharding Status ---
sharding version: {
"_id" : 1,
"minCompatibleVersion" : 5,
"currentVersion" : 6,
"clusterId" : ObjectId("5c114e68325aee6f60669228")
}
shards:
{ "_id" : "shardA", "host" : "shardA/shardA-m1.example.net:27018,shardA-m2.example.net:27018,shardA-m3.example.net:27018", "state" : 1 }
{ "_id" : "shardB", "host" : "shardB/shardB-m1.example.net:27018,shardB-m2.example.net:27018,shardB-m3.example.net:27018", "state" : 1 }
active mongoses:
"4.0.4" : 1
autosplit:
Currently enabled: yes
balancer:
Currently enabled: yes
Currently running: no
Failed balancer rounds in last 5 attempts: 0
Migration Results for the last 24 hours:
8 : Success
databases:
{ "_id" : "config", "primary" : "config", "partitioned" : true }
{ "_id" : "test", "primary" : "shardA", "partitioned" : true, "version" : { "uuid" : UUID("2632036c-bd74-457f-a364-5def901fe5f6"), "lastMod" : 1 } }
test.members
shard key: { "username" : 1 }
unique: false
balancing: true
chunks:
shardA 7
shardB 7
{ "username" : { "$minKey" : 1 } } -->> { "username" : "user16643" } on : shardB Timestamp(2, 0)
{ "username" : "user16643" } -->> { "username" : "user2329" } on : shardB Timestamp(3, 0)
{ "username" : "user2329" } -->> { "username" : "user29937" } on : shardB Timestamp(4, 0)
{ "username" : "user29937" } -->> { "username" : "user36583" } on : shardB Timestamp(5, 0)
{ "username" : "user36583" } -->> { "username" : "user43229" } on : shardB Timestamp(6, 0)
{ "username" : "user43229" } -->> { "username" : "user49877" } on : shardB Timestamp(7, 0)
{ "username" : "user49877" } -->> { "username" : "user56522" } on : shardB Timestamp(8, 0)
{ "username" : "user56522" } -->> { "username" : "user63169" } on : shardA Timestamp(8, 1)
{ "username" : "user63169" } -->> { "username" : "user69816" } on : shardA Timestamp(1, 17)
{ "username" : "user69816" } -->> { "username" : "user76462" } on : shardA Timestamp(1, 19)
{ "username" : "user76462" } -->> { "username" : "user83108" } on : shardA Timestamp(1, 21)
{ "username" : "user83108" } -->> { "username" : "user89756" } on : shardA Timestamp(1, 23)
{ "username" : "user89756" } -->> { "username" : "user96401" } on : shardA Timestamp(1, 25)
{ "username" : "user96401" } -->> { "username" : { "$maxKey" : 1 } } on : shardA Timestamp(1, 26)
在每个分片集合的块计数之后,将出现块范围。例如,以下是test.members
集合的块范围
:
{ "username" : { "$minKey" : 1 } } -->> { "username" : "user16643" } on : shardB Timestamp(2, 0)
{ "username" : "user16643" } -->> { "username" : "user2329" } on : shardB Timestamp(3, 0)
{ "username" : "user2329" } -->> { "username" : "user29937" } on : shardB Timestamp(4, 0)
{ "username" : "user29937" } -->> { "username" : "user36583" } on : shardB Timestamp(5, 0)
{ "username" : "user36583" } -->> { "username" : "user43229" } on : shardB Timestamp(6, 0)
{ "username" : "user43229" } -->> { "username" : "user49877" } on : shardB Timestamp(7, 0)
{ "username" : "user49877" } -->> { "username" : "user56522" } on : shardB Timestamp(8, 0)
{ "username" : "user56522" } -->> { "username" : "user63169" } on : shardA Timestamp(8, 1)
{ "username" : "user63169" } -->> { "username" : "user69816" } on : shardA Timestamp(1, 17)
{ "username" : "user69816" } -->> { "username" : "user76462" } on : shardA Timestamp(1, 19)
{ "username" : "user76462" } -->> { "username" : "user83108" } on : shardA Timestamp(1, 21)
{ "username" : "user83108" } -->> { "username" : "user89756" } on : shardA Timestamp(1, 23)
{ "username" : "user89756" } -->> { "username" : "user96401" } on : shardA Timestamp(1, 25)
{ "username" : "user96401" } -->> { "username" : { "$maxKey" : 1 } } on : shardA Timestamp(1, 26)
在同一分片上合并连续的块。
例如,考虑以下块范围shardA
:
注意
要合并的块突出显示。
{ "username" : "user56522" } -->> { "username" : "user63169" } on : shardA Timestamp(8, 1)
{ "username" : "user63169" } -->> { "username" : "user69816" } on : shardA Timestamp(1, 17)
{ "username" : "user69816" } -->> { "username" : "user76462" } on : shardA Timestamp(1, 19)
{ "username" : "user76462" } -->> { "username" : "user83108" } on : shardA Timestamp(1, 21)
{ "username" : "user83108" } -->> { "username" : "user89756" } on : shardA Timestamp(1, 23)
{ "username" : "user89756" } -->> { "username" : "user96401" } on : shardA Timestamp(1, 25)
{ "username" : "user96401" } -->> { "username" : { "$maxKey" : 1 } } on : shardA Timestamp(1, 26)
要合并突出显示的连续块,请mergeChunks
对admin
数据库发出
命令:
db.adminCommand( {
mergeChunks: "test.members",
bounds: [ { "username" : "user69816" },
{ "username" : "user96401" } ]
} )
成功后,将mergeChunks
产生以下输出:
{
"ok" : 1,
"operationTime" : Timestamp(1544636362, 12),
"$clusterTime" : {
"clusterTime" : Timestamp(1544636362, 13),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
}
}
在任何失败情况下,mergeChunks
返回该ok
字段值为的文档0
。
合并标识的块后,请确认新的块,如下所示:
sh.status()
的输出sh.status()
应类似于:
--- Sharding Status ---
sharding version: {
"_id" : 1,
"minCompatibleVersion" : 5,
"currentVersion" : 6,
"clusterId" : ObjectId("5c114e68325aee6f60669228")
}
shards:
{ "_id" : "shardA", "host" : "shardA/shardA-m1.example.net:27018,shardA-m2.example.net:27018,shardA-m3.example.net:27018", "state" : 1 }
{ "_id" : "shardB", "host" : "shardB/shardB-m1.example.net:27018,shardB-m2.example.net:27018,shardB-m3.example.net:27018", "state" : 1 }
active mongoses:
"4.0.4" : 1
autosplit:
Currently enabled: yes
balancer:
Currently enabled: yes
Currently running: yes
Collections with active migrations:
test.members started at Wed Dec 12 2018 13:14:55 GMT-0500 (EST)
Failed balancer rounds in last 5 attempts: 0
Migration Results for the last 24 hours:
8 : Success
databases:
{ "_id" : "config", "primary" : "config", "partitioned" : true }
config.system.sessions
shard key: { "_id" : 1 }
unique: false
balancing: true
chunks:
shardA 1
{ "_id" : { "$minKey" : 1 } } -->> { "_id" : { "$maxKey" : 1 } } on : shardA Timestamp(1, 0)
{ "_id" : "test", "primary" : "shardA", "partitioned" : true, "version" : { "uuid" : UUID("2632036c-bd74-457f-a364-5def901fe5f6"), "lastMod" : 1 } }
test.members
shard key: { "username" : 1 }
unique: false
balancing: true
chunks:
shardA 4
shardB 7
{ "username" : { "$minKey" : 1 } } -->> { "username" : "user16643" } on : shardB Timestamp(2, 0)
{ "username" : "user16643" } -->> { "username" : "user2329" } on : shardB Timestamp(3, 0)
{ "username" : "user2329" } -->> { "username" : "user29937" } on : shardB Timestamp(4, 0)
{ "username" : "user29937" } -->> { "username" : "user36583" } on : shardB Timestamp(5, 0)
{ "username" : "user36583" } -->> { "username" : "user43229" } on : shardB Timestamp(6, 0)
{ "username" : "user43229" } -->> { "username" : "user49877" } on : shardB Timestamp(7, 0)
{ "username" : "user49877" } -->> { "username" : "user56522" } on : shardB Timestamp(8, 0)
{ "username" : "user56522" } -->> { "username" : "user63169" } on : shardA Timestamp(8, 1)
{ "username" : "user63169" } -->> { "username" : "user69816" } on : shardA Timestamp(1, 17)
{ "username" : "user69816" } -->> { "username" : "user96401" } on : shardA Timestamp(8, 2)
{ "username" : "user96401" } -->> { "username" : { "$maxKey" : 1 } } on : shardA Timestamp(1, 26)
合并之后,平衡器可以跨碎片迁移块,以确保块的分布更加均匀。