概述
Netfilter 是linux 内在的一个软件框架,用来记录管理网络数据包,Netfilter提供了5个hook 来记录管理网络包。
Netfilter进行包的管理,则需要记录每个连接的状态信息。这就是nf_conntrack的工作内容。
PREROUTING, 所有包都会经过这个hook
LOCAL INPUT, 进入本机的包会经过这个hook
FORWARD, 不进入本机的包,做转发的包会经过这个hook
LOCAL OUTPUT, 从本机出去的包会经过这个hook
POSTROUTING, 所有出去的包都会经过这个hook
一:ip_conntrack 与 nf_conntrack_ipv4 是一个相同的包,ip_conntrack是linux 2.6内核以前的名称。
基础云平台 > Linux Netfilter 内核参数调优 > image2021-9-28 13:47:46.png
二:调整一对参数,系统小于4G内存的 net.netfilter.nf_conntrack_buckets 默认值是16384, 大于4G内存的默认值是 65535,对于大于4G内存且并发比较大的系统建议调整为262144;同时net.netfilter.nf_conntrack_max默认就是65535;
基于线上都是CentOS7 x86_64 大于4G内存的系统,如果并发大建议这样设置(并发小于1W的,使用默认值)
32G内存推荐:
内存使用最大值:1048576* 376 + 262144 * 16 = 398458880(byte)=380MiB
net.netfilter.nf_conntrack_buckets = 131072
net.netfilter.nf_conntrack_max = 1048576
96G 内存推荐:
net.netfilter.nf_conntrack_buckets = 262144
net.netfilter.nf_conntrack_max = 2310720
内存使用最大值:2310720 * 376 + 262144 * 16 = 873025024(byte)=833MiB
计算公式: total_mem_used(bytes) = conntrack_max * sizeof(struct nf_conntrack) + conntrack_buckets * sizeof(struct list_head)
CONNTRACK_MAX = RAMSIZE (in bytes) / 65535 / 2 计算模型:(64(G) * 102410241024/65535/2)(2(G) * 102410241024/16384/2)
CONNTRACK_BUCKETS= CONNTRACK_MAX/8
基于线上都是CentOS7 x86_64:sizeof(struct nf_conntrack): 376 sizeof(struct list_head): 16
调整以上参数,是为了在大量tcp 并发的情况下,解决tcp不能连接及报nf_conntrack:table full dropping packet;
重点:执行echo “262144” > /sys/module/nf_conntrack/parameters/hashsize 才能修改net.netfilter.nf_conntrack_buckets = 262144 通过sysctl.conf 定义不生效会报错。
重点:如果系统没有启用nf_conntrack模块,可以忽略以上调优,K8S集群都是要求开启NAT此模块的,可以根据具体系统内存调整。
cat /proc/sys/net/netfilter/nf_conntrack_buckets
cat /proc/sys/net/netfilter/nf_conntrack_max
为了不让net.netfilter.nf_conntrack_max条目快速迭代,调整必要的参数,专门对TCP挥手做调整
条目路径:/proc/net/nf_conntrack
默认参数
net.netfilter.nf_conntrack_tcp_timeout_established = 432000 (5天)
net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120
net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60
net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120
调优参数
net.netfilter.nf_conntrack_tcp_timeout_established = 84600 (1天)
net.netfilter.nf_conntrack_tcp_timeout_time_wait = 60
net.netfilter.nf_conntrack_tcp_timeout_close_wait = 30
net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 60
记录状态
ipv4 2 tcp 6 299 ESTABLISHED src=192.168.1.1 dst=192.168.1.6 sport=58747 dport=22 src=192.168.1.6 dst=192.168.1.1 sport=22 dport=58747 [ASSURED] mark=0 secctx=system_u:object_r:unlabeled_t:s0 zone=0 use=2
最后
以上就是舒服人生为你收集整理的Linux Netfilter 内核参数调优的全部内容,希望文章能够帮你解决Linux Netfilter 内核参数调优所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复