2017年6月4日 星期日

[mongo] hidden replica node and reset priority after sync fail resolved

今天遇到同步錯誤的問題

但也因為這問題發現很多可以設定的點

以及可以避免修復過程中的問題

問題發生的過程:

1. 同步錯誤
Master因某種問題和Slave同步失敗會噴下面這個訊息
Several users have reported crashes with the message "[repl writer worker 10] writer worker caught exception: :: caused by :: 26 Failed to apply insert due to missing collection" when replicating a write.後來找到網頁是說可能是某種bug在3.2.1版中修改成如果找不到collection就drop

但我安裝3.4.4時(找不到3.2.1) 卻沒有解決這問題,

所以我就把node單獨啟動後,
手動加入消失的collecitons後就好了...
但接下來又發生其他問題

2. Slave回來後發生短暫的idle狀態
由於client90%都是slave優先的連線方法
因此當slave解決同步問題後上線了
但沒想到上線後仍需要和master確認其餘的opts commands
結果造成整個系統連線資料庫timeout
(依目前資料量大概idel 10~15 分鐘)

解法:
1. 消失什麼就手動補什麼,多出什麼就砍什麼(幸運的話就會回來),長期而言就更新mongo版本吧......

2. 上線前先把priority改為0, 並用hidden把slave藏起來不給用

以下連上primary node操作
cfg = rs.conf()
cfg.members[0].priority = 0
cfg.members[0].hidden = true
rs.reconfig(cfg)

等到同步穩定後在把priority和hidden改回來

沒有留言:

張貼留言