背景

应用迁移到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

  1. 测试无问题后,用上述EC2制作AMI镜像文件(每次应用升级制作新的AMI镜像);
  2. 配置EC2 系统状态检查 VS 实例状态检查,当状态异常时,执行终止实例操作;
  3. 基于步骤4制作的AMI创建启动配置,具备步骤1中的角色;
  4. 使用步骤6的启动配置增加Auto Scaling 组,子网指定多可用区多子网,组大小为1;
  5. 将当前EC2增加到步骤7中的Auto Scaling 组,配置完成。

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