通過資源編排快速的構建負載均衡(SLB)
負載均衡(Load Balancer)是對多臺雲伺服器進行流量分發的負載均衡服務。負載均衡可以通過流量分發擴充套件應用系統對外的服務能力,通過消除單點故障提升應用系統的可用性。同樣在實際的專案開發中,通過多個負載均衡,我們可以方便的實現灰度釋出。
資源編排的負載均衡功能介紹
配置和管理一個負載均衡例項,主要涉及3部分的功能操作,包括:
- 負載均衡例項屬性配置:通過例項屬性配置來定義一個負載均衡例項的型別
- 負載均衡服務監聽配置:通過服務監聽配置來定義一個負載均衡例項的各項策略和轉發規則
- 負載均衡後端伺服器配置:通過後端伺服器配置來定義一個負載均衡例項後端用來處理使用者請求的多個ECS例項
資源編排將上述的服務抽象為下面的資源型別:
-
ALIYUN::SLB::LoadBalancer
-
ALIYUN::SLB::Listener
-
ALIYUN::SLB::BackendServerAttachment
-
ALIYUN::SLB::LoadBalancerClone
- 深度複製一個SLB,包括監聽規則和狀態,這個在另外的文章專門介紹。
負載均衡的實踐
首先我們建立一個空的負載均衡,和其它的資源型別一樣,我們首先建立一個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資源
最後我們掛載相對應的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。
相關文章
- 什麼是負載均衡–SLB負載
- 構建api gateway之 負載均衡APIGateway負載
- 負載均衡-構建CDN服務負載
- 伺服器負載均衡(Server Load Balance,SLB)伺服器負載Server
- ECS進階Day03:SLB負載均衡實踐負載
- 通過nginx進行udp報文負載均衡NginxUDP負載
- 最佳實踐:負載均衡SLB支援自定義VPC例項IP地址負載
- 負載均衡排程演算法大全負載演算法
- nginx負載均衡原理分析到手動編寫簡易負載均衡器Nginx負載
- LB 負載均衡的層次結構負載
- 阿里雲SLB負載均衡實踐,解決高併發響應慢阿里負載
- 上雲培訓課程:深入雲伺服器ECS和負載均衡SLB伺服器負載
- 負載均衡負載
- RabbitMQ(四):使用Docker構建RabbitMQ高可用負載均衡叢集MQDocker負載
- 大型網站--負載均衡架構網站負載架構
- 通過字串構建查詢圖片資源ID字串
- 開源負載均衡通訊分發器(LB dispatcher) - G5負載
- gRPC負載均衡(客戶端負載均衡)RPC負載客戶端
- gRPC負載均衡(自定義負載均衡策略)RPC負載
- 負載均衡的迷惑負載
- kubernetes叢集內排程與負載均衡負載
- 用Rust和Pingora輕鬆構建高效負載均衡器RustGo負載
- NGINX 負載均衡Nginx負載
- WebSocket負載均衡Web負載
- IP負載均衡負載
- 【Nginx】負載均衡Nginx負載
- nginx負載均衡Nginx負載
- 負載均衡的種類負載
- 4.8 負載均衡的概念負載
- 負載均衡原理的解析負載
- 負載均衡的那些事?負載
- 配置IIS的負載均衡負載
- [zt] RAC的負載均衡負載
- gRPC的負載均衡RPC負載
- 負載均衡技術(一)———負載均衡技術介紹負載
- 解密負載均衡技術和負載均衡演算法解密負載演算法
- DockerCompose編排Nginx+Mysql並實現Nginx配置Mysql(TCP協議)負載均衡DockerNginxMySqlTCP協議負載
- Go通過cobra快速構建命令列應用Go命令列