keepalived table full, dropping packet错误解决

现象: 在3.13晚上20:50收到报短信,keepalived服务挂了。
1.  检查keepalived日志,报错日志信息如下:
Mar 13 20:36:49 fashion Keepalived_healthcheckers[25717]: TCP connection to [192.168.XX.XX]:3908 failed !!!
Mar 13 20:36:49 fashion Keepalived_healthcheckers[25717]: Removing service [192.168.XX.XXX]:3908 from VS [192.168.XX.XXX]:3908
Mar 13 20:36:49 fashion Keepalived_healthcheckers[25717]: Executing [/etc/keepalived/keepalived_stop.sh] for service [192.168.XX.XX]:3908 in VS [192.168.XX.XXX]:3908
Mar 13 20:36:49 fashion Keepalived_healthcheckers[25717]: Lost quorum 1-0=1 > 0 for VS [192.168.XX.XXX]:3908
Mar 13 20:36:49 fashion Keepalived[25715]: Stopping Keepalived v1.2.7 (04/03,2014)
Mar 13 20:36:49 fashion Keepalived_vrrp[25718]: VRRP_Instance(VI_1) sending 0 priority
Mar 13 20:36:49 fashion Keepalived_vrrp[25718]: VRRP_Instance(VI_1) removing protocol VIPs.
Mar 13 20:36:49 fashion Keepalived_vrrp[25718]: VRRP_Instance(VI_3) sending 0 priority
Mar 13 20:36:49 fashion Keepalived_vrrp[25718]: VRRP_Instance(VI_3) removing protocol VIPs.
Mar 13 20:36:49 fashion Keepalived_vrrp[25718]: VRRP_Instance(VI_5) sending 0 priority
Mar 13 20:36:49 fashion Keepalived_vrrp[25718]: VRRP_Instance(VI_5) removing protocol VIPs.
Mar 13 20:36:49 fashion Keepalived_vrrp[25718]: VRRP_Instance(VI_7) sending 0 priority
Mar 13 20:36:49 fashion Keepalived_vrrp[25718]: VRRP_Instance(VI_7) removing protocol VIPs.
从日志中看,就只能看到3908的端口连不上,所以启动停止脚本,停止了keepalived服务,再看不出其它有价值的信息。


2. 打开系统日志查看,发现其早在15分钟前,系统就报table full, dropping packet信息了,如下所示:
Mar 13 20:21:45 fashion kernel: __ratelimit: 30 callbacks suppressed
Mar 13 20:21:45 fashion kernel: nf_conntrack: table full, dropping packet.
.........
Mar 13 20:21:45 fashion kernel: nf_conntrack: table full, dropping packet.
Mar 13 20:21:52 fashion kernel: __ratelimit: 31 callbacks suppressed
Mar 13 20:21:52 fashion kernel: nf_conntrack: table full, dropping packet.
........
Mar 13 20:21:52 fashion kernel: nf_conntrack: table full, dropping packet.
Mar 13 20:21:59 fashion kernel: __ratelimit: 358 callbacks suppressed


3.  在网上查询,必现与下面个参数有关系:
net.ipv4.netfilter.ip_conntrack_max = 655350
net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 1200
早期版本的路径:/proc/sys/net/ipv4


这两个参数在Linux内核2.6.30后参数已经有所改变,对应为:
net.netfilter.nf_conntrack_max = 655350
net.netfilter.nf_conntrack_tcp_timeout_established = 1200
路径:/proc/sys/net/netfilter

配置原因:
至于为什么会有这样的设置,这个设置的作用是什么,就要从NAT说起了。NAT(Network Address Translation,网络地址转换)是将IP数据报报头的IP地址转化成另外一个IP地址的过程,主要用来实现局域网内的机器访问公共网络(俗称外网)的功能。公共IP地址是指在因特网上全球唯一的IP地址,RFC 1918协议还为局域网预留出了三个IP不会在公网上进行分配的地址块:

10.0.0.0~10.255.255.255
172.16.0.0~172.31.255.255
192.168.0.0~192.168.255.255
这些IP地址就可以用来分配给局域网上的各种设备,这些设备在访问外网时,就需要通过一台NAT服务器进行路由转换,通常情况下,路由器就兼备了这样一个功能。除了路由器,也可以配置linux服务器实现NAT功能。ip_conntrack就是linux NAT的一个跟踪连接条目的模块,ip_conntrack模块会使用一个哈希表记录 tcp 通讯协议的 established connection记录,当这个哈希表满了的时候,便会导致nf_conntrack: table full, dropping packet错误。

注:(-conntrack最大数量.叫做conntrack_max 
-存储这些conntrack的hash表的大小,叫做hashsize 
当conntrack入口数大于conntrack_max时,在hash表中每一个conntrack list中的存储的入口将不可控.(conntrack_mark/hashsize 为每个list所能存储的入口的数量) 
hash表存在于固定的的不可swap的内存中. conntrack_mark决定占用多少这些不可swap的内存. 
缺省的hashsize 
——————————– 
conntrack_max=hashsize*8 
i386中 hashsize=conntrack_max/8=ramsize(in bytes)/131072=ramsize(in MegaBytes)*8. 
所以32位pc,512M内存可以存512*1024^2/128/1024=512*8=4096(连接池list) 
但是正确的算法是: 
hashsize=conntrack_max/8=ramsize(in bytes)/131072/(x/32) 
x表示使用的指针类型是(32位还是64的) )


4. 问题的解决方法:
进入/proc/sys/net/netfilter路径,修改相应的值即可:
net.netfilter.nf_conntrack_max = 655350
net.netfilter.nf_conntrack_tcp_timeout_established = 1200

5. 修改后验证的方法:
sysctl -a |grep nf_conntrack_max

sysctl -a |grep nf_conntrack_tcp_timeout_established 


6. 查看nf_conntract的方法

cat /proc/slabinfo |grep nf_conntrack
nf_conntrack_expect      0      0    240   16    1 : tunables  120   60    8 : slabdata      0      0      0
nf_conntrack_ffffffff8200cec0  54360  65351    304   13    1 : tunables   54   27    8 : slabdata   5027   5027    123


7.查看实时的nf_contrract
 cat /proc/net/nf_conntrack | cut -d ' ' -f 16 |cut -d '=' -f 2  | sort | uniq -c | sort -nr | head -n 10
  38936 192.168.0.11
  14113 192.168.0.38
    271 192.168.0.165
    268 192.168.0.79
    234 172.16.1.29
    233 192.168.0.89
    230 192.168.0.83
    177 192.168.0.70
    133 192.168.0.64
     70 192.168.0.36

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值