2013-10-17 46 views
0

我們的MongoDB設置使用三個副本集碎片。每個Web服務器在本地運行一個mongos實例,並且客戶端node.js進程通過使用Mongoose(3.6.20)和node-mongodb-native連接。所以node-mongodb-native只是連接到localhost上的mongos。node-mongodb-native在複製集主網絡故障時不能恢復?

當副本集主節點很難關閉時(我們可以通過在主節點上執行'ifdown eth0'來模擬此操作)mongos正確檢測到這一點,並且還檢測到新主節點已被選中。到現在爲止還挺好。但是,node-mongodb-native與mongos實例的連接仍然是打開的,但不起作用,並且需要重新啓動節點procs。

我們的假設是,mongos只會殺死任何已建立的與死亡主節點的連接,而node-mongodb-native會重新連接,但似乎並非如此;服務器和操作系統都認爲這些連接是開放的。相比之下,在主要stepDown上,客戶端故障轉移良好,連接關閉並重新打開。

我們正在看socketTimeoutMS,但這似乎是不正確的,因爲它會導致連接只是空閒的斷開。

我們是否缺少配置給我們的客戶或mongos,或者我們是否需要實現自己的ping?

回答

0

根據實驗和以下MongoDB錯誤,這似乎只是mongos(或者,如果您願意的話,客戶端庫)的缺點。現在它看起來像'在你的應用程序中編寫自己的ping邏輯並在失敗時觸發重新連接',所以這就是我們正在做的。

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