使用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功能。
说明对于阿里云容器服务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
。