今天傍晚 17:38-18:18 左右,由於 docker swarm 集群出現 "The swarm does not have a leader" 問題,造成博問、閃存、園子、小組、openapi 無法正常訪問,由此給您帶來麻煩,請您諒解。
目前我們已經遷移至 asp.net core 的站點都部署在 docker swarm 集群上,節點用的是阿里雲服務器,操作系統是 ubtunu 16.04 ,docker engine 版本是 17.06.0-ce, build 02c1d87 。
今天出故障期間,我們在進行節點變更的操作。操作前集群只有 3 個 manager 節點,沒有 worker 節點,變更的目標是調整為 5 個節點,其中 3 個 manager ,2 個 worker ,變更的方式是減 1 個節點加 3 個節點(這 3 台服務器配置高,需要升級為 manager)。
具體的變更操作是這樣的,第 1 個操作是 docker node demote node1 將已有的一個 manager 節點降級為 worker , docker swarm leave 退出集群, docker node rm node1 移除節點,這個節點是減掉的那個節點。然后,新增的服務器直接 docker swarm join --token manager_token 加為 manager 節點。第 1 個操作正常完成。
第 2 個操作的開始幾步與與第 1 個操作一樣,manager 降級為 worker -> 退出集群 -> 移除節點,但接着這台服務器修改主機名后又加入集群成為 worker 節點,然后新增的另外 1 台服務器以 manager 節點身份加入集群,而問題就出現在這台服務器加入集群之后。
出問題時,在任何 manager 節點上執行 docker node ls 命令都會出現下面的錯誤:
Error response from daemon: rpc error: code = 2 desc = 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
此時集群上運行的站點全部無法訪問,重啟所有節點后,問題依舊。。。后來實在找不到解決方法,只能重建 docker swarm 集群並重新部署應用,恢復正常。
有人在亞馬遜 AWS EC2 上部署 docker swarm 集群上遇到了類似的問題 (詳見 stack deploy causes nodes to randomly fail health checks making the stack unusable ),后來 docker 針對這個問題出了 Docker for AWS 的修復更新。從我們遇到的問題看,可能 docker 還沒有真正修復這個問題。