首页 > 解决方案 > MongoDB:跨多个分片复制块

问题描述

我已经部署了一个 MongoDB 分片集群,该集群由三个副本集(configdbms1dbms2)组成,每个副本集都有一个节点,基于this

该字段mydb.article.category正好有两个可能的值"science""technology"。我必须根据这个字段创建两个块,这样

我已经能够像这样在分片中分布这两个块:

> 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)

但是,我无法弄清楚如何chunk1dbms2.

我的印象是这在 mongo 级别上是不可能的,因为 mongo 的分片似乎高于复制,即不可能跨副本集进行复制。有哪些替代方法可以实现此设置?

(这是一个关于分布式数据库的学校项目。)

标签: mongodbreplicationsharding

解决方案


推荐阅读