【问题标题】:How to make an EC2 instance automatically reboot when ELB says it's unavailable?当 ELB 说它不可用时,如何使 EC2 实例自动重启?
【发布时间】:2023-03-11 21:20:02
【问题描述】:

弹性负载均衡器 (ELB) 有时会因为我的一台服务器不可用而将其踢出。这很好——几乎没有任何干扰。

通常,只需通过 AWS 控制台重启实例即可解决问题。

我想让我的 EC2 实例在它变得不可用时自动重启。

最好的方法是什么? (它恰好是一个 Windows 实例,但理想情况下这无关紧要)

【问题讨论】:

    标签: amazon-ec2 amazon-web-services reboot amazon-elb


    【解决方案1】:

    我得到了一个便宜的 EC2 微型实例,并编写了一个简单的脚本,列出了我在 EC2 上的所有服务器,并对每个服务器执行 GET 以确保其正常运行。如果服务器无法正常运行,我的脚本会重新启动它。我让脚本每 10 分钟运行一次。

    如果有服务帮我做这件事会稍微容易一些,但系统很容易设置,而且微型实例很便宜。

    【讨论】:

    • 如果你的微实例崩溃了怎么办?
    • 已经发生了。现在我收到一个 Pingdom 警报。但是,理想情况下,我应该让生产服务器检查微,而微检查生产。叹息。
    • 愿意分享这个脚本吗?
    • @Mike - 这是一个 ColdFusion 脚本,我猜它对你没有多大用处。
    【解决方案2】:

    使用自动缩放组并将其设置为保留 1 个活动实例。如果您的实例崩溃,它将从预定义的实例映像中生成一个新实例。这既简单又方便。

    【讨论】:

    • 虽然这是真的,但通常重启相关实例可以解决问题,并且重启比启动新实例快...
    【解决方案3】:

    同意@agmin 的观点,lambda 函数是实现此目的的好方法。您可以配置 CloudWatch 警报以通过 SNS 主题触发 lambda 函数。

    我把这个实现放在一起,它似乎运行良好。它可以完全通过命令行进行设置和配置:

    https://github.com/jcowley/elb-instance-reboot

    【讨论】:

      【解决方案4】:

      一般来说,您应该为负载均衡器设置一个 Auto Scaling 组。 Auto Scaling 组将包含有关您的服务器配置方式的信息。例如,它将有一个 ami 和可能的用户数据文件,这将允许在没有任何用户交互的情况下对其进行配置。当您让这两个服务一起工作时,负载均衡器将终止您的失败实例并立即启动新实例。

      当您使用 Windows 实例时,您可以编写一个 powershell 脚本来配置您的服务器,并在服务器启动时使用 CloudInit.NET 来执行该脚本。脚本的最后一部分应该启用对负载平衡器的检查。

      【讨论】:

      • 这是很好的信息,但出于各种原因,我仍然希望发生简单的重启,而不是终止->新实例。
      • 您可以尝试使用新的 ec2-describe-instance-status 命令并编写一个脚本,该脚本将在实例关闭时重新启动。此脚本还需要将实例添加回负载均衡器。很容易写的脚本。脚本完成后,将其放入 crontab 中,只要运行它的机器正常工作,它就会工作。 aws.typepad.com/aws/2012/01/ec2-instance-status-checks.html
      【解决方案5】:

      写一个 lambda 函数!

      它比运行微型实例更便宜,您可以将其设置为以任何您喜欢的时间间隔运行。您还可以通过它获得 CloudWatch 监控,因此您无需担心单独检查微实例的运行状况。

      我正在使用 ElasticBeanstalk,它提供 describeInstancesHealth 端点。或者,您可以使用 ec2 的 describeInstanceStatus 端点。

      然后,如果您检测到错误的实例,ec2 的rebootInstances 让您重新启动一个或多个实例。

      【讨论】:

        【解决方案6】:

        您可以通过 CloudWatch 警报自动执行此操作。当由于实例死机而触发警报时,您可以让警报执行的操作之一是重新启动实例。无需花时间制作 lambda 或让微实例为您处理。

        https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/UsingAlarmActions.html#AddingRebootActions

        【讨论】:

          猜你喜欢
          • 2019-12-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-07-15
          • 2021-11-15
          • 1970-01-01
          • 1970-01-01
          • 2010-10-12
          相关资源
          最近更新 更多