启用EC2 Auto Recovery从故障中恢复

AWS EC2实例运行在单个AZ内,且有可能因为底层物理服务器的硬件故障,而发生中断。当物理服务器使用EBS磁盘的时候,硬件故障不会导致任何数据,只是会导致虚拟机处于停止(poweroff)即关机状态。此时,可以通过设置自动恢复功能,在正常的服务器上快速重启实例。

AWS的最佳实践是通过ELB负载均衡和Auto Scaling弹性伸缩组自动检测故障并随时拉起新的实例,这种场景下因硬件故障失去单个实例不会影响系统运行。考虑到数据完整性等原因,默认情况下自动恢复功能是不打开的。如果遇到较为特殊的场景,例如本应用不支持水平扩展,或者仅1个EC2实例,那么就需要设置自动恢复功能。

一、设置SNS主题

自动故障恢复将触发SNS主题,对外发出报警。AWS国内区域的SNS服务暂时不支持手机短信发送服务,因此本文将设置邮件报警。另外,如果进行全面对接,也可以通过API获取故障通知。

首先进入SNS服务。如下截图。

点击Create Topic。如下截图。

设置主题的名称。注意 Display name要求不能超过10个字符,且不允许有符号,只能是字母。

创建主题成功后,点击下方的创建订阅按钮。如下截图。

输入邮箱。点击创建订阅。

接下来,访问刚才订阅的邮箱。

邮箱中将收到一封发自AWS的确认邮件。在这份邮件中,还有一个确认连接,点击确认订阅按钮。如下截图。

点击邮件地址中的确认订阅连接后,浏览器会跳转到订阅成功界面。如下截图。

支持SNS配置完成。

二、设置

进入EC2界面,在EC2的清单中,找到 Alarm Status这一列,默认新创建好的EC2这里显示 None 。

点击边上的加号按钮。如下截图。

在弹出的界面上,首先从SNS Topic中选择上一步创建的SNS主题。然后选择“Take the action”,将故障恢复行为选择为“Recover this instance”。下方的时间选择上,默认为1分钟内连续2次健康状态不正常这判定为故障进行恢复。然后点击Create Alarm创建报警规则。如下截图。

创建完成。如下截图。

创建完毕之后,一开始EC2界面上的Alarm这一列会显示为“No Data”,这是正常情况,几分钟后就会显示OK。

至此创建自动恢复完成。

三、通过CloudWatch后续监控

上述自动恢复步骤,其实是创建了CloudWatch的Alarm,因此后续可以通过CloudWatch的Alarm进行管理,并查看历史信息。

进入CloudWatch,如下截图。

点击Alarms菜单。如下截图。

在CloudWatch的Alarms清单中,找到刚才配置的EC2,点击可以进入。

在这个界面下,可以看到历史数据、历史报警、状态变化等信息。如下截图。

如果需要停止这个报警,只需要在这个界面上,删除这个Alarm即可。

至此配置EC2自动恢复配置完成。