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 集群故障的更多相关文章

  1. 云计算之路-阿里云上-容器难容:自建docker swarm集群遭遇无法解决的问题

    我们从今年6月开始在生产环境进行 docker 容器化部署,将已经迁移至 ASP.NET Core 的站点部署到 docker swarm 集群上.开始我们选用的阿里云容器服务,但是在使用过程中我们遭 ...

  2. 云计算之路-阿里云上:从ASP.NET线程角度对“黑色30秒”问题的全新分析

    在这篇博文中,我们抛开对阿里云的怀疑,完全从ASP.NET的角度进行分析,看能不能找到针对问题现象的更合理的解释. “黑色30秒”问题现象的主要特征是:排队的请求(Requests Queued)突增 ...

  3. 云计算之路-阿里云上:Web服务器遭遇奇怪的“黑色30秒”问题

    今天下午访问高峰的时候,主站的Web服务器出现奇怪的问题,开始是2台8核8G的云服务器(ECS),后来又加了1台8核8G的云服务器,问题依旧. 而且3台服务器特地使用了不同的配置:1台是禁用了虚拟内存 ...

  4. 云计算之路-阿里云上-新发现:又一种与虚拟内存有关的CPU波动情况

    在云上真是无奇不有,昨天偶然间发现在IIS的应用程序池回收设置中,仅仅设置了一下基于虚拟内存限制的回收,就引发了CPU有规律的波动.在这篇博文中,我们将向大家汇报一下云计算之路上的这个小发现. 在之前 ...

  5. 云计算之路-阿里云上:启用Windows虚拟内存引发的CPU 100%故障

    今天上午11:35~11:40左右,由于负载均衡中的两台云服务器CPU占用突然飚至100%,造成网站5分钟左右不能正常访问,请大家带来了麻烦,请谅解! (上图中红色曲线表示CPU占用) 经过分析,我们 ...

  6. 云计算之路-阿里云上:SLB会话保持的一个坑

    冒着被大家厌烦的风险,今天再发一篇“云计算之路-阿里云上”.这是在前一篇发过之后真实发生的事情,我们觉得定位问题的过程值得分享.而且估计园子里不少朋友被这个问题骚扰过,我们有责任让大家知道问题的真正原 ...

  7. 云计算之路-阿里云上:原来“黑色0.1秒”发生在socket读取数据时

    在昨天的博文(云计算之路-阿里云上:读取缓存时的“黑色0.1秒”)中我们犯了一个很低级的错误——把13ms算成了130ms(感谢陈硕发现这个错误!),从而对问题的原因作出了错误的推断,望大家谅解! 从 ...

  8. 云计算之路-阿里云上:禁用Windows虚拟内存引发的重启

    昨天(2013年8月6日)下午,承载www.cnblogs.com主站的两台云服务器分别自动重启了1次,由于这两台云服务器使用了负载均衡(SLB),重启并未影响网站的正常访问. 与这次重启相关的Win ...

  9. 云计算之路-阿里云上:OCS问题的进展以及11:30-11:50遇到的问题

    (上图是今天出问题期间Web服务器性能监控图,紫色表示的是Request Execution Time) 昨天我们发布了一篇博客分享了我们这两天遇到的OCS(开放缓存服务)问题,详见云计算之路-阿里云 ...

随机推荐

  1. .Net 4.X 提前用上 .Net Core 的配置模式以及热重载配置

    1. 前言 在提倡微服务及 Serverless 越来越普及的当下,在 .Net Core 之前,.Net 应用的配置模式往往依赖于一个名为 web.config 的 XML 文件,耦合性高,而可扩展 ...

  2. BFS学习 Codeforces 301_div.2_Ice Cave

    C. Ice Cave time limit per test 2 seconds memory limit per test 256 megabytes input standard input o ...

  3. class-提升方法Boosting

    1 AdaBoost算法2 AdaBoost训练误差分析3 AdaBoost algorithm 另外的解释3.1 前向分步算法3.2 前向分步算法与AdaBoost4 提升树4.1 提升树模型4.2 ...

  4. iOS - GATT Profile 简介

    1.引言 现在低功耗蓝牙(BLE)连接都是建立在 GATT (Generic Attribute Profile) 协议之上.GATT 是一个在蓝牙连接之上的发送和接收很短的数据段的通用规范,这些很短 ...

  5. jQuery对象与js对象互相转换

    两种转换方式将一个jQuery对象转换成js对象:[index]和.get(index); (1)jQuery对象是一个数据对象,可以通过[index]的方法,来得到相应的js对象. 如:var $v ...

  6. 反射(C#编程)

    反射提供了封装程序集.模块和类型的对象(Type 类型).可以使用反射动态创建类型的实例,将类型绑定到现有对象,或从现有对象获取类型并调用其方法或访问其字段和属性.如果代码中使用了属性,可以利用反射对 ...

  7. java线程安全问题以及使用synchronized解决线程安全问题的几种方式

    一.线程安全问题 1.产生原因 我们使用java多线程的时候,最让我们头疼的莫过于多线程引起的线程安全问题,那么线程安全问题到底是如何产生的呢?究其本质,是因为多条线程操作同一数据的过程中,破坏了数据 ...

  8. 【BZOJ1076】奖励关(动态规划,数学期望)

    [BZOJ1076]奖励关(动态规划,数学期望) 题面 懒,粘地址 题解 我也是看了题解才会做 看着数据范围,很容易想到状压 然后,设\(f[i][j]\)表示当前第\(i\)轮,状态为\(j\)的期 ...

  9. [BZOJ4198] [Noi2015] 荷马史诗 (贪心)

    Description 追逐影子的人,自己就是影子. ——荷马   Allison 最近迷上了文学.她喜欢在一个慵懒的午后,细细地品上一杯卡布奇诺,静静地阅读她爱不释手的<荷马史诗>.但是 ...

  10. linux系统基础优化16条知识汇总

    优化的总结: 1.不用root管理,以普通用户的名义通过sudo授权管理. 2.更改默认的远程连接SSH服务端口,禁止root用户远程连接,甚至 要更改只监听内网IP. 3.定时自动更新服务区时间,使 ...