使用Linux的IPVS模塊時,IPVS會默認啟用其estimation功能,當服務器規格較大且Service數量多時(例如,容器Kubernetes大規模集群場景),該功能可能導致服務端的網絡請求出現幾十到上百毫秒的延時或引起網絡抖動。Alibaba Cloud Linux鏡像提供了關閉IPVS的estimation功能的能力,若您不依賴estimation統計數據包數、連接數等信息,建議關閉IPVS的estimation功能,以消除由于統計帶來的額外開銷和抖動問題。
背景信息
IPVS(IP Virtual Server)是Linux內核的一個組件,可將基于TCP和UDP服務的請求定向到真實服務器,實現內核態四層負載均衡。在Kubernetes中,IPVS可作為其組件Kube-proxy的一種代理模式,將Service的請求轉發到后端Pod,來實現Kubernetes服務的負載均衡。特別是在大規模集群中,對于服務間的流量分發和負載均衡需求,IPVS可以提供更好的響應速度和資源利用率。
Kube-proxy是Kubernetes集群中的一個重要組件,負責為服務實現網絡代理和負載均衡功能。
IPVS中內置了定時器estimation_timer,用于統計每個時間片中每個服務收發的數據包、連接數量等信息,該定時器默認開啟。
IPVS的estimation功能導致網絡請求延時或抖動的原因主要有以下:
一方面,隨著Service數量的增加,需要統計的計算量會增加且呈現線性。同時,內核為了降低計算資源和存儲資源開銷,將統計數據按照CPU維度來存放,CPU數量越多,每次統計需要遍歷的CPU數量就越多。因此,當服務數量多且CPU數量也很多時,每次定時器estimation_timer統計的開銷會顯著增加。
另一方面,Linux中定時器執行的權限較高,在執行定時器任務時,其他任務無法得到執行,導致最后收包的延遲。體現在應用中,就會表現出服務器的請求會出現幾十甚至上百毫秒的時延,此時
ping
該服務器會產生抖動。
功能限制
僅以下內核版本的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功能。
說明對于阿里云容器服務ACK,默認的Kube-proxy代理模式為IPVS,規則配置在HOST側,無需在每個容器上關閉estimation功能。如果您使用的是阿里云容器服務ACK,請忽略該操作。
驗證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功能發現仍然存在網絡抖動/延時問題,可通過容器服務平臺提供的網絡診斷功能進行診斷。具體操作,請參考網絡診斷。
再次開啟estimation功能
如果您希望再次打開estimation功能,可將sysctl和modprobe配置文件中的run_estimation
相關的值改為1
。