咱們的生產環境部署了 2 個 docker swarm 集羣,集羣 swarm-a 用於專門跑博客站點,集羣 swarm-b 用於跑其餘站點,manager 節點用了阿里雲包月服務器,worker 節點用了阿里雲搶佔式實例。node
今天 11:03 收到阿里雲的短信通知「您的搶佔式實例:實例ID(實例名稱)因庫存變化,即將進入釋放狀態」,一共被釋放了3臺,其中1臺是集羣 swarm-a 的節點服務器,1臺是集羣 swarm-b 的節點服務器。釋放後,2個集羣穩如泰山,應用的正常運行並無受到影響,當時集羣的剩餘服務器夠用,也就沒有當即加服務器。docker
中午 12:23 又收到阿里雲搶佔式實例釋放的短信通知,此次是集羣 swarm-b 的1臺服務器,釋放後集羣依然穩如泰山。但這時咱們緊張起來了,怎麼回事,今天一天釋放的服務器頂以前的半年,爲了以防繼續有服務器被釋放,咱們趕忙新購服務器添加到集羣。服務器
此次購買的是阿里雲第六代企業級 c6 服務器(包月),原本雖然少了2臺服務器但集羣運行正常,可是將新購服務器加入集羣后居然引起了集羣故障(當時不知是新購服務器引發的),容器之間的網絡通訊出現了奇怪問題,沒法正常通訊。12:40 左右,集羣 swarm-b 全面故障,除博客站點以外的其餘站點都沒法正常訪問。網絡
繼續加服務器,但問題依舊。後來發現,重啓容器能夠恢復正常,因而一個一個服務重啓。阿里雲
docker service update --force server_name
13:00 左右開始,各個應用開始逐步恢復正常。code
在恢復的過程當中才發現最早加入的那臺服務器的異常表現,上面的容器運行狀態都顯示正常,但本機 80 端口卻連不上,經過 docker node update --availability drain 命令卸載全部容器後問題依舊,後來經過阿里雲控制檯重啓這臺服務器後立馬恢復了正常,很是奇怪。server
很是抱歉!此次故障給你們帶來很大的麻煩,請你們諒解。咱們會吸收教訓,改進生產環境的部署方案。blog