阿里云SLB最佳实践
一、SLB概念
負(fù)載均衡(Server Load Balancer)是將訪問流量根據(jù)轉(zhuǎn)發(fā)策略分發(fā)到后端多臺(tái)云服務(wù)器(Elastic Compute Service,簡(jiǎn)稱 ECS)的流量分發(fā)控制服務(wù)。?
負(fù)載均衡服務(wù)通過設(shè)置虛擬服務(wù)地址,將位于同一地域的多臺(tái)ECS實(shí)例虛擬成一個(gè)高性能、高可用的應(yīng)用服務(wù)池;再根據(jù)應(yīng)用指定的方式,將來自客戶端的網(wǎng)絡(luò)請(qǐng)求分發(fā)到云服務(wù)器池中。負(fù)載均衡服務(wù)是ECS面向多機(jī)方案的一個(gè)配套服務(wù),需要同ECS結(jié)合使用。?
負(fù)載均衡服務(wù)會(huì)檢查云服務(wù)器池中ECS實(shí)例的健康狀態(tài),自動(dòng)隔離異常狀態(tài)的ECS實(shí)例,從而解決了單臺(tái)ECS實(shí)例的單點(diǎn)問題,提高了應(yīng)用的整體服務(wù)能力。在標(biāo)準(zhǔn)的負(fù)載均衡功能之外,負(fù)載均衡服務(wù)還具備TCP與HTTP抗DDoS攻擊的特性,增強(qiáng)了應(yīng)用服務(wù)的防護(hù)能力。?
組成部分?
負(fù)載均衡服務(wù)由負(fù)載均衡實(shí)例、監(jiān)聽和后端服務(wù)器三個(gè)部分組成。?
負(fù)載均衡實(shí)例 (Server Load Balancer Instance)?
如果您想使用負(fù)載均衡服務(wù),必須先創(chuàng)建一個(gè)負(fù)載均衡實(shí)例。一個(gè)負(fù)載均衡實(shí)例可以添加多個(gè)監(jiān)聽和后端服務(wù)器。?
監(jiān)聽 (Listener)?
在使用負(fù)載均衡服務(wù)前,您必須為負(fù)載均衡實(shí)例添加一個(gè)監(jiān)聽,指定監(jiān)聽規(guī)則和轉(zhuǎn)發(fā)策略,并配置健康檢查。?
針對(duì)不同的需求,您可以單獨(dú)配置四層(TCP/UDP)或七層(HTTP/HTTPS)監(jiān)聽。?
后端服務(wù)器(Backend Server)?
一組接收前端請(qǐng)求的ECS實(shí)例。您可以單獨(dú)添加ECS實(shí)例到服務(wù)器池,也可以通過虛擬服務(wù)器組或主備服務(wù)器組來批量添加和管理。?
默認(rèn)后端服務(wù)器是在實(shí)例維度上維護(hù)的,即負(fù)載均衡實(shí)例下的所有監(jiān)聽都只能夠?qū)⒄?qǐng)求轉(zhuǎn)發(fā)到相同ECS實(shí)例的相同端口上。虛擬服務(wù)器組功能實(shí)現(xiàn)了監(jiān)聽維度的轉(zhuǎn)發(fā)。您可以針對(duì)不同的監(jiān)聽創(chuàng)建不同的虛擬服務(wù)器組,即負(fù)載均衡實(shí)例中的不同監(jiān)聽可以將請(qǐng)求轉(zhuǎn)發(fā)到不同端口的后端服務(wù)器上。?
此外,七層負(fù)載均衡服務(wù)支持域名、URL轉(zhuǎn)發(fā)策略,可以將來自不同域名或者URL的請(qǐng)求轉(zhuǎn)發(fā)給不同的后端服務(wù)器處理。?
二、使用限制
2.1 在 4 層(TCP 協(xié)議)服務(wù)中,不支持添加進(jìn)后端云服務(wù)器池的 ECS 既作為 Real Server,又作為客戶端向所在的 SLB 實(shí)例發(fā)送請(qǐng)求。因?yàn)?#xff0c;返回的數(shù)據(jù)包只在云服務(wù)器內(nèi)部轉(zhuǎn)發(fā),不經(jīng)過負(fù)載均衡,所以通過配置在 SLB 后端的 ECS 去訪問其 VIP 是不通的。?
2.2 僅支持 TCP/UDP(4 層) 和 HTTP/HTTPS(7 層) 這 4 種協(xié)議。?
2.3 后端服務(wù)器僅支持 ECS,不支持第三方云服務(wù)器。?
2.4 僅支持輪詢(RR)、加權(quán)輪詢(WRR)和最小加權(quán)連接數(shù)(WLC)這 3 中調(diào)度算法。?
2.5 不支持 7 層 SSL Session 超時(shí)時(shí)間的調(diào)整。當(dāng)前全局統(tǒng)一為 300s。?
2.6 不支持 7 層 HTTP Keep-alive 超時(shí)時(shí)間的調(diào)整。當(dāng)前配置為 15s。?
說明:如果客戶端訪問 SLB HTTP 監(jiān)聽時(shí)使用長(zhǎng)連接, 那么這條連接最長(zhǎng)的空閑時(shí)間為 15 秒, 即如果超過 15 秒沒有發(fā)送任何 HTTP 請(qǐng)求, 這條連接將會(huì)被 SLB 主動(dòng)斷開。如果您的業(yè)務(wù)可能會(huì)出現(xiàn)超過 15 秒的空閑, 需要從業(yè)務(wù)層面檢測(cè)連接的斷開并重新發(fā)起連接。?
2.7 不支持轉(zhuǎn)發(fā)超時(shí)時(shí)間的調(diào)整:?
當(dāng)前配置: TCP 900s,UDP 300s,HTTP 60s,HTTPS 60s?
上述配置是指 SLB 服務(wù)端從后端接收數(shù)據(jù)并進(jìn)行轉(zhuǎn)發(fā)的超時(shí)時(shí)間,并非健康檢查超時(shí)時(shí)間間隔。如果超時(shí),通常會(huì)向客戶端返回 504 錯(cuò)誤碼。?
2.8 金融云 SLB 基于安全性考慮,僅允許開放特定的端口:80,443,2800-3300,6000-10000,13000-14000
三、SLB使用誤區(qū)
3.1 SLB后端只添加一臺(tái)ECS
用戶在 SLB 后端只添加一臺(tái)服務(wù)器時(shí),雖然鏈路能跑通,客戶端也能正常訪問。但卻失去了 SLB 消除 ECS 單點(diǎn)的基本能力。如果這臺(tái)僅有的 ECS 出現(xiàn)異常,那邊整個(gè)業(yè)務(wù)訪問也會(huì)出現(xiàn)異常。?
建議:至少在 SLB 后端加入兩臺(tái)以上 ECS。以便單一服務(wù)器出現(xiàn)異常時(shí),業(yè)務(wù)還能持續(xù)正常訪問。
3.2 后端 ECS 能正常訪問,但 SLB 無法訪問,則說明 SLB 出現(xiàn)了異常
用戶通過 SLB 訪問業(yè)務(wù)出現(xiàn)異常。但 hosts 綁定后端 ECS 的公網(wǎng) IP 能正常訪問。用戶據(jù)此推斷后端業(yè)務(wù)是正常的,是 SLB 服務(wù)端出現(xiàn)異常導(dǎo)致業(yè)務(wù)訪問異常。?
其實(shí),由于負(fù)載均衡的數(shù)據(jù)轉(zhuǎn)發(fā)和健康檢查都是通過內(nèi)網(wǎng)進(jìn)行的。所以,從后端 ECS 的公網(wǎng) IP 進(jìn)行對(duì)比訪問測(cè)試,并沒有可比性,并不能反應(yīng)真實(shí)訪問情況。?
建議:出現(xiàn)異常時(shí),在后端 ECS 之間,通過內(nèi)網(wǎng) IP 做對(duì)比訪問測(cè)試。
3.3 SLB 的 VIP 能 ping 通就說明配置是正常的
用戶通過 ping SLB 的 VIP 地址來判斷 SLB 服務(wù)的有效性。?
其實(shí),這種測(cè)試非常不可靠。因?yàn)?ping 響應(yīng)是由 SLB 服務(wù)端直接完成的,與后端 ECS 無關(guān)。所以,正常情況下:?
只要配置了任意監(jiān)聽,即便相應(yīng)監(jiān)聽處于異常狀態(tài),SLB VIP ping 也是正常的。?
相反,如果 SLB 沒有配置任何監(jiān)聽,其 VIP 是 ping 不通的。?
建議:對(duì)于 4 層服務(wù),通過 telnet 監(jiān)聽端口進(jìn)行業(yè)務(wù)可用性測(cè)試;?
對(duì)于 7 層服務(wù),通過實(shí)際的業(yè)務(wù)訪問進(jìn)行可用性測(cè)試。
3.4 已經(jīng)調(diào)整了健康檢查間隔,結(jié)果還會(huì)出現(xiàn)訪問超時(shí)
用戶反饋已經(jīng)調(diào)大了健康檢查的最大間隔時(shí)間,但客戶端訪還是由于訪問超時(shí)收到 504 錯(cuò)誤。?
其實(shí),雖然健康檢查及業(yè)務(wù)轉(zhuǎn)發(fā)都是由 SLB 服務(wù)端相同的服務(wù)器承載,但卻是完全不同維度的處理邏輯。來自客戶端的請(qǐng)求,經(jīng)由 SLB 轉(zhuǎn)發(fā)給后端 ECS 后,SLB 服務(wù)端會(huì)有接收數(shù)據(jù)的超時(shí)窗口。而另一方面,SLB 服務(wù)端持續(xù)的對(duì)后端 ECS 根據(jù)檢查間隔配置進(jìn)行健康檢查。這兩者之間沒有直接關(guān)系,唯一的影響是在后端 ECS 健康檢查失敗后,SLB 不會(huì)再對(duì)其進(jìn)行數(shù)據(jù)轉(zhuǎn)發(fā)。?
建議:客戶端訪問超時(shí)時(shí),結(jié)合業(yè)務(wù)與 SLB 默認(rèn)超時(shí)時(shí)間進(jìn)行比對(duì)分析;健康檢查超時(shí)時(shí),結(jié)合健康檢查與業(yè)務(wù)超時(shí)時(shí)間進(jìn)行比對(duì)分析。
3.5 從后端日志看,健康檢查間隔與監(jiān)聽配置的間隔時(shí)間不一致
用戶反饋通過 SLB 后端 ECS 的業(yè)務(wù)日志進(jìn)行統(tǒng)計(jì)分析,發(fā)現(xiàn)健康檢查的間隔非常短,與之前在創(chuàng)建監(jiān)聽時(shí)配置的健康檢查間隔時(shí)間不一致。?
這個(gè)問題在文檔 負(fù)載均衡健康檢查原理淺析 有相關(guān)說明:LVS 集群內(nèi)所有節(jié)點(diǎn),都會(huì)獨(dú)立、并行的遵循該屬性去對(duì)后端 ECS 進(jìn)行定期健康檢查。由于各 LVS 節(jié)點(diǎn)的檢查時(shí)間并不同步,所以,如果從后端某一 ECS 上進(jìn)行單獨(dú)統(tǒng)計(jì),會(huì)發(fā)現(xiàn)來自負(fù)載均衡的健康檢查請(qǐng)求在時(shí)間上并不會(huì)遵循上述時(shí)間間隔。?
建議:如果健康檢查頻率過高對(duì)業(yè)務(wù)造成影響,可以參閱知識(shí)點(diǎn) 健康檢查導(dǎo)致大量日志的處理 進(jìn)行處理。
3.6 大量健康檢查形成 DDoS 攻擊,導(dǎo)致服務(wù)器性能下降
用戶認(rèn)為 SLB 服務(wù)端使用上百臺(tái)機(jī)器進(jìn)行健康檢查,大量健康檢查請(qǐng)求會(huì)形成 DDoS 攻擊,造成后端 ECS 性能降低。?
實(shí)際上,無論何種模式的健康檢查,其規(guī)模均不足以達(dá)到類似于 DDoS 攻擊的量級(jí):SLB 集群會(huì)利用多臺(tái)機(jī)器(假定為 M 個(gè),個(gè)位數(shù)級(jí)別),對(duì)后端 ECS 的每個(gè)服務(wù)監(jiān)聽端口 (假定為 N 個(gè)) ,按照配置的健康檢查間隔(假定為 O 秒,一般建議最少 2 秒)進(jìn)行健康檢查。以 TCP 協(xié)議健康檢查為例,那么每秒由健康檢查產(chǎn)生的 TCP 連接建立數(shù)為:M*N/O。?
從該公式可以看出,M 和 N 都是固定的,而且值很小。所以,最終健康檢查帶來的每秒 TCP 并發(fā)請(qǐng)求數(shù),主要取決于創(chuàng)建的監(jiān)聽端口數(shù)量。所以,除非有巨量的監(jiān)聽端口,否則由健康檢查產(chǎn)生的連接請(qǐng)求,根本無法達(dá)到 SYN Flood 的攻擊級(jí)別,實(shí)際對(duì)后端 ECS 的網(wǎng)絡(luò)壓力也極低。?
建議: 如果健康檢查頻率過高對(duì)業(yè)務(wù)造成影響,可以參閱知識(shí)點(diǎn) 健康檢查導(dǎo)致大量日志的處理 進(jìn)行處理。
3.7 用戶為了降低健康檢查的影響,將健康檢查間隔設(shè)置得很長(zhǎng)
這樣配置會(huì)導(dǎo)致當(dāng)后端 ECS 出現(xiàn)異常時(shí),負(fù)載均衡需要經(jīng)過較長(zhǎng)時(shí)間才能偵測(cè)到后端 ECS 出現(xiàn)不可用。尤其是當(dāng)后端 ECS 間歇性不可用時(shí),由于需要【連續(xù)多次】檢測(cè)失敗時(shí)才會(huì)移除異常 ECS。所以,檢查間隔過長(zhǎng),會(huì)導(dǎo)致負(fù)載均衡集群可能根本無法發(fā)現(xiàn)后端 ECS 不可用。?
3.8 移除服務(wù)器與權(quán)重置零的效果是一樣的?
移除服務(wù)器:已經(jīng)建立的連接會(huì)一并中斷,新建連接也不會(huì)再轉(zhuǎn)發(fā)到該 ECS。?
權(quán)重置零:已經(jīng)建立的連接不會(huì)中斷,直至超時(shí)或主動(dòng)斷開。新連接不會(huì)轉(zhuǎn)到該 ECS。?
建議:在業(yè)務(wù)調(diào)整或服務(wù)器維護(hù)時(shí),提前將相應(yīng)服務(wù)器的權(quán)重置零,直至連接持續(xù)衰減至零。操作完成后,再恢復(fù)權(quán)重配置,以降低對(duì)業(yè)務(wù)的影響。
3.9 單個(gè)連接就能達(dá)到監(jiān)聽配置的帶寬峰值
SLB 在創(chuàng)建監(jiān)聽時(shí)可以指定帶寬峰值。但用戶通過單一客戶端進(jìn)行測(cè)試時(shí),發(fā)現(xiàn)始終無法達(dá)到該峰值。?
由于 SLB 是基于集群方式部署和提供服務(wù)的。所以,所有前端請(qǐng)求會(huì)被均分到集群內(nèi)不同的 SLB 服務(wù)器上進(jìn)行轉(zhuǎn)發(fā)。相應(yīng)的,在監(jiān)聽上設(shè)定的帶寬峰值也會(huì)被平分后設(shè)定到各服務(wù)器。因此,單個(gè)連接下載的流量上限公式為:?
單個(gè)連接下載峰值=設(shè)置的負(fù)載均衡總帶寬/(N-1)?
*注:N 為流量轉(zhuǎn)發(fā)分組個(gè)數(shù),當(dāng)前值一般為 4?
假設(shè)在控制臺(tái)上設(shè)置的帶寬峰值為 10Mb,那么單個(gè)客戶端可下載的最大流量為: 10/(4-1)≈3.33Mb?
建議:建議在配置單個(gè)監(jiān)聽的帶寬峰值時(shí),根據(jù)實(shí)際的業(yè)務(wù)情況并結(jié)合上述實(shí)現(xiàn)方式設(shè)定一個(gè)較為合理的值,從而確保業(yè)務(wù)的正常對(duì)外服務(wù)不會(huì)受到影響和限制。
3.10 阿里云web應(yīng)用防火墻(WAF)+SLB回話保持不生效
在流量入口為防護(hù)網(wǎng)址添加waf,waf作為反向代理在slb如果配置四層tcp/udp端口監(jiān)聽,可能存在后端web應(yīng)用回話保持不生效,七層使用cookie可以解決,但是由于業(yè)務(wù)可能存在限制必須使用四層端口,此時(shí)可以在阿里后臺(tái)提交工單申請(qǐng)開啟waf回話保持緩存解決。
四、SLB最佳實(shí)踐
4.1 業(yè)務(wù)架構(gòu)
SLB 在公網(wǎng)環(huán)境下的典型業(yè)務(wù)架構(gòu)如上圖所示。基于多可用區(qū)特性,當(dāng)主可用區(qū)出現(xiàn)異常時(shí),SLB 會(huì)自動(dòng)將流量切換到備可用區(qū)。但在實(shí)際的業(yè)務(wù)架構(gòu)設(shè)計(jì)過程中,建議關(guān)注如下要點(diǎn):?
為了降低延遲,建議選擇離您客戶最近的地域進(jìn)行 SLB 部署。?
并非所有區(qū)域都支持多可用區(qū)特性(具體支持情況以您在控制臺(tái)所見為準(zhǔn)),請(qǐng)您結(jié)合業(yè)務(wù)情況選擇合適的可用區(qū)。?
在配合使用多可用區(qū)特性時(shí),后端 ECS 也必須同時(shí)在相應(yīng)的主備可用區(qū)部署,才能保障出現(xiàn)異常時(shí),相應(yīng)可用區(qū)有 ECS 能進(jìn)行業(yè)務(wù)承載。
4.2 監(jiān)聽配置
如上圖所示,SLB 支持創(chuàng)建多種協(xié)議監(jiān)聽,然后按轉(zhuǎn)發(fā)策略,將前端業(yè)務(wù)請(qǐng)求轉(zhuǎn)發(fā)到后端多種邏輯服務(wù)器集。在 SLB 服務(wù)配置的各主要步驟中,請(qǐng)關(guān)注如下要點(diǎn)。?
選擇監(jiān)聽協(xié)議?
并非只要 Web 網(wǎng)站就必須使用 HTTP 協(xié)議。大部分沒有特殊 HTTP 要求的 Web 網(wǎng)站,使用 TCP 監(jiān)聽 80 端口就可以滿足業(yè)務(wù)需求。?
SLB 集群采用 LVS 和 Tengine 實(shí)現(xiàn)。其中 4 層監(jiān)聽(TCP/UDP)經(jīng)過 LVS 后直接到達(dá)后端服務(wù)器,而 7 層監(jiān)聽(HTTP/HTTPS)經(jīng)過 LVS 后,還需要再經(jīng)過 Tengine 轉(zhuǎn)發(fā),最后達(dá)到后端服務(wù)器,由于比 4 層多了一個(gè)處理環(huán)節(jié)。因此,7 層監(jiān)聽的性能相對(duì)要差一些。?
集合模式 配置權(quán)重 指定服務(wù)端口 服務(wù)器數(shù)量限制 其它特性?
后端服務(wù)器 支持 不支持 無限制 創(chuàng)建監(jiān)聽時(shí)的默認(rèn)映射服務(wù)器集?
虛擬服務(wù)器組 支持 支持 無限制 有更大的靈活性?
主備服務(wù)器組 支持 支持 2 臺(tái) 只能在 TCP/UDP 監(jiān)聽上使用?
按業(yè)務(wù)邏輯創(chuàng)建不同的虛擬服務(wù)器組,然后創(chuàng)建相應(yīng)的監(jiān)聽與之對(duì)應(yīng)。?
無論創(chuàng)建何種服務(wù)器集合,均結(jié)合 SLB 多可用區(qū)特性,同時(shí)加入位于不同可用區(qū)的服務(wù)器,以實(shí)現(xiàn)跨可用區(qū)容災(zāi)。?
設(shè)置過多轉(zhuǎn)發(fā)規(guī)則會(huì)增加業(yè)務(wù)維護(hù)的復(fù)雜度,建議盡量精簡(jiǎn)策略條目。?
選擇轉(zhuǎn)發(fā)策略?
權(quán)重代表相應(yīng)服務(wù)器所承載的業(yè)務(wù)的相對(duì)占比,而非絕對(duì)值。當(dāng)前 SLB 支持 3 種轉(zhuǎn)發(fā)策略,其使用場(chǎng)景及要點(diǎn)如下:?
轉(zhuǎn)發(fā)策略 算法說明 使用要點(diǎn)?
加權(quán)輪詢(WRR) 按比重輪流分配新增連接 根據(jù)后端 ECS 規(guī)格的不同,配置相應(yīng)的權(quán)重。如果是長(zhǎng)連接業(yè)務(wù),可能會(huì)導(dǎo)致老服務(wù)器的連接數(shù)持續(xù)增加,而新加入服務(wù)器的連接數(shù)相對(duì)非常低,造成負(fù)載不均的假象。?
加權(quán)最小連接數(shù)(WLC) ●在 SLB 服務(wù)端,實(shí)時(shí)統(tǒng)計(jì)與后端 ECS 已建立的 ESTABLISHED 狀態(tài)連接數(shù),來評(píng)估相應(yīng)服務(wù)器的負(fù)載情況。按權(quán)重比例,將新增連接分配給活動(dòng)連接數(shù)少的服務(wù)器,最終盡可能使服務(wù)器的已建立連接數(shù)與其權(quán)重成正例。 當(dāng)前暫未實(shí)現(xiàn)新增服務(wù)器的過載保護(hù)或緩沖機(jī)制。所以,如果業(yè)務(wù)并發(fā)非常高,可能會(huì)導(dǎo)致新增服務(wù)器連接數(shù)陡增,對(duì)業(yè)務(wù)造成影響。建議新增服務(wù)器時(shí),逐步調(diào)高權(quán)重。?
輪詢(RR) 按順序逐一分發(fā)新增連接。 必須手工確保后端 ECS 的業(yè)務(wù)承載能力一致。
五、建議
? 在同一個(gè)服務(wù)器集中,同時(shí)加入不同可用區(qū)的服務(wù)器,以實(shí)現(xiàn)同城容災(zāi)?
? 根據(jù)服務(wù)器規(guī)格的差異,配置與之成正比的權(quán)重?
? SLB 后端最少配置兩臺(tái)以上 ECS,以避免單臺(tái) ECS 出現(xiàn)異常導(dǎo)致整個(gè)業(yè)務(wù)也出現(xiàn)異常?
? 后端 ECS 建議無狀態(tài)部署:即只用于計(jì)算,而數(shù)據(jù)調(diào)用與存儲(chǔ)后連至后端的 OSS、RDS 等公共服務(wù)。這樣可以無需為 ECS 之間的數(shù)據(jù)同步問題而困擾。?
? 建議基于相同的鏡像或自定義鏡像創(chuàng)建后端 ECS 服務(wù)器,以保障配置的一致性。?
? 后端 ECS 歸屬安全組及系統(tǒng)內(nèi)部防火墻必須對(duì) SLB 服務(wù)端地址段進(jìn)行訪問放行。
————————————————
版權(quán)聲明:本文為CSDN博主「faydd3」的原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/faydd3/article/details/82286258
總結(jié)
以上是生活随笔為你收集整理的阿里云SLB最佳实践的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 实现客户机(Client)类声明字符型静
- 下一篇: MAX40026 280ps高速比较器