使用Linux的IPVS模組時,IPVS會預設啟用其estimation功能,當伺服器規格較大且Service數量多時(例如,容器Kubernetes大規模叢集情境),該功能可能導致服務端的網路請求出現幾十到上百毫秒的延時或引起網路抖動。Alibaba Cloud Linux鏡像提供了關閉IPVS的estimation功能的能力,若您不依賴estimation統計資料包數、串連數等資訊,建議關閉IPVS的estimation功能,以消除由於統計帶來的額外開銷和抖動問題。
背景資訊
功能限制
僅以下核心版本的Alibaba Cloud Linux鏡像支援關閉IPVS的estimation功能:
Alibaba Cloud Linux 2:
4.19.91-22
及以上核心版本。Alibaba Cloud Linux 3:
5.10.134-14
及以上核心版本。
關閉estimation功能解決網路抖動問題
關閉IPVS的estimation功能會導致IPVS的服務統計失效,一旦關閉後,將看不到相應的服務的串連數、收到資料包等資訊的變化,即通過類似sudo ipvsadm -Ln --stats
命令不會看到相應統計資訊的變化,直到重新開啟該功能為止。因此,在關閉前,請評估關閉estimation功能對相應業務的影響。
遠程登入ECS執行個體。
具體操作,請參見通過密碼或密鑰認證登入Linux執行個體。
執行以下命令在ECS上關閉estimation功能。
執行以下命令開啟sysctl設定檔
/etc/sysctl.conf
。sudo vim /etc/sysctl.conf
在檔案末尾添加以下行,儲存並關閉檔案。
net.ipv4.vs.run_estimation = 0
執行以下命令使配置更改生效。
sudo sysctl -p
對於容器情境,您還需要執行相關操作來徹底關閉estimation功能。
情況1:每次重新載入IPVS模組後,均需再次執行
sysctl -p
命令使配置生效。建議您通過modprobe設定檔,實現系統每次重新載入IPVS模組時,自動執行sysctl -p
命令,使sysctl.conf
配置生效以關閉estimation功能。建立一個modprobe設定檔(例如
ipvs.conf
)。sudo vim /etc/modprobe.d/ipvs.conf
在檔案中添加以下內容後,儲存並退出。
options ip_vs run_estimation=0 post-up sysctl -p
情況2:如果您還在容器裡(例如Network Namespace上)配置了IPVS規則,則還需要在每個容器上關閉estimation功能。
說明對於阿里雲Container ServiceACK,預設的Kube-proxy代理模式為IPVS,規則配置在HOST側,無需在每個容器上關閉estimation功能。如果您使用的是阿里雲Container ServiceACK,請忽略該操作。
驗證estimation功能是否關閉。
方式一:運行命令
sudo sysctl net.ipv4.vs.run_estimation
,若返回net.ipv4.vs.run_estimation = 0
,則表示estimation功能已關閉。方式二:運行
sudo ipvsadm -Ln --stats
命令,若統計值不再變化,表示estimation功能已關閉。重要如果您沒有安裝
ipvsadm
工具,可執行sudo yum install ipvsadm
命令進行安裝。
相關操作
驗證網路抖動/延時是否解決
方式一:
ping
雲端服務器的IP地址或網域名稱。如果延遲值保持相對穩定,並且介於合理的範圍內,則可以確定網路延遲問題已經解決。方式二:使用網路效能測試工具進行全面的延遲和抖動測試,觀察是否還有長尾延遲(tail latency)。如果長尾延遲的頻率和幅度顯著減少,或者不再出現,那麼可以認為網路抖動/延時問題已經解決。
說明如果您通過關閉estimation功能發現仍然存在網路抖動/延時問題,可通過Container Service平台提供的網路診斷功能進行診斷。具體操作,請參考網路診斷。
再次開啟estimation功能
如果您希望再次開啟estimation功能,可將sysctl和modprobe設定檔中的run_estimation
相關的值改為1
。