AWS Elastic Load Balancing, Amazon CloudWatch and Auto Scaling

AWS Elastic Load Balancing

  1. Application load balance, 面向应用,外部:internet,内部:internal
    1. internet-facing (http/https)
    2. internal
  2. Network load balance,面向网络,TCP,TLS
    1. 最好将Load Balance的DNS暴露给外部,而不是IP地址,因为AWS可能会自动切换IP
  3. Https Load Balancer
    1. 在Load Balancer上安装一个证书,由于ELB不支持Server Name Indication(SNI),因此如果需要用一个证书管理多个instance,就需要在证书里为每个instance添加Subject Alternative Name(SAN)
  4. Listeners
    1. 创建ELB的时候需要指定一个协议和端口,用于创建监听器,监听器用于监听外部访问的请求。支持协议:HTTP/HTTPS/TCP/TLS/SSL。HTTP/HTTPS是在应用层控制负载均衡,TCP/TLS/SSL是在传输控制层控制负载均衡的。
  5. Idle Connection Timeout
    1. 空闲连接超时,默认60s,如果在这个时间段没有请求,ELB会中断连接
  6. Cross-Zone Load Balancing
    1. 跨Zone的ELB,建议开启以提高高可用
  7. Connection Draining
    1. 连接消除,建议打开,如果发现有不健康的instace,ELB会停止将新请求发送到这些ELB,当会等待已经发过去的request,如果在300s之内发过去的请求还是没有响应,则close connection
  8. Proxy Protocol
    1. 代理协议,如果使用了proxy,会在header中增加一些额外的信息,如source IP,destIP,port等,这些信息会发送到instance
  9. Sticky Session
    1. 解决session共享问题,通过增加Cookie AWSELB来指向某个固定的instance。
    2. 最好还是通过session服务器来解决session共享问题
  10. Health Check
    1. 可通过ping,connection attempt或一个page来检查instance健康状况,如果通过检测,instance状态为InService,否则为OutOfService。
  11. Instance升级
    1. 如果某些instance运行在ELB后面,可以先deregister某个instance,再升级,再register到ELB以完成instance升级
  12. Target Group
    1. 目标组,表示哪些instance可以处理来自ELB的请求。可以通过名称,IP段指定instance。

Amazon CloudWatch

  1. CloudWatch用于实时监控大部分AWS资源,如AutoScaling,EC2 CPU,EC2 Disk,EC2 network,ECS,Amazon ElasticCache,etc。可以收集原始数据(metrics),创建和告警和发送通知。注意的是不能监控EC2的内存使用情况。
  2. 收集数据的两种模式
    1. 基本模式:免费,每5分钟发送一次数据
    2. 详细模式:额外收费,每分钟发送一次数据
  3. CloudWatch有很多预定义的metrics,用户也可以以自定义metrics,然后通过API put到CloudWatch,用于监控自定义的数据指标。
  4. Amazon CloudWatch Logs
    1. 监控,存储和访问EC2,CloudTrail等资源的log,检查log中的error,warning或特殊字符串等是否达到预定的阈值,然后发出告警或通知用户,也支持将log存储在S3或Glacier。
  5. Amazon CloudWatch Logs agent
    1. 需要安装这个agent到EC2 instance,安装后可以自动发送log到Amazon CloudWatch Logs,而不需要太多额外的配置。
  6. 限制
    1. 每个账号限制5000个alarm
    2. metrics数据默认保留2周,如果需要保存更久,需要copy到S3或Glacier

Auto Scaling

  1. 通过定义一些规则来自动scale out或scale in EC2,例如,当外部请求非常多的时候,自动增加EC2 instance,当请求非常少时,自动减少instance。
  2. Scaling Plans
    1. Maintain Current Instance Levels,保持当前状态,一直保留最小或自定义instance数量,当AWS检查到有unhealth的instance,则会将其移除,然后创建一个新的instance。
    2. Manual Scaling,手动扩展,在需要的时候手动扩展instance数量,最灵活
    3. Scheduled Scaling,定时扩展,如果能预期某个时间段会有大的或小的请求,则可以定期scaling
    4. Dynamic Scaling,自动扩展,当某个指标如CPU,网络,Disk等超过阈值时,自动Scaling
  3. Auto Scaling组件
    1. Launch Configuration,启动组,用于配置instance基本属性,例如启动组名称,AMI,Instance Type,Security Group,Instance Key pair等。每个region默认可创建100 个Launch Configureation
    2. Auto Scaling Group,自动扩展组,用于关联启动组,扩展策略,CloudWath Alarm,Load Balance等。AWS Auto Scaling的基本管理单元。需要指定最少instance数量,最多instance数量,也可以指定desired instance数量,如果没指定,则取最小instance数量为desired数量。Auto Scaling Group一般是跨AZ的,所以需要指定多个AZ。可以使用on-demand或spot instance。
    3. Scaling Policy,Scaling策略,如何scaling,启动新的instace,还是删除instance,等。
  4. 自动扩展流程
    1. Auto Scaling可以关联CloudWatch Alarm,如果CloudWatch Alarm发出来alarm到Auto Scaling Group,那么Auto Scaling Group就会启动对应的Saling Policy来扩展instance
    2. Scale out quickly,scale in slowly。

AWS Elastic Load Balancing, Amazon CloudWatch and Auto Scaling 结合使用

  1. AWS Elastic Load Balancing, Amazon CloudWatch and Auto Scaling的结合使用,可以提高系统的HA,high performance等
  2. 如下图:
    1. 最上面是ELB,用于统一的请求入口,ELB的请求会forward到下层ASG中的Instance
    2. 中间是Auto Scaling Group,跨两个AZ,提高HA
    3. ASG关联了CloudWatch中的某个alarm,如果发现CPU利用率超过了75%,则CloudWatch会将消息发送到ASG
    4. ASG收到CloudWatch的消息后,会启动相应的Scaling policy,找到Launch Configuration,创建新的Instance,或者terminate instance

AWS Elastic Load Balancing, Amazon CloudWatch and Auto Scaling