很是很是抱歉!16:30 ~ 17:00 左右咱们用于跑 ASP.NET Core 站点的 docker swarm 集群再次出现宕机,由此给您带来了很大很大的麻烦,恳请您的谅解!node
受这次故障影响的站点有:博问,闪存,班级,园子,短信息,招聘,小组,网摘,新闻,openapidocker
故障的通过是这样的。数据库
一开始只是访问时偶尔出现 503 ,而后 503 逐渐增多。登陆到集群的各个节点,发现有节点 ssh 登陆响应慢,登陆进去后执行 docker 命令也慢,因而将这个节点下线并重启,可是这样操做后又有新的节点出现这个问题 。。。而后愈来愈多的节点出现这个问题,形成全面 503 。api
发现重启节点服务器不凑效,咱们当即选择了重建集群,这原本每次都管用的一招,此次居然失灵。服务器
swarm1-node1 这个节点经过 docker swarm leave --force 命令强制退出已有集群,从新建立新的集群,并只部署了 docker-proxy-flow 路由容器。ssh
docker swarm init --advertise-addr $(ip address | grep -oP "10\.[^/]+(?=/)") docker network create --driver overlay cnblogs --subnet 10.128.0.0/16 docker network create --driver overlay proxy --subnet 10.129.0.0/16 cd docker-flow-proxy ./deploy-prod.sh watch 'docker stack ps proxy'
这时没有部署其余应用容器,以避免一部署把这个节点压垮,而是将其余节点一一加入集群,可是加集群时傻眼了,出现下面的错误,没法加入。ide
# docker swarm join --token SWMTKN-1-2tzw5t53lzek5anyv163pc932zfrv1knkbzkxz9vg76uvsx5mz-3rw8fxa7sjbsf9hp55ycvmqxb 10.0.1.7:2377 Error response from daemon: rpc error: code = Unavailable desc = grpc: the connection is unavailable
更恐怖的是全部其余节点都由于一样的问题没法加入集群,无论是 manager 节点,仍是 worker 节点。阿里云
在当时情急、愧疚、慌乱、无助。。。各类情绪的混杂之下,想到了最后一招,换另一台服务器重建集群,结果一切正常,很快完成了整个集群的重建,恢复了正常。日志
用了 5 个 manager 节点,docker swarm 集群居然仍是如此不稳定,这是咱们不曾料到的。目前咱们须要先仔细分析,而后再评估接下来的应对措施。code
再次请您谅解由此给您带来的麻烦!
【更新】
1)重建集群后,今天晚上又有1个节点出现问题,问题表现是容器中 dns 解析失败,形成没法链接阿里云 RDS 数据库,引起应用访问出现 504 错误
System.Data.SqlClient.SqlException (0x80131904): A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: TCP Provider, error: 25 - Connection string is not valid) ---> System.Net.Internals.SocketExceptionFactory+ExtendedSocketException (0x00000001): Resource temporarily unavailable at System.Net.Dns.InternalGetHostByName(String hostName, Boolean includeIPv6)
将该节点下线后恢复正常。
2)在 docker 节点上发现大量的 docker 错误日志
dockerd[773]: time="2018-03-15T22:38:08.780376214+08:00" level=error msg="Failed to deserialize netlink ndmsg: Link not found"