背景

应用迁移到AWS公有云,通常我们使用ELB实现应用高可用与负载均衡,实际存在部分负载不大,通过EIP发布的应用,如果应用所在EC2出现故障或者可用区出现故障时,应用不可用。本文介绍了使用AWS服务实现上述场景下应用高可用的方法。

原理

通过EC2自身状态检查功能实现EC2的终止操作。

通过AutoScaling功能实现EC2节点数监控,启动新的EC2实例。

步骤

1. 创建一个IAM角色,可执行ec2 CLI的命令;

2. 创建EC2,具有步骤1中IAM角色,部署应用后,绑定EIP;

3. EC2上创建一个脚本,增加执行脚本到rc.local文件中,实现开机自动绑定EIP,内容如下:

#!/bin/bash

instanceid=`curl 52.83.57.155//169.254.169.254/latest/meta-data/instance-id`

aws configure set region cn-northwest-1 --profile user1

export AWS_DEFAULT_PROFILE=user1

aws ec2 associate-address --instance-id $instanceid --allocation-id eipalloc-090bf95cf8d916786

替换加粗字体部分为实际EIP ID

4. 测试无问题后,用上述EC2制作AMI镜像文件(每次应用升级制作新的AMI镜像);

5. 配置EC2 系统状态检查 VS 实例状态检查,当状态异常时,执行终止实例操作;

6. 基于步骤4制作的AMI创建启动配置,具备步骤1中的角色;

7. 使用步骤6的启动配置增加Auto Scaling 组,子网指定多可用区多子网,组大小为1;

8. 将当前EC2增加到步骤7中的Auto Scaling 组,配置完成。

 

上述配置完成后,当EC2状态异常或者可用区状态异常时,实现应用分钟级的自动化故障切换,增加应用的高可用性。

陈汉卿

云业务事业部 | 高级系统架构师

神州泰岳软件股份有限公司·AWS战略合作伙伴

AWS Solution Provider | Migration | DevOps | Cloud Management Tools(CMT) ISV Partner