iptablesがtable full状態になるとパケットがドロップされる

2012 10 14 17 00 54

Apacheのaccess_logが記録されない障害

LVS配下のWEBサーバーでiptablesを動かしていたのですが、秒間アクセス2000くらいからApacheのアクセスログが記録されないという障害に悩まされていました。LVS・Apacheともに正常に稼働していて、access_logも全部記録されないわけではなく一定の確率で記録されていませんでした。error_logにも原因と思われる兆候なし。いわゆるログロストが断続的に続いている状態で、Apacheのパフォーマンスチューニングやカーネルパラメータのチューニングも行ったのですが、原因の方が掴みきれずにいました。

/var/log/messagesに答えがありました

Apacheのログを見ていても原因が分からないならば、syslogの方はどうなんだろう?ということで、/var/log/messagesを見てみました。そうしたら、以下のログが出力されていました。

Sep  4 12:20:02 api04 kernel: nf_conntrack: table full, dropping packet.
Sep  4 12:20:02 api04 kernel: nf_conntrack: table full, dropping packet.
Sep  4 12:20:02 api04 kernel: nf_conntrack: table full, dropping packet.
Sep  4 12:20:02 api04 kernel: nf_conntrack: table full, dropping packet.
Sep  4 12:20:02 api04 kernel: nf_conntrack: table full, dropping packet.
Sep  4 12:20:05 api04 kernel: __ratelimit: 37 callbacks suppressed
Sep  4 12:20:05 api04 kernel: nf_conntrack: table full, dropping packet.
Sep  4 12:20:05 api04 kernel: nf_conntrack: table full, dropping packet.
Sep  4 12:20:05 api04 kernel: nf_conntrack: table full, dropping packet.
Sep  4 12:20:05 api04 kernel: nf_conntrack: table full, dropping packet.
Sep  4 12:20:05 api04 kernel: nf_conntrack: table full, dropping packet.
Sep  4 12:20:05 api04 kernel: nf_conntrack: table full, dropping packet.
Sep  4 12:20:05 api04 kernel: nf_conntrack: table full, dropping packet.
Sep  4 12:20:05 api04 kernel: nf_conntrack: table full, dropping packet.
Sep  4 12:20:05 api04 kernel: nf_conntrack: table full, dropping packet.
Sep  4 12:20:05 api04 kernel: nf_conntrack: table full, dropping packet.
Sep  4 12:20:12 api04 kernel: __ratelimit: 87 callbacks suppressed
Sep  4 12:20:12 api04 kernel: nf_conntrack: table full, dropping packet.
Sep  4 12:20:12 api04 kernel: nf_conntrack: table full, dropping packet.
Sep  4 12:20:12 api04 kernel: nf_conntrack: table full, dropping packet.
Sep  4 12:20:13 api04 kernel: nf_conntrack: table full, dropping packet.
Sep  4 12:20:13 api04 kernel: nf_conntrack: table full, dropping packet.
Sep  4 12:20:13 api04 kernel: nf_conntrack: table full, dropping packet.
Sep  4 12:20:13 api04 kernel: nf_conntrack: table full, dropping packet.
Sep  4 12:20:13 api04 kernel: nf_conntrack: table full, dropping packet.
Sep  4 12:20:59 api04 kernel: possible SYN flooding on port 80. Sending cookies.
Sep  4 12:21:59 api04 kernel: possible SYN flooding on port 80. Sending cookies.
Sep  4 12:22:59 api04 kernel: possible SYN flooding on port 80. Sending cookies.

iptablesがtable full状態になっていた

nf_conntrack: table full, dropping packet.のエラーはiptablesにおいてトラッキングテーブルが溢れてパケットを破棄したことを示すようです。

http://d.hatena.ne.jp/hogem/20121126/1353939767
http://www.e-agency.co.jp/column/20121225.html

ほぼ恒常的に出続けていて、ロストしているログの件数にほぼ等しい数が出ています。カーネルパラメータ(/etc/sysctl.conf)に以下を追加してトラッキングテーブルを拡張しました。

net.netfilter.nf_conntrack_max = 100000
net.nf_conntrack_max = 100000

sysctl -pにて即時反映させています。この対応を行った以降は、パケットが破棄されたエラーは出力されなくなり、Apacheのログも正常に取得することが出来るようになりました。