Windows-Server-2008
MongoDB 沒有正確複製
我將 mongoDB 用於託管在 3 個亞馬遜實例上的應用程序。我有一個優先級最高(100)的主節點和 2 個優先級為 99 和 98 的輔助節點。幾天前,我在訪問主節點時開始收到 MongoCursorExceptions。我認為這與我的主伺服器資源不足且響應緩慢有關,因此我決定將其中一個輔助節點切換到主節點。
我將優先級從 100、99 和 98 更改為 1、100、98,但這並沒有將我的輔助伺服器切換到主伺服器。在檢查我的副本集的狀態時,我發現 3 個節點沒有正確同步,因為 optime 落後了 17 多個小時。真正令人擔憂的是,兩個輔助節點的執行時間是恆定的,而主節點的執行時間會不斷增加。我還通過使用 slaveOk 查詢驗證了我的輔助節點沒有最新數據。以下是我在主節點上獲得的狀態:
PRIMARY> rs.status() { "set" : "rs_a", "date" : ISODate("2012-02-28T09:34:50Z"), "myState" : 1, "members" : [ { "_id" : 0, "name" : "server1.com:27018", "health" : 1, "state" : 1, "stateStr" : "PRIMARY", "optime" : { "t" : 1330421648000, "i" : 2 }, "optimeDate" : ISODate("2012-02-28T09:34:08Z"), "self" : true }, { "_id" : 1, "name" : "server2.com:27018", "health" : 1, "state" : 2, "stateStr" : "SECONDARY", "uptime" : 3510, "optime" : { "t" : 1330358351000, "i" : 1 }, "optimeDate" : ISODate("2012-02-27T15:59:11Z"), "lastHeartbeat" : ISODate("2012-02-28T09:34:50Z"), "pingMs" : 0 }, { "_id" : 2, "name" : "server3.com:27018", "health" : 1, "state" : 2, "stateStr" : "SECONDARY", "uptime" : 3510, "optime" : { "t" : 1330358351000, "i" : 1 }, "optimeDate" : ISODate("2012-02-27T15:59:11Z"), "lastHeartbeat" : ISODate("2012-02-28T09:34:50Z"), "pingMs" : 0 } ], "ok" : 1 }
我在日誌中找不到太多內容。在少數情況下,輔助伺服器上的日誌報告連接到主伺服器時出現問題。但有趣的是,所有寫回都在輔助節點上正確完成。我希望所有伺服器始終保持最新狀態,這樣我就可以從任何節點讀取數據,因為這就是我首先使用 mongoDB 的原因。
我設法通過在輔助節點上重新啟動 mongod 來解決此問題。我認為節點已進入陳舊狀態。