2012-08-01 25 views
1

我收集了數百萬個對象,只有一臺服務器。我設置了一個配置服務器和2個分片節點,其中之一是具有該集合文檔的節點。 我添加集合成碎片後,一切看起來都很好。然而,有些奇怪的事情正在發生,當mongod正在分解該集合時,如果我不斷詢問集合的大小:db.activity_items.count()數字正在減少。爲什麼?我在哪裏丟失任何數據?當我分解我的現有集合時,我會丟失數據嗎?

這是一些控制檯輸出,只是爲了說明問題:

mongos> db.activity_items.count() 
19107620 
mongos> db.activity_items.count() 
19107223 
mongos> db.activity_items.count() 
19106939 
mongos> db.activity_items.count() 
19106922 
mongos> db.activity_items.count() 
19027118 

編輯

,如果我跑db.activity_items.stats();http://pastebin.com/85RqZmQM。它表明第一個分片節點正在減少計數器,第二個分片節點沒有增加其計數器。這讓我覺得我的數據陷入了僵局。

EDIT 2

我停下平衡器。它停下來丟失數據,但是我的老數據didnt回來..

mongos> db.activity_items.count() 
15736936 

編輯3

我填寫一個關於它的錯誤:https://jira.mongodb.org/browse/SERVER-6696

回答

0

首先讓我說,我不不認爲你在這裏丟失數據。 count()命令在分片環境中的工作方式很可能存在問題。目前已與相反的行爲的錯誤,例如:

https://jira.mongodb.org/browse/SERVER-3645

我覺得這裏發生了什麼是計數實際上只在原來的碎片執行正確,而不是返回(或返回零)新碎片。如果直接連接碎片初選並在那裏運行,會發生什麼?

另外,運行sh.status(),以便您可以跟蹤遷移。

至於看到一個實驗,如果這是暫時的,在飛行中的遷移造成的,請嘗試臨時禁用平衡器:

// connect to mongos 
> use config 
> db.settings.update({ _id: "balancer" }, { $set : { stopped: true } } , true); 

一旦在飛行中遷移完成後,再次嘗試計數,看看他們是有道理的。既然你添加了一個新的分片,他們兩個都會不斷地添加/刪除文檔。在他們平衡並且移動停止之前,很難說出偏差的直接原因是什麼,但是這會告訴你如果他們在平衡完成後會再次看起來健全。

編輯:根據評論 - 將是偉大的讓你的版本和操作系統,看看這是否可重現,如果是這樣,提出一個錯誤,以得到它的修復。

+0

檢查出我的編輯。 – 2012-08-01 23:16:12

+0

增加了幾個步驟,讓你找出這是否是由於正在進行的平衡 – 2012-08-01 23:37:24

+0

好。我剛剛停止了這個平衡,它仍然在下降,因爲我猜測飛行中的遷移仍在進行。我如何檢查在線遷移狀態? – 2012-08-01 23:48:37

相關問題