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