参考:linux 路由跟踪表满错误 nf_conntrack: table full, dropping packet 原理解决方法

说明

ping,dmesg 或者 /var/log/messages日志中这个报错,说明服务器网络方面遇到了瓶颈。

此时查看 cat /proc/sys/net/netfilter/nf_conntrack_maxcat /proc/sys/net/netfilter/nf_conntrack_count的值相等或者非常接近。

但是cpu、mem、DiskIO各方面都还有余力。(一开始我怀疑是宿主机的问题,实际并不是。)

技术深入

  • 连接跟踪的能力由nf_conntrack模块提供,该模块一般不会被开机加载,通过lsmod命令查看,该模块被iptable_nat模块调用,用来实现网络地址转发(NAT)、包过滤和负载均衡(支持随机和轮询)等功能。

  • nf_conntrack 跟踪所有网络连接,记录存储在 1 个哈希表里。

    通过cat /proc/net/nf_conntrack | head -1可以查看记录的详情。

ipv4 2 tcp 6 429397 ESTABLISHED src=192.168.122.1 dst=192.168.122.195 sport=35866 dport=22 src=192.168.122.195 dst=192.168.122.1 sport=22 dport=35866 [ASSURED] mark=0 secctx=system_u:object_r:unlabeled_t:s0 zone=0 use=2

  • nf_conntrack跟踪所有网络连接,所以 ping 本机也会留下一条记录:

ipv4 2 icmp 1 25 src=127.0.0.1 dst=127.0.0.1 type=8 code=0 id=20087 src=127.0.0.1 dst=127.0.0.1 type=0 code=0 id=20087 mark=0 secctx=system_u:object_r:unlabeled_t:s0 zone=0 use=2

问题处理

  • 关闭使用连接跟踪的程序,比如docker、libvirt、防火墙(类似于禁用模块)
  • 调整内核参数
  • 设置不跟踪的连接

在云上环境一般会配置安全组策略,虚机无需另外配置防火墙,所以关闭即可,不能关闭的可以调整 nf_conntrack 相关内核参数。

附录

linux /etc 目录下面 modprobe.d/ modules-load.d/ motd 的作用

  modprobe.d/目录:该目录包含了一些用于配置内核模块加载的文件。在这个目录中,可以创建一些以.conf为后缀的文件,用于指定内核模块的加载选项。这些文件中的配置可以影响到系统启动时内核模块的加载行为。
modules-load.d/目录:该目录包含了一些用于配置系统启动时自动加载内核模块的文件。在这个目录中,可以创建一些以.conf为后缀的文件,用于指定需要在系统启动时自动加载的内核模块。这些文件中的配置会在系统启动时被读取,并相应地加载指定的内核模块。
motd文件:motd是"Message of the Day"的缩写,意为每日消息。在Linux系统中,motd文件用于在用户登录时显示一些系统相关的信息,如系统版本、登录提示、重要通知等。motd文件可以用于向用户提供一些重要的系统信息或者警告。

总结起来,modprobe.d/目录用于配置内核模块加载选项,modules-load.d/目录用于配置系统启动时自动加载的内核模块,而motd文件则用于在用户登录时显示系统相关的信息。

使用iptables规则实现负载均衡

随机:(Random balancing)

  iptables -A PREROUTING -t nat -p tcp -d 192.168.1.1 --dport 27017 -m statistic --mode random --probability 0.33  -j DNAT --to-destination 10.0.0.2:1234
iptables -A PREROUTING -t nat -p tcp -d 192.168.1.1 --dport 27017 -m statistic --mode random --probability 0.33 -j DNAT --to-destination 10.0.0.3:1234
iptables -A PREROUTING -t nat -p tcp -d 192.168.1.1 --dport 27017 -j DNAT --to-destination 10.0.0.4:1234

轮询:(Round Robin)

有3个server,3个server轮询处理流量包,则规则配置如下:

  iptables -A PREROUTING -t nat -p tcp -d 192.168.1.1 --dport 27017 -m statistic --mode nth --every 3 --packet 0 -j DNAT --to-destination 10.0.0.2:1234
iptables -A PREROUTING -t nat -p tcp -d 192.168.1.1 --dport 27017 -m statistic --mode nth --every 2 --packet 0 -j DNAT --to-destination 10.0.0.3:1234
iptables -A PREROUTING -t nat -p tcp -d 192.168.1.1 --dport 27017 -j DNAT --to-destination 10.0.0.4:1234

