您现在的位置是:首页 > 文章详情

运维编排场景系列-----自动从负载均衡移除停止的ECS实例

日期:2019-09-11点击:388

场景简介

挂载在负载均衡上的ECS实例,存在被意外停止的可能性,若实例意外停止后没有得到及时处理,负载均衡上一直挂载着异常状态的实例,或被动地等待负载均衡的处理异常,这种情况肯定不是我们想要的。
通过运维编排服务中事件触发器动作可对您运行中实例进行监控,一旦实例进入停止状态,则立刻进行一些逻辑处理,确保异常实例及时移除。

解决方案

  • 步骤拆分

    1. 对ECS实例通过OOS的事件触发器进行有效监控,保证实例中断事件发生后及时得到处理。
    2. 检查中断的实例是否为当前负载均衡上的,保证后续任务只针对该负载均衡上的中断实例执行。
    3. 将中断实例从负载均衡后端服务器列表移除,主动剔除问题实例。
  • 模版内容(YAML格式)
--- FormatVersion: OOS-2019-06-01 Description: Remove ECS Instance from SLB when Instance Status is Stopped. Parameters: regionId: Description: The Region Id of SLB and Instance. Type: String MinLength: 1 MaxLength: 30 OOSAssumeRole: Description: The RAM role to be assumed by OOS. Type: String Default: OOSServiceRole loadBalancerId: Description: The ID of the SLB instance. Type: String AllowedPattern: lb-[A-Za-z0-9]* MaxLength: 30 MinLength: 1 RamRole: '{{OOSAssumeRole}}' Tasks: - Name: whenInstanceStopped Action: 'ACS::EventTrigger' Properties: Product: ECS Name: - 'Instance:StateChange' Content: state: - Stopped Outputs: instanceId: ValueSelector: content.resourceId Type: String - Name: checkNeedRemoveOrNot Action: ACS::CheckFor Description: check the interrupted Instance is being added on SLB or Not. OnError: ACS::END OnSuccess: ACS::NEXT Properties: Service: SLB API: DescribeLoadBalancerAttribute Parameters: RegionId: '{{ regionId }}' LoadBalancerId: '{{ loadBalancerId }}' DesiredValues: - "{{whenInstanceStopped.instanceId}}" PropertySelector: 'BackendServers.BackendServer[].ServerId|select(.=="{{whenInstanceStopped.instanceId}}")' - Name: setEcsOnBackendServers Action: ACS::ExecuteApi Description: Sets ECS instances no weight on backend servers. Properties: Service: SLB API: SetBackendServers Parameters: RegionId: '{{ regionId }}' BackendServers: - ServerId: '{{ whenInstanceStopped.instanceId }}' Weight: 0 LoadBalancerId: '{{ loadBalancerId }}' Outputs: backendServer: Type: List ValueSelector: BackendServers.BackendServer[] - Name: removeEcsFromBackendServers Action: 'ACS::ExecuteApi' Description: Remove ECS instances to backend servers. Properties: Service: SLB API: RemoveBackendServers Parameters: RegionId: '{{ regionId }}' LoadBalancerId: '{{ loadBalancerId }}' BackendServers: - ServerId: '{{ whenInstanceStopped.instanceId }}' Weight: 0 Outputs: backendServer: Type: List ValueSelector: BackendServers.BackendServer[]

操作指南

  1. 首先登录到运维编排控制台 。
  2. 单击 自定义模版 ,单击 创建模版 。
  3. 单击 YAML 。
    将编写好的YAML格式模版内容粘贴到编辑框内,或者您也可直接在编辑框中编写该模版。1568169207698_4ab6dc1d_88f6_444e_b487_d99f98d795c1
  4. 单击 校验模版。 

    • 若模板内容已通过校验,继续下一步。
    • 若模板内容校验失败,请根据提示内容调整模版。
  5. 填写 模版名称。
    本文此处填写"remove_interrupted_instance_from_slb1" 。0cbf_4ff7_8889_831841db777a
  6. 单击 创建模版 。
    自定义模版列表中可通过模版名称快速找到该模版。
  7. 单击 创建执行 。
  8. 风险确认模式 选择 客户了解风险,无需确认 。
    e50b_4245_b9eb_2d03706cdfcc
  9. 单击 下一步,设置参数 。

    • regionId :将要操作的实例及负载均衡所在的Region。
    • loadBalancerId:当该负载均衡上有ECS实例停止时,将从该负载均衡的后端服务器列表上移除停止的ECS实例。
      44a6_4eb7_b84e_4850c4f35c3d
  10. 单击 下一步,确认创建 ,单击 创建执行 。
    执行管理中可查看刚刚创建的执行,若创建执行成功,且执行状态处于等待中,则表示ECS实例已开始被监控,一旦有该负载均衡上的ECS实例被停止,则会触发whenInstanceStopped任务后面的任务执行,该ECS实例会被自动从负载均衡上移除。c2_9b5a1526b81b
  11. 那么我们验证下,验证前,在该负载均衡上需要有一个已挂载且正常运行的ECS实例。
    _80f1_460a_b5a7_901ed479af62c04_8a27_286684d4b47b
  12. 停止负载均衡上正常运行的ECS实例。
    40c6_b042_088ba479ad2c
  13. 负载均衡挂载的ECS实例已停止。
    48_999c_2a256965119c
  14. 当该ECS实例已停止时,该模版执行中whenInstanceStopped任务下面的任务会被触发,且执行状态从等待中变为运行中,即触发了自动从负载均衡移除已停止的ECS实例。
    8cb21ab2506d
  15. 现在我们在该负载均衡服务器列表中查询该实例Id,发现服务器列表中已经没有了该台ECS实例,表示自动移除成功。
    a_4dd3_975e_fe9e9f925b8e
原文链接:https://yq.aliyun.com/articles/718195
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章