Windows-Server-2008

MongoDB 沒有正確複製

  • February 28, 2012

我將 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 來解決此問題。我認為節點已進入陳舊狀態。

引用自:https://serverfault.com/questions/364411