本文共 3968 字,大约阅读时间需要 13 分钟。
负载均衡(Load Balancer)是对多台云服务器进行流量分发的负载均衡服务。负载均衡可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。同样在实际的项目开发中,通过多个负载均衡,我们可以方便的实现灰度发布。
配置和管理一个负载均衡实例,主要涉及3部分的功能操作,包括:
资源编排将上述的服务抽象为下面的资源类型:
ALIYUN::SLB::LoadBalancer
ALIYUN::SLB::Listener
ALIYUN::SLB::BackendServerAttachment
ALIYUN::SLB::LoadBalancerClone
首先我们创建一个空的负载均衡,和其它的资源类型一样,我们首先创建一个JSON的模板。
根据模板定义我们可以选择付费类型为按流量和固定带宽。对于VPC类型的负载均衡需要提供相应的VpcId
和VSwitchId
即可。
{ "ROSTemplateFormatVersion": "2015-09-01", "Resources": { "CreateLoadBalancer": { "Properties": { "AddressType": "internet", "InternetChargeType": "paybytraffic", "LoadBalancerName": "createByRos" }, "Type": "ALIYUN::SLB::LoadBalancer" } }, "Outputs": { "LoadBalanceDetails": { "Value": { "Fn::GetAtt": [ "CreateLoadBalancer", "LoadBalancerId" ] } } }}
只创建一个负载均衡是不工作的,接着我们需要创建像对应的监听。在下面的例子中我们创建一个HTTP的监听,将前端的80端口映射到后端的8080端口上。
在这里我们添加了一个新的资源ALIYUN::SLB::Listener
, 基本配置和SLB的控制台类似。相比控制台的输入参数,这里抽象为了键值对,可以更加快捷方便的实现。创建的监听在生产之后将会自动启动。
{ "ROSTemplateFormatVersion": "2015-09-01", "Resources": { "LoadBalancer": { "Properties": { "AddressType": "internet", "InternetChargeType": "paybytraffic", "LoadBalancerName": "createByRos" }, "Type": "ALIYUN::SLB::LoadBalancer" }, "CreateListener": { "Type": "ALIYUN::SLB::Listener", "Properties": { "LoadBalancerId": {"Ref": "LoadBalancer"}, "ListenerPort": "80", "BackendServerPort": 8080, "Bandwidth": 1, "Protocol": "http", "HealthCheck": { "HealthyThreshold": 3, "UnhealthyThreshold": 3, "Interval": 2, "Timeout": 5, "HttpCode": "http_2xx,http_3xx,http_4xx,http_5xx" }, "Scheduler": "wrr" } }, }, "Outputs": { "LoadBalanceDetails": { "Value": { "Fn::GetAtt": [ "LoadBalancer", "LoadBalancerId" ] } } }}
最后我们挂载相对应的ECS,并设置权重。权重的范围为0-100。权重0代表着优雅的下线,将不再输入流量。
{ "ROSTemplateFormatVersion": "2015-09-01", "Parameters": { "InstanceOne": { "Description": "需要挂载的ECS的实例Id", "Type": "String" }, "InstanceTwo": { "Description": "需要挂载的ECS的实例Id", "Type": "String" }, }, "Resources": { "LoadBalancer": { "Properties": { "AddressType": "internet", "InternetChargeType": "paybytraffic", "LoadBalancerName": "createByRos" }, "Type": "ALIYUN::SLB::LoadBalancer" }, "CreateListener": { "Type": "ALIYUN::SLB::Listener", "Properties": { "LoadBalancerId": {"Ref": "LoadBalancer"}, "ListenerPort": "80", "BackendServerPort": 8080, "Bandwidth": 1, "Protocol": "http", "HealthCheck": { "HealthyThreshold": 3, "UnhealthyThreshold": 3, "Interval": 2, "Timeout": 5, "HttpCode": "http_2xx,http_3xx,http_4xx,http_5xx" }, "Scheduler": "wrr" } }, "AttachEcs": { "Type": "ALIYUN::SLB::BackendServerAttachment", "Properties": { "LoadBalancerId": {"Ref": "LoadBalancer"}, "BackendServers": [ { "ServerId": {"Ref": "InstanceOne"}, "Weight": 100 }, { "ServerId": {"Ref": "InstanceTwo"}, "Weight": 100 } ] } } }, "Outputs": { "LoadBalanceDetails": { "Value": { "Fn::GetAtt": [ "LoadBalancer", "LoadBalancerId" ] } } }}
当开发和测试完成之后,您可以通过删除资源栈,这样创建的负载均衡,监听将会被快速的删除。
通过抽象化的模板。可以把日常的挂载SLB和卸载SLB通过资源编排的模板来快速的实现,降低重复劳动,提升发布效率。
为了更加方便的简化您的操作,我们将在下篇讲解SLB的Clone。
转载地址:http://xwura.baihongyu.com/