我們試圖在3個副本集(rs1,rs2,rs3)中對mongodb 2.4.9中的大集合進行分片。目前,所有數據都駐留在rs1上。Mongodb不分片
我們有3個配置的服務器上運行,並啓用了分片使用:
sh.enableSharding("test")
然後,我們選擇了片鍵和分片集合:
sh.shardCollection("test.fs.chunks", { files_id : 1 , n : 1 })
之後,我們增加了我們額外的碎片:
sh.addShard("rs2/mongo2:27017")
sh.addShard("rs3/mongo3:27017")
但是 - 在4天后,所有數據仍駐留在rs1上。綜觀配置,我們是分片數據庫中被列爲「分區=真」:
{ "_id" : "test", "partitioned" : true, "primary" : "rs1" }
然而,當我們執行db.fs.chunks.getShardDistribution(),我們都帶有說明該集合的錯誤是不是分片:
mongos> db.fs.chunks.getShardDistribution()
Collection test.fs.chunks is not sharded.
我們再試圖重新執行shardCollection命令,並收到一條錯誤消息,說明它已經是分片:
mongos> sh.shardCollection("test.fs.chunks", { files_id : 1 , n : 1 })
"code" : 13449,
"ok" : 0,
"errmsg" : "exception: collection test.fs.chunks already sharded with 33463 chunks"
所有3 CO nfig服務器正在運行。 mongos日誌包含一系列平衡器分佈式鎖獲取/解鎖消息,但沒有其他值得注意的。
有沒有人有任何建議,我們如何可以進一步排除故障,並得到一些分片發生?
感謝
戴夫
您在分解集合之前是否在'files_id'和'n'(分片鍵)上創建了一個索引?另外,你沒有描述你使用'mongos' ...? –
在分解集合之前,我們確實在「files_id」和「n」上創建了索引。爲了進一步闡明 - 我們的mongo環境由3個副本集,3個mongos實例(我們的驅動程序僅指向其中的一個)和3個配置服務器組成。 – user3345274
在分片集合(網絡打嗝,其他錯誤)過程中發生某些事情時會發生這種情況,並且它使配置處於集合未「完全」分割的狀態。你可以檢查config DB,使用config; db.collections.find({ns:「test.fs.chunks」})和db.chunks.find({ns:「test.fs.chunks」}) - 我的猜測是,即使有集合中的條目。你可以手動清理它,但我建議在集合被分割時檢查mongos的日誌,並查看可能發現的錯誤或警告。 –