6

Elastic Load Balancer (ELB) 时不时会因为我的一台服务器不可用而退出。这很好——几乎没有任何干扰。

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

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

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

4

6 回答 6

5

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

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

于 2012-03-24T21:41:46.157 回答
5

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

于 2014-07-22T15:55:11.983 回答
5

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

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

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

于 2016-07-24T18:46:28.957 回答
3

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

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

于 2012-03-05T23:19:44.197 回答
3

写一个 lambda 函数!

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

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

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

于 2016-03-31T16:41:20.450 回答
0

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

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

于 2020-06-01T17:21:40.540 回答