1. 程式人生 > >【故障公告】docker swarm 叢集問題引發的故障

【故障公告】docker swarm 叢集問題引發的故障

我們的生產環境部署了 2 個 docker swarm 叢集,叢集 swarm-a 用於專門跑部落格站點,叢集 swarm-b 用於跑其他站點,manager 節點用了阿里雲包月伺服器,worker 節點用了阿里雲搶佔式例項。

今天 11:03 收到阿里雲的簡訊通知“您的搶佔式例項:例項ID(例項名稱)因庫存變化,即將進入釋放狀態”,一共被釋放了3臺,其中1臺是叢集 swarm-a 的節點伺服器,1臺是叢集 swarm-b 的節點伺服器。釋放後,2個叢集穩如泰山,應用的正常執行並沒有受到影響,當時叢集的剩餘伺服器夠用,也就沒有立即加伺服器。

中午 12:23 又收到阿里雲搶佔式例項釋放的簡訊通知,這次是叢集 swarm-b 的1臺伺服器,釋放後集群依然穩如泰山。但這時我們緊張起來了,怎麼回事,今天一天釋放的伺服器頂之前的半年,為了以防繼續有伺服器被釋放,我們趕緊新購伺服器新增到叢集。

這次購買的是阿里雲第六代企業級 c6 伺服器(包月),本來雖然少了2臺伺服器但叢集執行正常,但是將新購伺服器加入集群后竟然引發了叢集故障(當時不知是新購伺服器引起的),容器之間的網路通訊出現了奇怪問題,無法正常通訊。12:40 左右,叢集 swarm-b 全面故障,除部落格站點之外的其他站點都無法正常訪問。

繼續加伺服器,但問題依舊。後來發現,重啟容器可以恢復正常,於是一個一個服務重啟。

docker service update --force server_name

13:00 左右開始,各個應用開始逐步恢復正常。

在恢復的過程中才發現最先加入的那臺伺服器的異常表現,上面的容器執行狀態都顯示正常,但本機 80 埠卻連不上,通過 docker node update --availability drain 命令解除安裝所有容器後問題依舊,後來通過阿里雲控制檯重啟這臺伺服器後立馬恢復了正常,非常奇怪。

非常抱歉!這次故障給大家帶來很大的麻煩,請大家諒解。我們會吸取教訓,改進生產環境的部署方案。