转载

阿里云——如何实现系统自动扩容

前置知识

  1. ECS:阿里云主机,将jar部署在上面作为一个集群的可用节点。
  2. 镜像:ECS运行中的一个快照,保存了当时所有落盘的文件,不包含内存数据。
  3. 启动模板:包含了硬件资源规格与镜像的启动配置,如果直接将镜像启动为ECS实例将使用镜像中的硬件资源配置。
  4. SLB:负载均衡,通过一定的策略实现流量均摊,并提供健康检查判定节点是否可用,权重0~100,请求越多分摊越均匀。
  5. ESS:弹性伸缩,在流量激增的情况下会根据配置的启动模板增加虚拟ECS(vEVS),并将vECS加入SLB中,默认权重是50。
  6. NAS:文件存储,可以将硬盘设备挂载到多个主机上共享硬盘中的文件,我们主要用于在自动生成vECS的时候将jar文件更新为最新版本。

目前情况

我们的系统中有两台手动创建的ECS里面部署了jar作为服务。这两天服务器属于同一个SLB,外网用户主要通过访问SLB的IP,然后SLB将解析HTTPS并转发请求到应用服务器上。 但是这是固定的,没有弹性。当流量洪流来袭时我们的系统CPU与内存将进到达100%,用户甚至出现请求超时的异常。但是我们并不愿意直接扩充ECS,因为只有在抢购活动时系统才会难以承担,我们没必要在平时负担这些额外ECS的费用

基于以上情况我们开始配置ESS。ESS按量计费相当划算~

问题分析

  1. 如何在vECS启动的同时启动服务进程?
  2. 如何获取最新的jar?
  3. 如何指定扩容策略?
  4. 如何指定缩容策略?
  5. 如何监控vECS的运行情况?

搭建流程

1.我们的镜像是ECS运行时的快照,也就是说其中包含的jar是当时的版本,所以我们在vECS启动时需要更新jar,但是如何更新呢?总不能一个一个的去修改吧。我们使用了NAS,每次jar有更新只需要将最新版本拷贝到共享硬盘中,然后镜像启动时自动去将最新jar复制到镜像中即可。然后通过java命令启动jar即可。

2.我们需要配置弹性伸缩组,并指扩容缩容的规则。

3.我们需要将弹性伸缩组与负载均衡相关联,并设置负载均衡的健康检查。

具体步骤如下:

阿里云——如何实现系统自动扩容

阿里云——如何实现系统自动扩容

阿里云——如何实现系统自动扩容

阿里云——如何实现系统自动扩容

配置扩容与缩容规则(简单规则为例)

阿里云——如何实现系统自动扩容

阿里云——如何实现系统自动扩容

以下脚本文件需要放在镜像中:

阿里云——如何实现系统自动扩容

阿里云——如何实现系统自动扩容

最终效果

以前ECS的监控情况如下:

阿里云——如何实现系统自动扩容

现在ECS的监控情况如下:

阿里云——如何实现系统自动扩容

弹性伸缩组会自动加入一个vECS

阿里云——如何实现系统自动扩容

目的达到,继续监控,吃饭~

原文  https://segmentfault.com/a/1190000022031040
正文到此结束
Loading...