【华为云网络技术分享】【第五弹】用户访问云主机业务偶发性中断问题解决方法--内核参数修改
问题描述
用户本地办公网络访问云服务器web应用时出现偶发性无法访问情况。
1. 问题定位解决
1. 用户问题复现时,华为云网络环境和其他网络环境测试用户业务时访问正常。
2. 问题复现时,排查云主机网络情况,测试的ping和tracert云主机网络都正常。用户本地网络的机器ping中断。
3. 在虚拟机所在主机的tap口抓包分析,
故障出现点,ping包开始无回包:
并且,查看netback进程,没有冲高,可以判断包送入VM内部,但是VM没有回。
4. 判断为虚拟机内部没有回包问题。经过排查。
确认用户本地网络:nat网络,本地主机通过nat用一个公网ip进行访问云主机。
确认用户本地主机时间:时间和云主机有差别。
查看用户虚拟机是否开启了tcp_tw_recycle。
# sysctl -a|grep tcp_tw_recycle
1即表示开启。
查看内核丢包数量
# cat /proc/net/netstat | awk '/TcpExt/ { print $21,$22 }'
可以看到Drops了7798个包。
5. 将tcp_tw_recycle参数修改为0后,用户测试未复现问题。问题解决。
# sysctl -w net.ipv4.tcp_tw_recycle=0
临时修改,重启VM后自动恢复为1。
永久修改需要修改
修改/etc/sysctl.conf 文件
在里面添加
net.ipv4.tcp_tw_recyclt=0
保存后退出,并生效配置。
# sysctl –p
2. 问题根因
tcp_tw_recycle=1 开启timewait快速回收。开启此功能在NAT环境下可能会出现严重的问题:因为TCP有一种行为,它可以缓存每个连接最新的时间戳,后续请求中如果时间戳小于缓存中的时间戳,即被视为无效并丢弃相应的请求报文。
用户本地网络为NAT网络,且不同主机的本地时间不一致,发送的报文时间戳不一致,导致内核丢弃报文。
- 点赞
- 收藏
- 关注作者
评论(0)