我們的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?