MongoDB故障總結

副本集狀態出現RECOVERING
mongo副本集搭建完成後從節點出現RECOVERING狀態:
test:RECOVERING>
1.查看mongo的日誌一直在報錯複製錯誤的信息:
MongoDB故障總結
2.從節點登錄查看複製狀態信息:很明顯是在前天下午18點30的時候複製停止,找到原因是因爲關機前沒關虛擬機,導致mongo異常退出,複製失敗
MongoDB故障總結
3.上網搜了一下資料,需要手動同步數據,mongo官網給了兩種辦法
1) 自動同步,最簡單也是操作最少的一種辦法,先把mongodb停止服務,然後把mongodb的數據目錄移走,新建一個mongo的數據目錄,再起服務,這樣他就會自動去追趕主庫的數據,缺點是恢復時間比較久,根據數據量來決定
2) 從另外一個成員拷貝數據文件, 停止備庫,從primary庫copy數據文件,在copy的時候,注意要把local庫也複製過來,複製不能採用mongodump,僅僅只允許使用快照備份數據文件
分析了上面的2種方式,第一種方式,清空數據目錄重啓mongodb實例讓mongodb初始化同步數據,操作簡單,但是恢復時間比較長,需要花費更多時間替換數據,第二種方式從副本集合的另外一個成員拷貝數據目錄後重啓mongodb實例,這個恢復過程速度快但是需要比較多的手工操作步驟,爲了方便和簡單,我這裏用第一種方式
故障節點再此之前先把mongodb的服務給停了,進去mongo裏use admin庫再輸入db.shutdownServer()
MongoDB故障總結
4、我的mongo的數據放在這個文件夾裏,現在把原來的數據改個名字 新建一個mongo的數據文件夾,要知道自己的數據文件夾放哪裏可以看/etc/mongod.conf文件
root@backup:/data # mv mongo mongo.bak #給舊的mongo數據文件進行改名
查看一下新文件夾, mongodb副本集已經在向主節點同步數據了
root@backup:/data # mkdir mongo #創建新的mongo文件夾
MongoDB故障總結
rset:STARTUP2> rs.status(); #查看一下集羣信息
發現剛纔重啓的這臺狀態已經變成startup2了,接下來的就是等待了
等了大概一天同步數據,登上去看看
rset:PRIMARY> rs.status()

發現這個節點的數據已經恢復了,並加入了集羣裏,其他的副本集如果也是RECOVERING也要做相同的操作,總的來說就是停止服務,然後移走老的數據文件夾,新建新的文件夾,再起服務等他自己同步,把oplog調整大一點,防止以後又出現這種情況
測試是否同步成功:去主節點插入一條數據在從節點查看複製狀態:

部分摘自51cto

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章