zoukankan      html  css  js  c++  java
  • nf_conntrack: table full

    具体告警判断条件

     #!/bin/bash
    
      # This plugin checks for common network issues.
      # Currently only checks if conntrack table is more than 90% used.
    
      readonly OK=0
      readonly NONOK=1
      readonly UNKNOWN=2
    
      # "nf_conntrack" replaces "ip_conntrack" - support both
      readonly NF_CT_COUNT_PATH='/proc/sys/net/netfilter/nf_conntrack_count'
      readonly NF_CT_MAX_PATH='/proc/sys/net/netfilter/nf_conntrack_max'
      readonly IP_CT_COUNT_PATH='/proc/sys/net/ipv4/netfilter/ip_conntrack_count'
      readonly IP_CT_MAX_PATH='/proc/sys/net/ipv4/netfilter/ip_conntrack_max'
    
      if [[ -f $NF_CT_COUNT_PATH ]] && [[ -f $NF_CT_MAX_PATH ]]; then
        readonly CT_COUNT_PATH=$NF_CT_COUNT_PATH
        readonly CT_MAX_PATH=$NF_CT_MAX_PATH
      elif [[ -f $IP_CT_COUNT_PATH ]] && [[ -f $IP_CT_MAX_PATH ]]; then
        readonly CT_COUNT_PATH=$IP_CT_COUNT_PATH
        readonly CT_MAX_PATH=$IP_CT_MAX_PATH
      else
        exit $UNKNOWN
      fi
    
      readonly conntrack_count=$(< $CT_COUNT_PATH) || exit $UNKNOWN
      readonly conntrack_max=$(< $CT_MAX_PATH) || exit $UNKNOWN
      readonly conntrack_usage_msg="${conntrack_count} out of ${conntrack_max}"
    
      if (( conntrack_count > conntrack_max * 9 /10 )); then
        echo "Conntrack table usage over 90%: ${conntrack_usage_msg}"
        exit $NONOK
      else
        echo "Conntrack table usage: ${conntrack_usage_msg}"
        exit $OK
      fi

     解决方法

    参考阿里云,官方文档

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

    • OS CentOS7.7

      LSB Version: :core-4.1-amd64:core-4.1-noarch
      Distributor ID: CentOS
      Description: CentOS Linux release 7.7.1908 (Core)
      Release: 7.7.1908
      Codename: Core

    • OS Kernel版本

       Linux PROD-DATA-K8S-WN1 5.11.1-1.el7.elrepo.x86_64 #1 SMP Mon Feb 22 17:30:33 EST 2021 x86_64 x86_64 x86_64 GNU/Linux

    问题现象

    Kubernetes环境,具体的网络插件使用的是Cilium,并开启eBPF功能,正常情况下会规避netfilter的功能,但是使用到Docker就会使用到iptables功能

    摘抄其它

    nf_conntrack是Linux系统内NAT的一个跟踪连接条目的模块。nf_conntrack模块会使用一个哈希表记录TCP协议“established connection”记录,当这个哈希表满之后,新的连接会引发“nf_conntrack: table full, dropping packet”错误。关于nf_conntrack模块中的重要参数,可参考如下信息。

    1. nf_conntrack_buckets:哈希表的大小,可在模块加载时指定参数,也可以通过sysctl命令修改。当系统内存大于等于4GB时,它的默认值是“65536”。
    2. nf_conntrack_max:哈希表的最大节点个数,即nf_conntrack模块支持的最大连接数。当系统内存大于等于4G时,它的默认值是“262144”。对于处理大量连接的服务器来说,该默认值相对较小。
    3. nf_conntrack_tcp_timeout_time_wait:nf_conntrack模块中保存time_wait状态的TCP连接时间,默认值为“120s”。

    虽然在dmesg日志没有找到相对应的报错信息,但是必须引起戒备之心,解决如下

    根据自己业务场景调整参数的值,此值不能调整过高,众所周知TCP连接消耗内存,也有具体公式

    阿里云官方建议,如果业务场景符合 “高并发,短链接”,那么可以根据调整这二个参数解决目前的问题,官方建议nf_conntrack_max = nf_conntrack_buckets * 4

    net.netfilter.nf_conntrack_buckets = 131072
    net.netfilter.nf_conntrack_max = 524288
    net.netfilter.nf_conntrack_tcp_timeout_time_wait = 60

     

        

  • 相关阅读:
    flask 第三方组件
    Flask基础与进阶
    odoo10 视图
    odoo10 ORM操作
    odoo10基础
    字典的setdefault方法
    redis常用操作
    git常用命令与操作
    vue_axios
    odoo 权限设置
  • 原文地址:https://www.cnblogs.com/apink/p/15499536.html
Copyright © 2011-2022 走看看