orchestrator raft leader頻繁變化問題

最近在使用orchestrator的過程中,遭遇了嚴重的問題。
最初上線的幾個月裏,raft leader非常穩定。
但隨着時間的推移,raft leader 頻繁變化的問題就爆發了。

leader的變化,直接原因,就是leader沒有按時發送heartbeat,從而觸發了選舉機制。

第一個懷疑的原因,就是網絡抖動,出現丟包。但是,通過查看監控數據,發現沒有丟包跡象。接着,通過tcpdump抓包,也證實沒有數據丟失。

第二個懷疑的是,raft的代碼實現有問題。查看github倉庫,已經很長時間沒有release了。翻看issue,找到2個相似的,但這些issue沒有追查詢下去,最後沒有什麼具體結論就關閉了。

第三個懷疑的是,系統負載和內存使用。
從監控數據看,16核機器,負載在1左右徘徊。16G內存,空閒率在30%-50%,偶爾某臺機器低於10%。
從這些數據看,無法確切判定,就是機器資源耗盡導致的。

接着使用pprof查看goroutine、內存情況,並抓trace,發現snapshot操作出現大量堆積,多的時候有9000+goroutine。
在內存使用上,snapshot也是消耗最多的。
由於頻繁申請大量內存,GC次數和耗時出現嚴重增加。
這樣,就影響了goroutine的調度,尤其是對時間敏感的goroutine,例如hearbeat,導致其發送時間延後。

關於snapshot的爲什麼消耗內存,下次再具體介紹。

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