nf_conntrack: table full, dropping packet的更多相关文章

  1. kernel nf_conntrack: table full, dropping packet[转载]

    http://blog.yorkgu.me/2012/02/09/kernel-nf_conntrack-table-full-dropping-packet/ 综合:ip_conntrack就是li ...

  2. [转]nf_conntrack: table full, dropping packet 连接跟踪表已满,开始丢包 的解决办法

      nf_conntrack: table full, dropping packet  连接跟踪表已满,开始丢包 的解决办法 中午业务说机器不能登录,我通过USM管理界面登录单板的时候发现机器没有僵 ...

  3. ip_conntrack or nf_conntrack : table full, dropping packet

    nf_conntrack: table full, dropping packet ip_conntrack or nf_conntrack : table full, dropping packet ...

  4. ocalhost kernel: [244840.301449] nf_conntrack: nf_conntrack: table full, dropping packet

    nf_conntrack: table full, dropping packet. 终结篇   "连接跟踪表已满,开始丢包"!相信不少用iptables的同学都会见过这个错误信息 ...

  5. ECS实例中的应用偶尔出现丢包现象并且内核日志(dmesg)存在“kernel: nf_conntrack: table full, dropping packet”的报错信息

    问题描述 连接ECS实例中的应用时偶尔出现丢包现象.经排查,ECS实例的外围网络正常,但内核日志(dmesg)中存在"kernel: nf_conntrack: table full, dr ...

  6. linux云主机cpu一直很高降不下来,系统日志报nf_conntrack: table full, dropping packet.

    在启用了iptables web服务器上,流量高的时候经常会出现下面的错误: ip_conntrack: table full, dropping packet 这个问题的原因是由于web服务器收到了 ...

  7. 路由跟踪表满,日志报错nf_conntrack: table full, dropping packet.

    “连接跟踪表已满,开始丢包”!相信不少用iptables的同学都会见过这个错误信息吧,这个问题曾经也困扰过我好长一段时间.此问题的解决办法有四种(nf_conntrack 在CentOS 5 / ke ...

  8. nf_conntrack: table full, dropping packet. 问题

    查出目前 ip_conntrack 记录最多的前十名 IP: # cat /proc/net/nf_conntrack|awk '{print $8}'|cut -d'=' -f 2|sort |un ...

  9. 解决nf_conntrack: table full, dropping packet问题

    " > /proc/sys/net/nf_conntrack_max iptables -t raw -A PREROUTING -p tcp -m tcp --dport -j NO ...

  10. nf_conntrack: table full, dropping packet解决方法

    https://blog.csdn.net/yanggd1987/article/details/45886913

随机推荐

  1. R的画图

    关于R基础 有3个需要总结的地方 R的画图(统计学图,ggplot) R的基本语法 R dataframe相关 Plot plot(1,2) plot(c(1, 2, 3, 4, 5), c(3, 7 ...

  2. react中受控组件与非受控组件--

    非受控组件:随用随取 1 render() { 2 return ( 3 <div> 4 <h1>非受控组件</h1> 5 <form action=&quo ...

  3. 如何将 Spire.Doc for C++ 集成到 C++ 程序中

    Spire.Doc for C++是一个专业的 Word 库,供开发人员在任何类型的 C++ 应用程序中阅读.创建.编辑.比较和转换 Word 文档. 本文演示了如何以两种不同的方式将 Spire.D ...

  4. css3 flex弹性布局详解

    一.flexbox弹性盒子 2009年,W3C 提出了一种新的方案----Flex 布局,可以简便.完整.响应式地实现各种页面布局.目前,它已经得到了所有浏览器的支持,这意味着,现在就能很安全地使用这 ...

  5. 2020-08-25:BloomFilter的原理以及Zset的实现原理。

    福哥答案2020-08-25: 布隆过滤器:哈希+位图.布隆过滤器重要的三个公式1.假设数据量为n,预期的失误率为p(布隆过滤器大小和每个样本的大小无关).2.根据n和p,算出BloomFilter一 ...

  6. 2022-10-08:以下go语言代码输出什么?A、0 0;B、0 4;C:4 0;D:4 4。 package main const s = “Go101.org“ // len(s) == 9

    2022-10-08:以下go语言代码输出什么?A.0 0:B.0 4:C:4 0:D:4 4. package main const s = "Go101.org" // len ...

  7. 2022-08-14:k8s安装PostgreSQL,yaml如何写?

    2022-08-14:k8s安装PostgreSQL,yaml如何写? 答案2022-08-14: yaml如下: apiVersion: apps/v1 kind: Deployment metad ...

  8. 2020-11-24:n个物品每个物品都有一定价值,分给2个人,怎么分两个人的价值差最小?

    福哥答案2020-11-24: 背包问题:背包容量是SUM/2. 每个物体的体积是数的大小,然后尽可能的装满背包. golang代码如下: package main import ( "fm ...

  9. 2021-07-02:正则表达式匹配。给定一个字符串s和一个匹配串p。“.“匹配单个字符。“*“匹配左边元素的多个字符。判断p是否匹配s。比如s=“ab“,p=“a.“,返回true。比如s=“ab“

    2021-07-02:正则表达式匹配.给定一个字符串s和一个匹配串p."."匹配单个字符.""匹配左边元素的多个字符.判断p是否匹配s.比如s="ab ...

  10. 2021-10-13:单词接龙。字典 wordList 中从单词 beginWord 和 endWord 的 转换序列 是一个按下述规格形成的序列:序列中第一个单词是 beginWord 。序列中最后

    2021-10-13:单词接龙.字典 wordList 中从单词 beginWord 和 endWord 的 转换序列 是一个按下述规格形成的序列:序列中第一个单词是 beginWord .序列中最后 ...