Elastic Load Balancer (ELB) 时不时会因为我的一台服务器不可用而退出。这很好——几乎没有任何干扰。
通常,只需通过 AWS 控制台重启实例即可解决问题。
我想让我的 EC2 实例在它变得不可用时自动重启。
最好的方法是什么?(它恰好是一个 Windows 实例,但理想情况下这无关紧要)
Elastic Load Balancer (ELB) 时不时会因为我的一台服务器不可用而退出。这很好——几乎没有任何干扰。
通常,只需通过 AWS 控制台重启实例即可解决问题。
我想让我的 EC2 实例在它变得不可用时自动重启。
最好的方法是什么?(它恰好是一个 Windows 实例,但理想情况下这无关紧要)
我得到了一个便宜的 EC2 微型实例,并编写了一个简单的脚本,列出了我在 EC2 上的所有服务器,并对每个服务器执行 GET 以确保其正常运行。如果服务器无法正常运行,我的脚本会重新启动它。我让脚本每 10 分钟运行一次。
如果有服务可以为我做这件事会稍微容易一些,但是系统很容易设置并且微型实例很便宜。
使用自动缩放组并将其设置为保留 1 个活动实例。如果您的实例崩溃,它将从预定义的实例映像中生成一个新实例。这既简单又方便。
同意@agmin 的观点,lambda 函数是一种很好的方法。您可以配置 CloudWatch 警报以通过 SNS 主题触发 lambda 函数。
我把这个实现放在一起,它似乎运行良好。它可以完全通过命令行进行设置和配置:
一般来说,您应该使用 Auto Scaling 组设置负载均衡器。Auto Scaling 组将包含有关如何配置服务器的信息。例如,它将有一个 ami 和可能的用户数据文件,这将允许在没有任何用户交互的情况下对其进行配置。当您让这两个服务一起工作时,负载均衡器将终止您的失败实例并立即启动新实例。
看到您使用的是 Windows 实例,您可以编写一个 powershell 脚本来配置您的服务器,并在服务器启动时使用 CloudInit.NET 来执行该脚本。脚本的最后一部分应该启用对负载均衡器的检查。
写一个 lambda 函数!
它比运行微型实例便宜,您可以将其设置为以您想要的任何时间间隔运行。您还可以通过它获得 CloudWatch 监控,因此您无需担心单独检查微实例的运行状况。
我正在使用提供describeInstancesHealth
端点的 ElasticBeanstalk。或者,您可以使用 ec2 的describeInstanceStatus
端点。
然后,如果您检测到错误的实例,ec2rebootInstances
会让您重新启动一个或多个实例。
您可以通过 CloudWatch 警报自动执行此操作。当由于实例死机而触发警报时,您可以让警报执行的操作之一是重新启动实例。无需花时间制作 lambda 或让微实例为您处理。