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

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
EMR Serverless StarRocks,5000CU*H 48000GB*H
应用型负载均衡 ALB,每月750个小时 15LCU
简介: 挂载在负载均衡上的ECS实例,存在被意外停止的可能性,若实例意外停止后没有得到及时处理,负载均衡上一直挂载着异常状态的实例,或被动地等待负载均衡的处理异常,这种情况肯定不是我们想要的。 通过运维编排服务中事件触发器动作可对您运行中实例进行监控,一旦实例进入停止状态,则立刻进行一些逻辑处理,确保异常实例及时移除。

场景简介

挂载在负载均衡上的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
相关实践学习
借助OSS搭建在线教育视频课程分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个在线教育视频课程分享网站。
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
22天前
|
运维 负载均衡 应用服务中间件
自动化运维:使用Ansible进行服务器配置管理
【9月更文挑战第34天】在现代IT运维工作中,自动化已成为提升效率、减少错误的关键。本文将介绍如何使用Ansible这一强大的自动化工具来简化和加速服务器的配置管理工作。我们将通过实际案例展示如何利用Ansible的Playbooks来自动化常见任务,并讨论其对提高运维团队工作效率的影响。
|
21天前
|
运维 应用服务中间件 网络安全
自动化运维:使用Ansible进行批量服务器配置
【9月更文挑战第35天】在现代IT基础设施管理中,高效、可扩展的自动化工具是提升工作效率的关键。本文将引导您了解如何使用Ansible这一强大的自动化工具来简化和加速服务器的配置过程,确保一致性和可靠性的同时减少人为错误。通过实际案例,我们将展示如何编写Ansible Playbook以实现批量服务器配置,从而让您能够更加轻松地管理和维护您的服务器群。
|
2天前
|
运维 负载均衡 安全
自动化运维:使用Ansible进行服务器配置管理
【10月更文挑战第15天】在本文中,我们将探讨如何利用Ansible这一强大的自动化工具来简化和加速服务器的配置管理工作。通过实际案例和代码示例,我们将展示Ansible如何帮助运维人员高效地进行软件部署、系统更新和日常维护任务,从而提升工作效率并减少人为错误。
|
8天前
|
运维 Java Linux
【运维基础知识】Linux服务器下手写启停Java程序脚本start.sh stop.sh及详细说明
### 启动Java程序脚本 `start.sh` 此脚本用于启动一个Java程序,设置JVM字符集为GBK,最大堆内存为3000M,并将程序的日志输出到`output.log`文件中,同时在后台运行。 ### 停止Java程序脚本 `stop.sh` 此脚本用于停止指定名称的服务(如`QuoteServer`),通过查找并终止该服务的Java进程,输出操作结果以确认是否成功。
14 1
|
15天前
|
弹性计算 负载均衡 算法
负载均衡如何帮助阿里云国际服务器搭建的网站或应用程序?
负载均衡如何帮助阿里云国际服务器搭建的网站或应用程序?
|
15天前
|
运维 应用服务中间件 Linux
自动化运维:使用Ansible管理服务器配置
【10月更文挑战第2天】在现代IT运维中,自动化是提高效率和减少错误的关键。本文将介绍如何使用Ansible这一强大的自动化工具来简化日常的服务器管理工作。我们将从基础讲起,逐步深入到高级应用,展示如何通过编写简单的Playbooks来自动化复杂的配置任务。文章还将探讨Ansible的最佳实践,并分享一些实际案例来说明其在实际工作中的应用。
|
14天前
|
存储 数据采集 分布式计算
Hadoop-17 Flume 介绍与环境配置 实机云服务器测试 分布式日志信息收集 海量数据 实时采集引擎 Source Channel Sink 串行复制负载均衡
Hadoop-17 Flume 介绍与环境配置 实机云服务器测试 分布式日志信息收集 海量数据 实时采集引擎 Source Channel Sink 串行复制负载均衡
32 1
|
18天前
|
运维 应用服务中间件 nginx
自动化运维:使用Ansible管理服务器
【8月更文挑战第70天】随着互联网技术的飞速发展,服务器的数量和复杂性也在日益增加。如何高效、准确地管理这些服务器,成为了每一个运维人员必须面对的问题。本文将介绍如何使用Ansible这个开源的IT自动化工具,来帮助我们更好地管理服务器。Ansible以其简洁的语法、强大的功能和易于上手的特性,成为了运维人员的好帮手。我们将通过一些实际的例子,来看看Ansible是如何工作的。
|
27天前
|
存储 运维 Ubuntu
自动化运维:使用Ansible管理服务器
【8月更文挑战第61天】本文将介绍如何使用Ansible工具进行服务器的自动化管理。我们将从基础概念开始,逐步深入到实际的应用案例,最后通过代码示例展示如何实现自动化部署和配置管理。无论你是初学者还是有经验的运维工程师,这篇文章都会为你提供有价值的参考。
|
9天前
|
Web App开发 运维 安全
1Panel:一个现代化、开源的 Linux 服务器运维管理面板
1Panel:一个现代化、开源的 Linux 服务器运维管理面板