参考: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. linux下防火墙与SELinux状态与关闭

    linux下防火墙与SELinux状态与关闭 在使用ftp命令以及wget命令测试两台linux机器之间ftp下载是否正常,虽然关闭了防火墙,但是一直还是提示以下错误 然来还需要将SELinux 设置 ...

  2. C# 获取指定窗口的上层窗口

    如何获取当前窗口层级上方的所有窗口信息 User32有函数GetWindow function (winuser.h) - Win32 apps | Microsoft Docs,可以根据已知窗口句柄 ...

  3. 为什么 Go for-range 的 value 值地址每次都一样?

    原文链接: 为什么 Go for-range 的 value 值地址每次都一样? 循环语句是一种常用的控制结构,在 Go 语言中,除了 for 关键字以外,还有一个 range 关键字,可以使用 fo ...

  4. \n 和 std::endl 的区别

    std::cout << std::endl; 等价于 std::cout << '\n' << std::flush; 除了写入换行符,std::endl 还会刷 ...

  5. 1分钟了解C语言正确使用字节对齐及#pragma pack的方法

    ​ C/C++编译器的缺省字节对齐方式为自然对界.即在缺省情况下,编译器为每一个变量或是数据单元按其自然对界条件分配空间. 在结构中,编译器为结构的每个成员按其自然对界(alignment)条件分配空 ...

  6. 2022-11-23: 分数排名。输出结果和表的sql如下。请写出输出结果的sql语句? +-------+------+ | score | rank | +-------+------+ | 4.

    2022-11-23: 分数排名.输出结果和表的sql如下.请写出输出结果的sql语句? ±------±-----+ | score | rank | ±------±-----+ | 4.00 | ...

  7. SpringBoot源码学习4——SpringBoot内嵌Tomcat启动流程源码分析

    系列文章目录和关于我 零丶引入 我在初学spring的时候,很懵逼,因为整个项目中不存在main方法,让我有点摸不着头脑.那时候我知道有个东西叫tomcat是它监听了端口,解析了协议调到了我的serv ...

  8. vue入门第一坑:Eslint

    Eslint是语法检查插件,它会严格要求你的代码,就你本身代码没错,但是一运行,Eslint就跳出来报错了.它会自动检查你的代码是否符合规范.所以,建议新手入门Vue创建项目的时候可以关掉Eslint ...

  9. Actor Prioritized Experience Replay

    论文宗旨: 由于PER 是以TD-error成正比的非均匀概率进行抽样的,但是在AC算法中即连续动作空间中,会表现出低效果. 分析结果是:Actor不能有效的从high TD-error的transi ...

  10. c#构建具有用户认证与管理的socks5代理服务端

    Socks 协议是一种代理 (Proxy) 协议, 例如我们所熟知的 Shdowsocks 便是 Socks 协议的一个典型应用程序, Socks 协议有多个版本, 目前最新的版本为 5, 其协议标准 ...