设为首页 收藏本站
查看: 3058|回复: 0

[经验分享] keepalived table full, dropping packet错误解决

[复制链接]
累计签到:4 天
连续签到:1 天
发表于 2015-11-19 15:19:07 | 显示全部楼层 |阅读模式
  现象: 在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

         版权声明:本文为博主原创文章,未经博主允许不得转载。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-141257-1-1.html 上篇帖子: Linux keepalived与lvs的深入分析 下篇帖子: haproxy + keepalived 实现简单负载均衡高可靠
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表