前置知识
- ECS:阿里云主机,将jar部署在上面作为一个集群的可用节点。
- 镜像:ECS运行中的一个快照,保存了当时所有落盘的文件,不包含内存数据。
- 启动模板:包含了硬件资源规格与镜像的启动配置,如果直接将镜像启动为ECS实例将使用镜像中的硬件资源配置。
- SLB:负载均衡,通过一定的策略实现流量均摊,并提供健康检查判定节点是否可用,权重0~100,请求越多分摊越均匀。
- ESS:弹性伸缩,在流量激增的情况下会根据配置的启动模板增加虚拟ECS(vEVS),并将vECS加入SLB中,默认权重是50。
- NAS:文件存储,可以将硬盘设备挂载到多个主机上共享硬盘中的文件,我们主要用于在自动生成vECS的时候将jar文件更新为最新版本。
目前情况
我们的系统中有两台手动创建的ECS里面部署了jar作为服务。这两天服务器属于同一个SLB,外网用户主要通过访问SLB的IP,然后SLB将解析HTTPS并转发请求到应用服务器上。但是这是固定的,没有弹性。当流量洪流来袭时我们的系统CPU与内存将进到达100%,用户甚至出现请求超时的异常。但是我们并不愿意直接扩充ECS,因为只有在抢购活动时系统才会难以承担,我们没必要在平时负担这些额外ECS的费用。
基于以上情况我们开始配置ESS。ESS按量计费相当划算~
问题分析
- 如何在vECS启动的同时启动服务进程?
- 如何获取最新的jar?
- 如何指定扩容策略?
- 如何指定缩容策略?
- 如何监控vECS的运行情况?
搭建流程
1.我们的镜像是ECS运行时的快照,也就是说其中包含的jar是当时的版本,所以我们在vECS启动时需要更新jar,但是如何更新呢?总不能一个一个的去修改吧。我们使用了NAS,每次jar有更新只需要将最新版本拷贝到共享硬盘中,然后镜像启动时自动去将最新jar复制到镜像中即可。然后通过java命令启动jar即可。
2.我们需要配置弹性伸缩组,并指扩容缩容的规则。
3.我们需要将弹性伸缩组与负载均衡相关联,并设置负载均衡的健康检查。
具体步骤如下:
配置扩容与缩容规则(简单规则为例)
以下脚本文件需要放在镜像中:
最终效果
以前ECS的监控情况如下:
现在ECS的监控情况如下:
弹性伸缩组会自动加入一个vECS
目的达到,继续监控,吃饭~
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。