AWS Elastic Load Balancing, Amazon CloudWatch and Auto Scaling
AWS Elastic Load Balancing
- Application load balance, 面向应用,外部:internet,内部:internal
- internet-facing (http/https)
- internal
- Network load balance,面向网络,TCP,TLS
- 最好将Load Balance的DNS暴露给外部,而不是IP地址,因为AWS可能会自动切换IP
- Https Load Balancer
- 在Load Balancer上安装一个证书,由于ELB不支持Server Name Indication(SNI),因此如果需要用一个证书管理多个instance,就需要在证书里为每个instance添加Subject Alternative Name(SAN)
- Listeners
- 创建ELB的时候需要指定一个协议和端口,用于创建监听器,监听器用于监听外部访问的请求。支持协议:HTTP/HTTPS/TCP/TLS/SSL。HTTP/HTTPS是在应用层控制负载均衡,TCP/TLS/SSL是在传输控制层控制负载均衡的。
- Idle Connection Timeout
- 空闲连接超时,默认60s,如果在这个时间段没有请求,ELB会中断连接
- Cross-Zone Load Balancing
- 跨Zone的ELB,建议开启以提高高可用
- Connection Draining
- 连接消除,建议打开,如果发现有不健康的instace,ELB会停止将新请求发送到这些ELB,当会等待已经发过去的request,如果在300s之内发过去的请求还是没有响应,则close connection
- Proxy Protocol
- 代理协议,如果使用了proxy,会在header中增加一些额外的信息,如source IP,destIP,port等,这些信息会发送到instance
- Sticky Session
- 解决session共享问题,通过增加Cookie AWSELB来指向某个固定的instance。
- 最好还是通过session服务器来解决session共享问题
- Health Check
- 可通过ping,connection attempt或一个page来检查instance健康状况,如果通过检测,instance状态为InService,否则为OutOfService。
- Instance升级
- 如果某些instance运行在ELB后面,可以先deregister某个instance,再升级,再register到ELB以完成instance升级
- Target Group
- 目标组,表示哪些instance可以处理来自ELB的请求。可以通过名称,IP段指定instance。
Amazon CloudWatch
- CloudWatch用于实时监控大部分AWS资源,如AutoScaling,EC2 CPU,EC2 Disk,EC2 network,ECS,Amazon ElasticCache,etc。可以收集原始数据(metrics),创建和告警和发送通知。注意的是不能监控EC2的内存使用情况。
- 收集数据的两种模式
- 基本模式:免费,每5分钟发送一次数据
- 详细模式:额外收费,每分钟发送一次数据
- CloudWatch有很多预定义的metrics,用户也可以以自定义metrics,然后通过API put到CloudWatch,用于监控自定义的数据指标。
- Amazon CloudWatch Logs
- 监控,存储和访问EC2,CloudTrail等资源的log,检查log中的error,warning或特殊字符串等是否达到预定的阈值,然后发出告警或通知用户,也支持将log存储在S3或Glacier。
- Amazon CloudWatch Logs agent
- 需要安装这个agent到EC2 instance,安装后可以自动发送log到Amazon CloudWatch Logs,而不需要太多额外的配置。
- 限制
- 每个账号限制5000个alarm
- metrics数据默认保留2周,如果需要保存更久,需要copy到S3或Glacier
Auto Scaling
- 通过定义一些规则来自动scale out或scale in EC2,例如,当外部请求非常多的时候,自动增加EC2 instance,当请求非常少时,自动减少instance。
- Scaling Plans
- Maintain Current Instance Levels,保持当前状态,一直保留最小或自定义instance数量,当AWS检查到有unhealth的instance,则会将其移除,然后创建一个新的instance。
- Manual Scaling,手动扩展,在需要的时候手动扩展instance数量,最灵活
- Scheduled Scaling,定时扩展,如果能预期某个时间段会有大的或小的请求,则可以定期scaling
- Dynamic Scaling,自动扩展,当某个指标如CPU,网络,Disk等超过阈值时,自动Scaling
- Auto Scaling组件
- Launch Configuration,启动组,用于配置instance基本属性,例如启动组名称,AMI,Instance Type,Security Group,Instance Key pair等。每个region默认可创建100 个Launch Configureation
- 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。
- Scaling Policy,Scaling策略,如何scaling,启动新的instace,还是删除instance,等。
- 自动扩展流程
- Auto Scaling可以关联CloudWatch Alarm,如果CloudWatch Alarm发出来alarm到Auto Scaling Group,那么Auto Scaling Group就会启动对应的Saling Policy来扩展instance
- Scale out quickly,scale in slowly。
AWS Elastic Load Balancing, Amazon CloudWatch and Auto Scaling 结合使用
- AWS Elastic Load Balancing, Amazon CloudWatch and Auto Scaling的结合使用,可以提高系统的HA,high performance等
- 如下图:
- 最上面是ELB,用于统一的请求入口,ELB的请求会forward到下层ASG中的Instance
- 中间是Auto Scaling Group,跨两个AZ,提高HA
- ASG关联了CloudWatch中的某个alarm,如果发现CPU利用率超过了75%,则CloudWatch会将消息发送到ASG
- ASG收到CloudWatch的消息后,会启动相应的Scaling policy,找到Launch Configuration,创建新的Instance,或者terminate instance