AutoScaling 支持虚拟服务器组功能
AutoScaling 伸缩组可以通过配置负载均衡实例,在伸缩组扩容时,自动将扩容出来的 ECS 实例添加到负载均衡默认服务器组中,在伸缩组缩容时,自动将待移除的 ECS 实例从负载均衡默认服务器组中移除。
现在,AutoScaling 伸缩组支持配置虚拟服务器组,在伸缩组扩容时,自动将扩容出来的 ECS 实例添加到对应的负载均衡实例虚拟服务器组中,在伸缩组缩容时,自动将待移除的 ECS 实例从对应的负载均衡实例虚拟服务器组中移除。通过使用弹性伸缩组新上线的虚拟服务器组特性,您可以对伸缩组内 ECS 实例的请求转发实现更加精细化的管理。您还可以通过 AttachVServerGroups 和 DetachVServerGroups 接口,随时增加或者减少伸缩组内的虚拟服务器组。
本文将为您介绍如何通过 JAVA SDK 的方式创建带有虚拟服务器组的伸缩组,以及如何使用 AttachVServerGroups 和 DetachVServerGroups 接口来管理伸缩组内的虚拟服务器组。
负载均衡(SLB)虚拟服务器组
虚拟服务器组 (VServer group)是一组 ECS 实例的集合。虚拟服务器组允许您在监听维度上个性化定义服务器组,即负载均衡实例下的不同监听可使用不同的虚拟服务器组,可以满足域名和 URL 转发的个性化需求。
如果您没有创建虚拟服务器组,负载均衡实例会将请求按照您设置的权重和监听规则转发给所有添加到默认服务器组的后端服务器 (ECS 实例);如果您创建了虚拟服务器组,负载均衡实例会将请求按照您设置的监听规则转发给关联的虚拟服务器组,负载均衡实例对应的默认服务器组添加的后端服务器(ECS 实例)不再接收请求。
使用限制
- 虚拟服务器组只能添加监听所在地域的后端服务器。
- 一个后端服务器可以属于多个虚拟服务器组。
- 一个实例可以通过不同的端口号在同一个虚拟服务器组绑定多次。
- 弹性伸缩服务伸缩组中的虚拟服务器组的唯一性由负载均衡ID+虚拟服务器组ID+端口号确定。
关于虚拟服务器组的更多信息,您可以通过 管理虚拟服务器组 进行了解。
创建带有虚拟服务器组的伸缩组
本章将向您介绍如何使用 JAVA SDK 和 ESS控制台 来创建带有虚拟服务器组的伸缩组。
通过 ESS 控制台
首先登陆 ESS控制台 ,点击创建伸缩组按钮,弹出如下伸缩组创建界面:
选择负载均衡实例,控制台会自动为您配置当前负载均衡实例的默认服务器组,通过点击虚拟服务器组按钮,可以将负载均衡下的虚拟服务器组配置到当前伸缩组,配置虚拟服务器组时需要填写端口号(即弹性伸缩创建出来的ECS实例添加到虚拟服务器组使用的端口号)、权重(即弹性伸缩创建出来的ECS实例添加到虚拟服务器组使用的权重)信息,配置好以后点击确定即可。
伸缩组创建好以后,可以查看当前伸缩组对应的虚拟服务器组信息,如下图所示:
至此,配置有虚拟服务器组的伸缩组创建好了。
通过 JAVA SDK
导入 ESS Java SDK
首先,您需要下载 aliyun-java-sdk-core、aliyun-java-sdk-ess 两个依赖,您可以查看 maven-central 界面,搜索并下载相应的 jar 包,aliyun-java-sdk-ess 对应的 jar 包的版本号需要是 2.2.8 及以上版本才能使用虚拟服务器组特性,aliyun-java-sdk-core 推荐使用最新的版本。
您可以选择使用 maven 来管理您 Java 项目的依赖库,在您的项目对应的 pom.xml 文件中加入下面的依赖项即可:
<dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-ess</artifactId> <version>2.2.8</version> </dependency> <dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-core</artifactId> <version>3.5.0</version> </dependency>
使用 JAVA SDK 创建带有虚拟服务器组的伸缩组
导入 ESS Java SDK 到您的 Java 工程以后,您就可以创建带有虚拟服务器组的伸缩组了,代码如下:
import com.aliyuncs.DefaultAcsClient; import com.aliyuncs.IAcsClient; import com.aliyuncs.ess.model.v20140828.CreateScalingGroupRequest; import com.aliyuncs.ess.model.v20140828.CreateScalingGroupResponse; import com.aliyuncs.profile.DefaultProfile; import com.aliyuncs.profile.IClientProfile; import java.util.ArrayList; import java.util.List; public class EssSdkDemo { public static final String REGION_ID = "cn-hangzhou"; public static final String AK = "xxxxxxxxxxxxxx"; public static final String AKS = "xxxxxxxxxxxxxx"; public static void main(String[] args) throws Exception { IClientProfile clientProfile = DefaultProfile.getProfile(REGION_ID, AK, AKS); IAcsClient client = new DefaultAcsClient(clientProfile); createScalingGroupWithVServerGroup(client); } public static void createScalingGroupWithVServerGroup(IAcsClient client) throws Exception { CreateScalingGroupRequest request = new CreateScalingGroupRequest(); request.setScalingGroupName("测试虚拟服务器组"); request.setMinSize(0); request.setMaxSize(100); //伸缩组配置的交换机列表,推荐配置不同可用区下的交换机,提高伸缩组扩容成功率 List<String> vSwitchIds = new ArrayList<String>(); vSwitchIds.add("vsw-aaaaaaa"); vSwitchIds.add("vsw-bbbbbbb"); request.setVSwitchIds(vSwitchIds); //虚拟服务器组参数列表 List<CreateScalingGroupRequest.VServerGroup> vServerGroups = new ArrayList<CreateScalingGroupRequest.VServerGroup>(); //负载均衡实例 lb-aaaaaaaa 对应的虚拟服务器组列表 CreateScalingGroupRequest.VServerGroup vServerGroupA = new CreateScalingGroupRequest.VServerGroup(); vServerGroupA.setLoadBalancerId("lb-aaaaaaaa"); //虚拟服务器组属性列表参数 List<CreateScalingGroupRequest.VServerGroup.VServerGroupAttribute> vServerGroupAttributesA = new ArrayList<CreateScalingGroupRequest.VServerGroup.VServerGroupAttribute>(); //添加虚拟服务器组rsp-aaaaa,指定实例添加到虚拟服务器组的端口号为20,权重不设置,选择默认值50 CreateScalingGroupRequest.VServerGroup.VServerGroupAttribute vServerGroupAttribute1 = new CreateScalingGroupRequest.VServerGroup.VServerGroupAttribute(); vServerGroupAttribute1.setVServerGroupId("rsp-aaaaa"); vServerGroupAttribute1.setPort(20); vServerGroupAttributesA.add(vServerGroupAttribute1); //添加虚拟服务器组rsp-bbbbb,指定实例添加到虚拟服务器组的端口号为30,权重设置为100 CreateScalingGroupRequest.VServerGroup.VServerGroupAttribute vServerGroupAttribute2 = new CreateScalingGroupRequest.VServerGroup.VServerGroupAttribute(); vServerGroupAttribute2.setVServerGroupId("rsp-bbbbb"); vServerGroupAttribute2.setPort(30); vServerGroupAttribute2.setWeight(100); vServerGroupAttributesA.add(vServerGroupAttribute2); //设置虚拟服务器组属性列表 vServerGroupA.setVServerGroupAttributes(vServerGroupAttributesA); vServerGroups.add(vServerGroupA); //负载均衡实例 lb-bbbbbbbb 对应的虚拟服务器组列表 CreateScalingGroupRequest.VServerGroup vServerGroupB = new CreateScalingGroupRequest.VServerGroup(); vServerGroupB.setLoadBalancerId("lb-bbbbbbbb"); //虚拟服务器组属性列表参数 List<CreateScalingGroupRequest.VServerGroup.VServerGroupAttribute> vServerGroupAttributesB = new ArrayList<CreateScalingGroupRequest.VServerGroup.VServerGroupAttribute>(); //添加虚拟服务器组rsp-cccccc,指定实例添加到虚拟服务器组的端口号为40,权重不设置,选择默认值50 CreateScalingGroupRequest.VServerGroup.VServerGroupAttribute vServerGroupAttribute3 = new CreateScalingGroupRequest.VServerGroup.VServerGroupAttribute(); vServerGroupAttribute3.setVServerGroupId("rsp-cccccc"); vServerGroupAttribute3.setPort(40); vServerGroupAttributesB.add(vServerGroupAttribute3); //添加虚拟服务器组rsp-dddddd,指定实例添加到虚拟服务器组的端口号为50,权重不设置,选择默认值50 CreateScalingGroupRequest.VServerGroup.VServerGroupAttribute vServerGroupAttribute4 = new CreateScalingGroupRequest.VServerGroup.VServerGroupAttribute(); vServerGroupAttribute4.setVServerGroupId("rsp-dddddd"); vServerGroupAttribute4.setPort(50); vServerGroupAttributesB.add(vServerGroupAttribute4); //设置虚拟服务器组属性列表 vServerGroupB.setVServerGroupAttributes(vServerGroupAttributesB); vServerGroups.add(vServerGroupB); request.setVServerGroups(vServerGroups); CreateScalingGroupResponse response = client.getAcsResponse(request); System.out.println(response.getScalingGroupId()); } }
使用上述代码,可以创建配置了四个虚拟服务器组的伸缩组。伸缩组配置的虚拟服务器组信息如下:
-
负载均衡实例 lb-aaaaaaaa 下的虚拟服务器组
- 虚拟服务器组 rsp-aaaaa,使用的端口号为 20,权重为 50
- 虚拟服务器组 rsp-bbbbb,使用的端口号为 30,权重为 100
-
负载均衡实例 lb-bbbbbbbb 下的虚拟服务器组
- 虚拟服务器组 rsp-cccccc,使用的端口号为 40,权重为 50
- 虚拟服务器组 rsp-dddddd,使用的端口号为 50,权重为 50
当伸缩组发生扩容伸缩活动时,扩容创建出来的 ECS 实例自动添加到上述四个虚拟服务器组中,并按照伸缩组中对应的虚拟服务器组设置的端口号和权重添加 ECS 实例;当伸缩组发生缩容伸缩活动时(移出伸缩组并释放),待移出伸缩组并释放的 ECS 实例会自动从上述四个虚拟服务器组中移除。
注意:
- 上述代码中,AK、AKS、虚拟服务器组ID、负载均衡ID等参数需要您根据实际情况进行设置。
- 每个伸缩组目前支持配置 5 个虚拟服务器组(负载均衡实例ID+虚拟服务器组ID+端口号相同视为一个虚拟服务器组),如果同一个虚拟服务器组设置了不同的端口号配置到伸缩组中,则视为添加了多个虚拟服务器组
- 如果参数中同一个虚拟服务器相同的端口号设置了多次,则只取参数中最先设置的,接口会自动进行去重处理,不报错
伸缩组添加虚拟服务器组
如果伸缩组创建完成以后,您想添加虚拟服务器组到伸缩组中,可以通过使用 AttachVServerGroups 接口 或者 登陆 ESS控制台 通过修改伸缩组来实现。
通过 ESS 控制台向伸缩组添加虚拟服务器组
登录 ESS控制台,找到对应的伸缩组,点击修改伸缩组,弹出如下伸缩组修改对话框:
修改虚拟服务器组,点击确定即可。
通过 AttachVServerGroups 接口向伸缩组添加虚拟服务器组
通过 AttachVServerGroups 接口向伸缩组添加虚拟服务器组,对应的 JAVA 代码如下:
import com.aliyuncs.DefaultAcsClient; import com.aliyuncs.IAcsClient; import com.aliyuncs.ess.model.v20140828.AttachVServerGroupsRequest; import com.aliyuncs.ess.model.v20140828.AttachVServerGroupsResponse; import com.aliyuncs.profile.DefaultProfile; import com.aliyuncs.profile.IClientProfile; import java.util.ArrayList; import java.util.List; public class EssSdkDemo { public static final String REGION_ID = "cn-hangzhou"; public static final String AK = "xxxxxxxxxxxxxx"; public static final String AKS = "xxxxxxxxxxxxxx"; public static void main(String[] args) throws Exception { IClientProfile clientProfile = DefaultProfile.getProfile(REGION_ID, AK, AKS); IAcsClient client = new DefaultAcsClient(clientProfile); attachVServerGroups(client); } public static void attachVServerGroups(IAcsClient client) throws Exception { AttachVServerGroupsRequest request = new AttachVServerGroupsRequest(); request.setScalingGroupId("asg-xxxxxxxx"); request.setRegionId(REGION_ID); //待添加的虚拟服务器组列表 List<AttachVServerGroupsRequest.VServerGroup> vServerGroups = new ArrayList<AttachVServerGroupsRequest.VServerGroup>(); //负载均衡实例 lb-aaaaaa 对应的虚拟服务器组列表 AttachVServerGroupsRequest.VServerGroup vServerGroup = new AttachVServerGroupsRequest.VServerGroup(); vServerGroup.setLoadBalancerId("lb-aaaaaa"); List<AttachVServerGroupsRequest.VServerGroup.VServerGroupAttribute> vServerGroupAttributes = new ArrayList<AttachVServerGroupsRequest.VServerGroup.VServerGroupAttribute>(); AttachVServerGroupsRequest.VServerGroup.VServerGroupAttribute vServerGroupAttribute = new AttachVServerGroupsRequest.VServerGroup.VServerGroupAttribute(); vServerGroupAttribute.setVServerGroupId("rsp-aaaaaaa"); vServerGroupAttribute.setWeight(60); vServerGroupAttribute.setPort(100); vServerGroupAttributes.add(vServerGroupAttribute); vServerGroup.setVServerGroupAttributes(vServerGroupAttributes); vServerGroups.add(vServerGroup); request.setVServerGroups(vServerGroups); //true 表示将伸缩组内的ECS实例添加到虚拟服务器组中,false 表示不添加 request.setForceAttach(false); AttachVServerGroupsResponse response = client.getAcsResponse(request); System.out.println(response.getRequestId()); } }
使用上述代码,可以实现向伸缩组 asg-xxxxxxxx 内添加虚拟服务器组 rsp-aaaaaaa,虚拟服务器组使用的端口号为 60,权重为 100,虚拟服务器组所属的负载均衡实例为 lb-aaaaaa。如果 ForceAttach 参数设置为 true,表示需要将组内现存的 ECS 实例按照设置的端口号(60)和权重(100)全部添加到虚拟服务器组 rsp-aaaaaaa 后端;如果 ForceAttach 参数设置为 false,则表示不添加。
注意:
- 上述代码中,AK、AKS、虚拟服务器组ID、负载均衡ID等参数需要您根据实际情况进行设置。
- 如果请求参数中的虚拟服务器组已经在伸缩组中存在(负载均衡ID+虚拟服务器组ID+端口号都相同则认为存在),则忽略对应的虚拟服务器组+端口号,并且接口不报错
- 如果请求参数中的虚拟服务器组重复(负载均衡ID+虚拟服务器组ID+端口号都相同则认为重复),则只取参数中最先设置的,接口自动去重,并且不报错
伸缩组移除虚拟服务器组
如果伸缩组创建完成以后,您想移除伸缩组中已经配置好的虚拟服务器组,可以通过使用 DetachVServerGroups 接口 或者 登陆 ESS控制台 通过修改伸缩组来实现。
通过 ESS 控制台将虚拟服务器组从伸缩组中移除
登录 ESS控制台,找到对应的伸缩组,点击修改伸缩组,弹出如下伸缩组修改对话框:
修改虚拟服务器组,点击确定即可。
通过 DetachVServerGroups 接口将虚拟服务器组从伸缩组中移除
通过 DetachVServerGroups 接口将虚拟服务器组从伸缩组中移除,对应的 JAVA 代码如下:
import com.aliyuncs.DefaultAcsClient; import com.aliyuncs.IAcsClient; import com.aliyuncs.ess.model.v20140828.DetachVServerGroupsRequest; import com.aliyuncs.ess.model.v20140828.DetachVServerGroupsResponse; import com.aliyuncs.profile.DefaultProfile; import com.aliyuncs.profile.IClientProfile; import java.util.ArrayList; import java.util.List; public class EssSdk2Demo { public static final String REGION_ID = "cn-hangzhou"; public static final String AK = "xxxxxxxxxxxxxx"; public static final String AKS = "xxxxxxxxxxxxxx"; public static void main(String[] args) throws Exception { IClientProfile clientProfile = DefaultProfile.getProfile(REGION_ID, AK, AKS); IAcsClient client = new DefaultAcsClient(clientProfile); detachVServerGroups(client); } public static void detachVServerGroups(IAcsClient client) throws Exception { DetachVServerGroupsRequest request = new DetachVServerGroupsRequest(); request.setScalingGroupId("asg-xxxxxxxx"); request.setRegionId(REGION_ID); //待添加的虚拟服务器组列表 List<DetachVServerGroupsRequest.VServerGroup> vServerGroups = new ArrayList<DetachVServerGroupsRequest.VServerGroup>(); //负载均衡实例 lb-aaaaaa 对应的虚拟服务器组列表 DetachVServerGroupsRequest.VServerGroup vServerGroup = new DetachVServerGroupsRequest.VServerGroup(); vServerGroup.setLoadBalancerId("lb-aaaaaa"); List<DetachVServerGroupsRequest.VServerGroup.VServerGroupAttribute> vServerGroupAttributes = new ArrayList<DetachVServerGroupsRequest.VServerGroup.VServerGroupAttribute>(); DetachVServerGroupsRequest.VServerGroup.VServerGroupAttribute vServerGroupAttribute = new DetachVServerGroupsRequest.VServerGroup.VServerGroupAttribute(); vServerGroupAttribute.setVServerGroupId("rsp-aaaaaaa"); vServerGroupAttribute.setWeight(60); vServerGroupAttributes.add(vServerGroupAttribute); vServerGroup.setVServerGroupAttributes(vServerGroupAttributes); vServerGroups.add(vServerGroup); request.setVServerGroups(vServerGroups); //true 表示将伸缩组内的ECS实例从虚拟服务器组移除,false 表示不移除 request.setForceDetach(false); DetachVServerGroupsResponse response = client.getAcsResponse(request); System.out.println(response.getRequestId()); } }
使用上述代码,可以实现将伸缩组 asg-xxxxxxxx 中已经存在的端口号为 60 的虚拟服务器组 rsp-aaaaaaa 移除,虚拟服务器组所属的负载均衡实例为 lb-aaaaaa。如果 ForceDetach 参数设置为 true,表示需要将伸缩组内现存且在虚拟服务器组 rsp-aaaaaaa 中添加了的端口号为 60 的 ECS 实例从虚拟服务器组中移除;如果 ForceAttach 参数设置为 false,则表示不移除。
注意:
- 上述代码中,AK、AKS、虚拟服务器组ID、负载均衡ID等参数需要您根据实际情况进行设置。
- 如果请求参数中的虚拟服务器组在伸缩组中不存在(负载均衡ID+虚拟服务器组ID+端口号都相同则认为存在,反之为不存在),则忽略,并且接口不报错
写在最后
您可以在伸缩组中配置虚拟服务器组,对伸缩组内的 ECS 实例实现灵活的请求转发管理,并且通过 AttachVServerGroups 和 DetachVServerGroups 接口,您可以随时增加或者减少伸缩组内的虚拟服务器组,降低了虚拟服务器组与伸缩组的耦合程度,大大增加了您使用上的灵活性与实用性。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
阿里云优惠
阿里云最近又推出活动,HI拼购。其中性价比最高的2核4G5M大为热卖。 给大家贴个地址:https://www.aliyun.com/acts/hi-group-buying?spm=a2c4e.11157919.spm-topad-nav-click.1.4d3627ae6jFVZ4 活动规则 一、活动对象 阿里云官网已实名认证的注册会员用户。 二、活动时间 2019年5月14日至2020年3月31日(大型活动期间如有调整,以届时活动页面展示为准)。 三、活动规则 1、活动期间,用户通过本活动页面购买指定云产品,可享受相应的优惠折扣(以页面展示为准);购买方式包括直接购买和拼团购买两种。 2、直接购买:用户在活动页面选择相应云产品、点击直接购买并支付成功;或用户选择拼团购买方式购买,但未能在7日内完成拼团任务的,将自动转换为直接购买方式。 3、拼团购买:用户选择拼团购买方式下单购买并完成支付后,在7日内拉到1位新用户完成同款产品的购买,即视为拼团成功。拼团成功的用户(包括开团者与参团者),均可在直接购买价格(实际付现金额)的基础上,再享受8折优惠。 4、开团&参团规则: ①开...
- 下一篇
利用Rancher管理ACK集群
Rancher是企业级容器管理平台,可以支持在多个云平台上创建和管理Kubernetes集群。最近Rancher宣布了增加了对阿里云Kubernetes服务(ACK)的支持,将在19年初发布的Rancher 2.2版本里支持通过UI和API创建和管理ACK集群,详细见:https://rancher.com/press/2018-11-12-press-release-kubecon-china/ 那么在2.2发布之前,有没有办法先尝鲜一下呢?有的,现在Rancher最新的版本为2.1.1,利用导入集群的功能,可以把一个创建好的ACK集群导入到Rancher中并进行管理。下面我们就来看看怎么做。 创建ACK集群 如果你还没有阿里云Kubernetes集群,可以在阿里云控制台创建一个。点击控制台右上角的“创建Kubernetes集群“的按
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- MySQL8.0.19开启GTID主从同步CentOS8
- Hadoop3单机部署,实现最简伪集群
- CentOS8编译安装MySQL8.0.19
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Mario游戏-低调大师作品