關于ip_conntrack跟蹤連接滿導致網絡丟包問題的分析

http://ixdba.blog.51cto.com/2895551/1737642

我們的線上web服務器在訪問量很大時,就會出現網絡連接丟包的問題,通過dmesg命令查看日志,發現如下信息:

kernel: ip_conntrack: table full, dropping packet.kernel: printk: 1 messages suppressed.kernel: ip_conntrack: table full, dropping packet.kernel: printk: 2 messages suppressed.kernel: ip_conntrack: table full, dropping packet.

這里面關鍵的信息是"ip_conntrack: table full, dropping packet",從這里可以判斷出這跟iptables有關系了,因為iptables防火墻使用了ip_conntrack內核模塊實現連接跟蹤功能,所有的進出數據包都會記錄在連接跟蹤表中,包括tcp,udp,icmp等,一旦連接跟蹤表被填滿以后,就會發生丟包,導致網絡不穩定。

而我們的服務器確實打開了iptables防火墻,并且都是在網站流量非常高的時候經常會出現這個問題。這個問題的原因是由于web服務器收到了大量的連接,在啟用了iptables的情況下,iptables會把所有的連接都做鏈接跟蹤處理,這樣iptables就會有一個鏈接跟蹤表,當這個表滿的時候,就會出現上面的錯誤。

iptables的鏈接跟蹤表最大容量配置文件如下:

centos5 netfilter 參數配置文件:

/proc/sys/net/ipv4/netfilter/ip_conntrack_max或者/proc/sys/net/ipv4/ip_conntrack_max

centos6 netfilter 參數配置文件:

/proc/sys/net/netfilter/nf_conntrack_max

由于nf_conntrack 工作在3層,支持IPv4和IPv6,而ip_conntrack只支持IPv4,因此nf_conntrack模塊在Linux的2.6.15內核中被引入,而ip_conntrack在Linux的2.6.22內核被移除(centos6.x版本),因此不同版本的系統,配置文件也就不盡相同了。目前大多的ip_conntrack_*已被 nf_conntrack_* 取代,很多ip_conntrack_*僅僅是個軟鏈接,原先的ip_conntrack配置目錄/proc/sys/net/ipv4/netfilter/ 仍然存在,但是新的nf_conntrack在/proc/sys/net/netfilter/中,這樣做是為了能夠向下的兼容。

了解了配置文件的變化后,我們看看這個問題該如何解決,解?方法一般有兩個:

1、調整 /proc/ 下面的參數

可以增大適當conntrack 的條目,在CentOS5/RHEL 5下:

(1)運行

sysctl -w net.ipv4.netfilter.ip_conntrack_max=655360

(2).在 /etc/sysctl.conf 中加入:

net.ipv4.netfilter.ip_conntrack_max = 655360

(3).使其生效

sysctl -p

在CentOS 6 /RHEL6下:

(1)運行

sysctl -w net.nf_conntrack_max=100000

(2)在 /etc/sysctl.conf 中加入:

net.nf_conntrack_max = 100000

(3)使其生效

sysctl -p

2、不使用ip_conntrack模塊

在CentOS5/RHEL 5下:

不使用ip_conntrack,需要移除state模塊,因為使用該模塊需要加載ip_conntrack。確保iptables規則中沒有出現類似state模塊的規則,如果有的話將其移除:

然后注釋 /etc/sysconfig/iptables-config 中的:

IPTABLES_MODULES="ip_conntrack_netbios_ns"

最后移除ip_conntrack模塊:

[root@waiwei ipv4]#  modprobe -r ip_conntrack_netbios_ns xt_state

在CentOS6/RHEL6下:

[root@waiwei ipv4]#  modprobe -r nf_conntrack_ipv4 xt_state
[root@waiwei ipv4]#  modprobe -r nf_conntrack

現在 /proc/net/ 下面應該沒有nf_conntrack了。

兩種方法中,第一種簡單,但是治標不治本,第二種稍微麻煩,但是畢竟使用,大家可根據情況進行選擇。

原創文章,作者:Net 20-北京自由鳥,如若轉載,請注明出處:http://www.www58058.com/17451

(2)
Net 20-北京自由鳥Net 20-北京自由鳥
上一篇 2016-06-03
下一篇 2016-06-03

相關推薦

  • Linux文件系統

    Linux:glibc 程序編譯方式: 動態鏈接 靜態編譯 進程的類型: 終端:硬件設備,關聯一個用戶接口 與終端相關:通過終端啟動 與終端無關:操作引導啟動過程當中自動啟動 操作系統的組成: 靜態:kernel, application 文件系統:層級結構 FHS: Filesystem Hierarchy Standard /bin:所有用戶可用的基本命…

    Linux干貨 2016-11-10
  • Linux系統上獲取命令的幫助信息

    獲取命令的使用幫助: 內部命令:help COMMAND   #針對內檢命令 外部命令: (1) 命令自帶簡要格式的使用幫助      COMMAND –help (2) 使用手冊:manual  [root@localhost /]# ls /usr/share/man   #記住這個…

    Linux干貨 2016-08-15
  • MySQL入門命令知識

    簡單介紹下吧,MySQL應用的場景大多數互聯網公司第一次賣身是賣個了sun好像是10億,第二次是連同sun自己,以74億美元被賣給了Orecle~后面MySQL原作者站出來說,MySQL會存在閉源風險,整了個MariaDB~我也是醉了,也不考慮下我們的痛苦!下面簡要介紹下MySQL的入門知識。    一、MySQL有三種定義語言 &nbs…

    2016-12-05
  • ansible配置與應用

    無法上傳圖片 一、程序主要文件: ansible ansible-playbook ansible-doc 二、程序發布: 要求: 1.不能影響用戶體驗 2.系統不能停機 3.不能導致系統故障或造成系統完全不可用。 發布路徑: /webapps/tuangou /webapps/tuangou-1.1 /webapps/tuangou-1.2. 在調度器上下…

    Linux干貨 2016-11-14
  • SQL Server 2012 故障轉移群集最佳實踐

    一、Windows server  2012 系統主域的安裝配置 功能介紹:  SQL Server 故障轉移群集在網絡上顯示為一臺計算機上的單個 SQL Server 實例。在群集內部,一次只有一個節點擁有群集資源組,滿足針對該故障轉移群集實例的所有客戶端請求。在出現故障(硬件故障、操作系統故障、應用程序或服務故障)或進行計劃升級時,組…

    Linux干貨 2015-10-27
  • MYSQL高級運用-MHA(提供主從復制高可用,主節點故障時,進行故障轉移)

    MHA的介紹、重用工具;
    MHA的安裝;
    搭建MYSQL主從復制架構,運用MHA實現其高可用,主節點故障時,進行故障轉移;并恢復整個架構;

    2017-09-24
欧美性久久久久