CLB同時支持四層負載均衡與七層負載均衡。實際業務場景中如您有CLB壓力測試需求,可參考本文進行壓力測試。
壓測方法
在進行壓力測試時,配置建議如下:
壓測負載均衡轉發能力建議使用短連接。
一般來說壓測除了驗證會話保持和均衡性等功能外,主要是驗證負載均衡的轉發能力,因此使用短連接比較合適,用于測試負載均衡和后端服務器的處理能力。使用短連接測試時,需要注意客戶端端口不足的問題。
壓測負載均衡吞吐量建議使用長連接,用于測試帶寬上限或特殊業務。
壓測工具的超時時間建議設置為一個較小值,如5秒。超時時間太大的話,測試結果會體現在平均響應時間加長,不利于判斷壓測水位是否已到達。超時時間調小,測試結果會體現在成功率上,便于快速判斷壓測水位。
后端服務器提供一個靜態網頁用于壓測,以避免應用邏輯帶來的損耗。
壓測時,監聽配置建議如下:
不開啟會話保持功能,否則壓力會集中在個別后端服務器。
建議關閉健康檢查功能,減少健康檢查對后端服務器的訪問請求。
性能測試服務的5000并發規格能夠提供5個及5個以上的公網IP。
壓測工具建議
建議您使用阿里云PTS:可以設置足夠高的并發,PTS會分配來自全國各地的公網IP,壓力來源足夠分散,并且可以在PTS中集成云監控,實時查看端到端的全部性能數據。
不建議您使用Apache ab作為壓力測試工具:Apache ab在大量并發場景下存在3秒、6秒、9秒階梯式停頓的現象。Apache ab會通過判斷content length來確定請求是否成功,而NLB掛載多臺后端服務器時,返回的content length會不一致,導致測試結果有誤。
使用PTS簡單壓測示例
創建一個負載均衡實例,添加兩臺ECS實例作為后端服務器,分別創建一個TCP監聽和HTTP監聽,后端端口均設置為80。
ECS服務器的配置為CPU 2核,內存2 GiB且使用CentOS 7.9 64位的操作系統。分別登錄這兩臺ECS實例,執行以下步驟安裝Web服務并完成壓測。關于如何登錄ECS,請參見ECS遠程連接操作指南。
執行以下命令,安裝Apache Web Server提供Web服務。
sudo yum install -y httpd
執行以下命令,初始化默認首頁index.html。
sudo echo "testvm" > /var/www/html/index.html
執行以下命令,啟動HTTP服務。
sudo systemctl start httpd
執行以下任意一條命令,訪問80端口確認Web服務可用。
curl http://localhost
或
curl http://127.0.0.1:80
在PTS中創建測試場景,開始壓力測試。具體操作請參見如何在一分鐘內發起壓測?。
可能導致壓測性能低的原因
若發現壓測性能低,可能是以下原因造成的:
客戶端端口不足
在進行壓力測試時,客戶端端口不足會導致連接建立失敗。負載均衡會默認抹除TCP連接的timestamp屬性,Linux協議棧的tw_reuse(time_wait狀態連接復用)無法生效,time_wait狀態連接堆積導致客戶端端口不足。
解決方法:客戶端使用長連接代替短連接。使用RST報文斷開連接,即socket設置SO_LINGER屬性。
后端服務器accept隊列滿
后端服務器accept隊列滿,導致后端服務器不回復syn_ack報文,客戶端超時。
解決方法:默認net.core.somaxconn的值為128,執行
sysctl -w net.core.somaxconn=1024
命令更改net.core.somaxconn的值,并重啟后端服務器上的應用。后端服務器依賴的應用成為瓶頸
請求經過負載均衡到達后端服務器后,后端服務器本身負載正常,但由于所有后端服務器上的應用又依賴其他應用,例如數據庫,當數據庫成為瓶頸時,也會引起性能降低。
解決方法:根據實際情況清理后端服務器上不需要的應用。
后端服務器的健康檢查狀態異常
在壓測時,容易忽略后端服務器的健康檢查狀態,如果有后端服務器健康檢查失敗或者健康檢查狀態經常跳躍(成功到失敗,又從失敗到成功,反復變化),也會導致壓測性能低。
解決方法:建議關閉健康檢查功能,減少健康檢查對后端服務器的訪問請求。