天天看點

mongodb副本集中其中一個節點當機無法重新開機的問題

2-8日我還在家中的時候,被告知mongodb副本集中其中一個從節點因未知原因當機,然後暫時負責代管的同僚無論如何就是啟動不起來。

當時mongodb的日志資訊是這樣的:

mongodb副本集中其中一個節點當機無法重新開機的問題

實際上這裡這麼長一串最重要的資訊應該是在後邊幾行:

據我的了解,這裡大概的意思是指明了副本集節點最後的正常時間,說現在啟動這個節點需要復原,但是復原的時候存在沖突沖突,然後無法正常啟動。

當時我正有事忙着,電腦又不在手邊上,僅憑這幾行提示我也無法确定究竟是什麼原因,又想到一台從節點暫時當機對整個系統沒有太大影響,于是就讓他先看了一下機器記憶體,結果發現記憶體實在低的不像話,才三四十兆。

但是這台機隻有一個程式在運作,就是mongodb資料庫,資料庫沒運作的情況下記憶體這樣低絕對有問題。

于是我初步推斷大概是記憶體的問題導緻資料缺失,而後同步出現沖突沖突,便提出了重新開機機器的要求,由于是生産環境要走一系列流程,是以直到昨晚機器才完成重新開機。

機器重新開機後,記憶體果然恢複正常,但是重新開機資料庫的時候還是一樣的問題。

既如此,那就隻能翻出2-8當天出問題時的日志再看看了,于是發現之前的日志上方還有有這樣一些内容:

一番查詢後,有說是副本集選舉問題的,有說是網絡防火牆問題的,但并沒有找到解決辦法,于是隻好自己想了一個解決辦法,強制把當機節點删除掉再建立一個全新的資料庫作為節點加進來。

在這個過程中我有所猶豫,因為我并不确定在加入了使用者驗證和使用了keyfile檔案的時候能否成功解決我的問題,不知道是否會出現使用者驗證不通過而導緻無法加入節點的問題。

不過好在,實在想不出更好辦法的情況下,我用rs.remove删除當機節點,再用rs.add添加新節點後,一切資料都正常同步了,包括之前的使用者名密碼和系統所需的主要資料。

而且原本以為一千多萬的資料可能需要耗費很久時間同步,結果并沒有用多久這個節點就從startup2變成了secondary。

本以為會有一番周折,結果有些出乎意料的解決了,但是并沒有找到問題出現的根本原因,是以詳細記錄這一過程,以便其他人檢視的同時,也算是記錄下一個問題,尋求能想到相關原因的朋友給予解答。