Mongodb

查詢分片集合返回主分片和其他分片的所有結果

  • September 13, 2018

我嘗試設置一個分片來測試這個功能,並可能將我們的一些數據遷移到其中。

我遵循了文件指南https://docs.mongodb.com/v3.4/tutorial/convert-replica-set-to-replicated-shard-cluster/

所以我有一個第一個副本 rs0(包含 2 個伺服器)、一個副本 rs1(包含 2 個伺服器)和一個配置副本(包含 2 個用於測試的伺服器,我知道我應該在生產中至少使用 3 個)

現在,當我連接 mongos 實例時,我看到 rs0 是我的主分片。我分片的集合包含 1,000,000 個文件。rs1 包含 1 個塊,其中包含大約 500,000 個文件。如果我在 mongos 中執行 db.partitioned_collection.count() 它返回 1,500,000。而我預計它會返回 1,000,000。

我知道主分片包含所有未分片的文件,但是 mongos 應該只查詢 rs0 塊內的數據,不是嗎?

我究竟做錯了什麼 ?

我的 sh.status() 結果是:

--- Sharding Status ---
sharding version: {
   "_id" : 1,
   "minCompatibleVersion" : 5,
   "currentVersion" : 6,
   "clusterId" : ObjectId("5b992a952e6c702f9dd5b675")
}
shards:
   {  "_id" : "rs0",  "host" : "rs0/mongo-test:27017,mongo-test:27018",  "state" : 1 }
   {  "_id" : "rs1",  "host" : "rs1/mongo-test:27019,mongo-test:27020",  "state" : 1 }
active mongoses:
   "3.6.7" : 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:
           2 : Success
databases:
   {  "_id" : "config",  "primary" : "config",  "partitioned" : true }
           config.system.sessions
                   shard key: { "_id" : 1 }
                   unique: false
                   balancing: true
                   chunks:
                           rs0     1
                   { "_id" : { "$minKey" : 1 } } -->> { "_id" : { "$maxKey" : 1 } } on : rs0 Timestamp(1, 0)
   {  "_id" : "test",  "primary" : "rs0",  "partitioned" : true }
           test.partitioned_collection
                   shard key: { "number" : 1 }
                   unique: false
                   balancing: true
                   chunks:
                           rs0     2
                           rs1     1
                   { "number" : { "$minKey" : 1 } } -->> { "number" : 4794 } on : rs1 Timestamp(2, 0)
                   { "number" : 4794 } -->> { "number" : 9586 } on : rs0 Timestamp(2, 1)
                   { "number" : 9586 } -->> { "number" : { "$maxKey" : 1 } } on : rs0 Timestamp(1, 2)

更新#1:

看來我完全誤讀了以下文件https://docs.mongodb.com/v3.6/core/sharded-cluster-shards/#primary-shard。實際上,主分片不保存未分片的文件,而是保存未分片的集合……

所以現在的問題是為什麼我的主分片(rs0)應該只包含 2 個塊,仍然包含整個集合數據?

我終於再次測試以完全遵循https://docs.mongodb.com/v3.6/tutorial/convert-replica-set-to-replicated-shard-cluster/上的範例。而這一次它確實奏效了…… rs0 花了一些時間(不知道確切的時間)來刪除移動的文件,但幾分鐘(或幾十分鐘)後它們就不再存在了。

我試圖記住我第一次做的不同之處。我想知道我是否在 rs0 直接在 rs0 副本集上成為分片的一部分後插入了測試數據。據我了解,我們不能直接在分片副本集上插入/更新數據。

引用自:https://dba.stackexchange.com/questions/217403