我已经部署了一个由三个副本集(config
,dbms1
,dbms2
)组成的MongoDB分片群集,每个群集基于this有一个节点。
字段mydb.article.category
具有两个可能的值"science"
和"technology"
。我必须基于该字段创建两个块,
chunk1
存储在dbms1
和dbms2
chunk2
存储在dbms2
我已经能够像这样在碎片之间分配这两个块了:
> sh.status()
...
shards:
{ "_id" : "dbms1", "host" : "dbms1/172.18.0.23:27017", "state" : 1 }
{ "_id" : "dbms2", "host" : "dbms2/172.18.0.24:27017", "state" : 1 }
...
> sh.enableSharding("mydb")
> sh.shardCollection("mydb.article", { category : 1 })
> sh.disableBalancing("mydb.article")
> sh.splitAt("mydb.article", { category: "science" })
> sh.splitAt("mydb.article", { category: "technology" })
> sh.moveChunk("mydb.article", { category: "science" }, "dbms1")
> sh.moveChunk("mydb.article", { category: "technology" }, "dbms2")
> sh.status()
...
db.article
...
{ "category" : { "$minKey" : 1 } } -->> { "category" : "science" } on : dbms1 Timestamp(2, 1)
{ "category" : "science" } -->> { "category" : "technology" } on : dbms1 Timestamp(1, 3)
{ "category" : "technology" } -->> { "category" : { "$maxKey" : 1 } } on : dbms2 Timestamp(2, 0)
但是,我不知道如何在chunk1
上复制dbms2
。
我的印象是,这在mongo级别上是不可能的,因为mongo的分片似乎是在之上复制,即不可能在副本集之间进行复制。有什么替代方法可以实现此设置?
(这是一个有关分布式数据库的学校项目。)