CentOS出现丢包问题解决办法 ip_conntrack

系统: CENTOS 5.5 64 bit
软件:nginx+mysql+php+NFS

故障排查:

收到 nagios 服务器** check_icmp** 的报警,报警显示一台网站服务器的内网网络有问题。因为那台服务器挂载了内网的NFS,因此内网的网络就采用 nagios 的 check_icmp 来做监控。
登录服务器进行排查。首先使用 ping 内网 IP 的方式查看内网的连通性,ping 的过程中出现丢包现象。
信息如下:
64 bytes from 10.1.1.1: icmp_seq=34 ttl=255 time=0.928 ms
64 bytes from 10.1.1.1: icmp_seq=35 ttl=255 time=1.01 ms
ping: sendmsg: Operation not permitted
ping: sendmsg: Operation not permitted

显示 ping 不被允许,防火墙上明明开通了 icmp 的协议。
有 问 题 先 看 日 志 , 日 志 文 件 一 般 会 有 所 记 录 ,
tail – f /var/log/messages,发现大量的如下内容:
Sep 13 09:11:21 dowload_server1 kernel: printk: 261 messages suppressed.
Sep 13 09:11:21 dowload_server1 kernel: ip_conntrack: table full, dropping packet
发现是当前会话数已经满了,因此出现丢包现象。

ip_conntrack 做一下简单的介绍:
IP_conntrack 表示连接跟踪数据库(conntrack database),代表 NAT 机器跟踪连接的数目,连接跟踪表能容纳多少记录是被一个变量控制的,它可由内核中
的 ip-sysctl 函数设置。每一个跟踪连接表会占用 350 字节的内
核存储空间,时间一长就会把默认的空间填满,那么默认空间是
多少?在内存为 64MB 的机器上是 4096,内存为 128MB
是 8192,内存为 256MB 是 16384。
通过如下命令查看当前的会话数:
cat /proc/net/ip_conntrack | wc –l
或者使用:
cat /proc/sys/net/ipv4/netfilter/ip_conntrack_count
使用如下命令查看设置的最大会话数
cat /proc/sys/net/ipv4/ip_conntrack_max

解决办法:

发现确实已经达到了最大会话数,通过 google 发现,可以直接调大用户的最大会话数,命令为:
echo "102400" > /proc/sys/net/ipv4/ip_conntrack_max
执行此命令后,不在丢包了,ping 也正常了。但是这样设置不会永久保存,当系统重启后设置会丢失,因此需要保存到/etc/sysctl.conf , 在 /etc/sysctl.conf 中 加 入 :net.ipv4.ip_conntract_max =102400,
然后执行/sbin/sysctl – p 刷 新 内 核 参 数 即 可 。

如 果 出 现 error:
"net.ipv4.ip_conntract_max" is an unknown key 报错的话,需要加载 ip_conntract 块,使用 modprobe ip_conntrack加载,使用 lsmod | grep ip_conntrack 查看模块是否加载。

终极解决:

为了使彻底解决此问题,还需要再设置一个东西,那就是会话连接超时变量,这个参数设置太长的话就会导致会话连接数不断增加,默认是设置为 432000 秒,很显然这个值太大了,通过如下命令设置小一点:
echo 21600 >/proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_established
设置成 21600 也就是 6 小时,这样会自动清除 6 小时候后的无效链接。
记得将上面的命令加到自动启动文件/etc/rc.local 文件中去

故障总结:

此次故障显示我们必须加强服务器的监控,才能第一时间获取故障问题并在第一时间解决,减少此类问题给公司造成损失。另外出现问题多看日志,日志往往能看出问题的蛛丝马迹,通过日志我们能更快地定位问题,从而找到问题的解决办法。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1 前言 防火墙(Firewall),就是一个隔离工具,工作于主机或者网络的边缘,对于进出本主机或本网络的报文,根...
    魏镇坪阅读 11,877评论 1 23
  • https://blog.csdn.net/weixin_37202689/article/details/728...
    SkTj阅读 5,815评论 0 2
  • Firewall 工作于网络(网络防火墙)或主机(主机防火墙)的边缘(通信报文的进出口),对于进出本网络或主机的报...
    SRE1阅读 5,163评论 0 0
  • 详述iptables五链 防火墙程序是工作在内核的TCP/IP的网络协议栈的框架之上,通过网络过滤可以实现入侵检测...
    Net夜风阅读 4,388评论 1 1
  • 一、Sysctl命令用来配置与显示在/proc/sys目录中的内核参数.如果想使参数长期保存,可以通过编辑/etc...
    贰爷阅读 3,707评论 0 1