雲計算之路-阿裏雲上-容器難容:容器服務故障以及自建 docker swarm 集群故障
3月21日,由於使用阿裏雲服務器自建 docker swarm 集群的不穩定,我們將自建 docker swarm 集群上的所有應用切換阿裏雲容器服務 swarm 版(非swarm mode)。
3月22日,我們進行移除與重啟節點的操作時引發了故障,詳見 雲計算之路-阿裏雲上-容器服務:移除節點引發博問站點短暫故障 。
3月24日,我們參考阿裏雲容器服務幫助文檔-指定多節點調度通過給節點添加用戶標簽的方式成功移除了部分節點。我們是這麽操作的,當時所有節點沒有添加用戶標簽,給待移除節點之外的所有節點添加了“group:1”標簽,在編排文件的 environment 配置中添加了“constraint:group==1”,對待移除節點上部署的所有應用進行“變更配置”操作(選中“重新調度”)。
3月31日(昨天),16:00 左右,我們再次進行移除節點的操作。由於上次操作時已給所有節點打上了“group:1”標簽,這次操作時就需要刪除待移除節點的“group:1”標簽,然後進行“變更配置”+“重新調度”。但操作後發現不起作用,待移除節點上的所有應用容器紋絲不動。多次操作,一次次仔細檢查操作步驟,未發現任何問題,而容器依然與待移除節點在一起,我們似乎聽到容器對節點說“You jump, I jump”。被容器與節點在一起的決心所打動,再加上實在找不到其他解決方法,我們決定鋌而走險——直接移除這個節點,但這不是盲目的選擇,是基於一個前提——這個節點上對應的應用都有2個容器,並且部署在不同的節點上。結果幸運的是冒險成功,節點成功移除,容器與節點比翼雙飛,這些應用剩下的部署在其他節點上的容器正常提供服務。
在移除節點後,我們向集群中添加了一個同樣配置的新節點。
之後,我們準確對集群中的一個節點進行重啟,為了避免重啟節點引發故障,我們參考阿裏雲容器服務幫助文檔-容器重新調度在編排文件的 environment 添加了 “reschedule:on-node-failure”,17: 00 左右重啟了節點服務器。
17:20 左右,悲劇開始上演了。。。
一邊接到 CPU 報警
一邊發現集群上的部分站點 503
一邊發現有節點離線
怎麽回事?重啟節點時,那個被重啟節點上的容器被遷移到了配置最低、容器最多的節點上,造成那個節點 CPU 100%,為什麽不遷移到新加的節點上?
幹脆把這個掛掉的節點移除吧,卻發現移除按鈕為灰色,不可點,只好重啟節點。。。
又發現另外一個低配節點出現同樣的問題,但可以移除,先將之移除。。。
在這期間越來越多的站點出現 503 。。。
將開始移除的高配節點加入進來。。。
後來節點逐步恢復了正常,然後一個一個“重新部署”應用,有些應用恢復了。但很多應用不管“重新部署”還是“變更配置”,依然503,雖然阿裏雲容器服務控制臺顯示應用正常,其實容器列表中一個容器沒有,只能通過容器服務控制臺一個一個刪除並重新創建應用,重建後容器都起來了,多數應用恢復了正常。但發現有些跑在容器中的內部服務連不上,排查發現集群的服務發現出現了問題,解析出來的 IP 地址與實際運行的容器的 IP 地址不匹配,很可能是解析的是已經刪除的容器的 IP 。
被迫無奈,只能趕緊創建 docker swarm 集群,將那些始終無法恢復的應用先遷移過來。
直到 19:30 左右才基本恢復正常。
後來,我們將阿裏雲容器服務中的所有應用全部遷移回自建 docker swarm 集群。但在 22:35 左右,docker swarm 集群的 2 個 worker 節點宕機造成故障,當時只有 1 manger 節點 2 個 worker 節點,重啟 worker 節點後 22:45 左右恢復正常。
然後往集群中加節點,在加第 2 個 manager 節點時,出現下面的錯誤
The swarm does not have a leader. It‘s possible that too few managers are online. Make sure more than half of the managers are online.
郁悶至極,我們知道 2 個 manager 節點會出現這個問題,但我們是想從 1 個 manager 加到 3 個 manager 節點,必然要經過 2 個 manager ,就那一會就出現了集群群龍無首的問題。
在 23:15 左右再次出現故障,只能重建集群,剛建好集群不久,因為 1 個 manager 節點出現問題又出現故障,最後將這個 manager 節點退出並重新加入集群後,在 23:25 左右恢復正常。
非常抱歉,昨天下午到晚上的故障給您帶來了很大的麻煩,請您諒解!
接下來,我們將要采取的應對措施是同時部署多個自建 docker swarm 集群,掛載到同一個負載均衡下,只有所有集群全部宕機才會造成網站訪問故障。
雲計算之路-阿裏雲上-容器難容:容器服務故障以及自建 docker swarm 集群故障