根据目标组运行状况检查状态更改Ansible动态库存订单

时间:2020-03-12 10:18:31

标签: amazon-web-services deployment ansible devops amazon-elb

我正在尝试通过Ansible在ALB后面的AWS EC2 2节点集群上设置滚动部署。对于串行中的每个节点,大致过程都是这样的-

+----------+   +----------+   +----------+
|Remove app|   |Redeploy  |   |Add back  |
|from load |-->|new app   |-->|to load   |
|balancer  |   |          |   |balancer  |
+----------+   +----------+   +----------+

我使用Ansible动态清单来选择我的节点,默认情况下,它们是按IP地址排序的。现在,在部署之前立即考虑这4个场景-

  1. 两个节点都健康。
  2. 节点#1不健康,节点#2健康。
  3. 节点#1状况良好,而节点#2状况不正常。
  4. 两个节点都不健康。

现在在方案#3下,我最终将删除唯一的健康节点。如何避免这种情况?

2 个答案:

答案 0 :(得分:0)

在您的剧本中添加一个执行完整性检查的步骤,如果健康节点的剩余数量少于一个,则不允许您从负载均衡器中删除一个节点

研究如何首先优先从负载均衡器中删除不正常的节点。您能否按节点的健康检查状态将其分为几组,然后再处理不正常的节点?还是交替更改排序顺序,以使其通过健康检查状态而不是IP地址?

作为一种替代方法-您能否在删除旧节点之前添加新节点?

答案 1 :(得分:0)

好的,因为您有一个healthy标志,所以可以用它来扮演一个update角色:

- hosts: all
  gather_facts: yes
  tasks:
  - include_role:
      role: update
    when: not healthy
  - include_role:
      role: update
    when: healthy

这样,不健康的人就被首先处理了。