LBの配下に、WEBサーバ(apache)を複数台置いて画像を配信してたら
MAC(OS X10.8.6)、ubuntu(11.04)で画像が見れたり、見れなかったり。
状況kwsk
・LBの振分ルールはラウンドロビン。
・LBからWEBサーバに対しては、SNATしてる。
・WEBサーバは常時2000コネクションくらい張っているんだけど
接続がまったくない状態でも同じ現象が発生する。
・逆にWEBサーバが1台やら2台だと再現しない。
・上記端末から、画像取得ができない(WindowsXP、Vista、7)はさくさくいける。
・ブラウザ依存じゃなかった(Firefox、Opera、Safari、Choromeでもだめ)
・IPV6はONでもOFFでもでる。
・Wiresharkでキャプチャしたら、SYN+ACKが返ってこない・SYNのリトライたくさん。
原因は・・・
・サーバ側で、net.ipv4.tcp_tw_recycleが有効になってて
・クライアント側のnet.ipv4.tcp_timestampsが有効になってて
・NATしてる環境だとSYNパケットを落とす?ようだ。
なんでかと考えたら。
クライアント側が持ってるTCPのタイムスタンプとサーバ側で保持してるタイムスタンプに
相違がでてうまく通信できないのか・・・サーバ側が、net.ipv4.tcp_tw_recycleを
有効にしてる=すぐ再利用しようとする→タイムスタンプがすれる?ってことかな・・
うーン
説明難しい太郎
WEBサーバ側で↓の設定いれたらとりあえず解決した。
#今の設定確認
/sbin/sysctl -a | grep tw_recycle
net.ipv4.tcp_tw_recycle = 1
#sysctl.confをバックアップ・編集
cp -rp /etc/sysctl.conf /etc/sysctl.conf.back
vim /etc/sysctl.conf
#追記
net.ipv4.tcp_tw_recycle = 0
#差分確認
vimdiff /etc/sysctl.conf /etc/sysctl.conf.back
#反映
/sbin/sysctl -p
#確認
/sbin/sysctl -a | grep tw_recycle
net.ipv4.tcp_tw_recycle = 0
ただ、無効にするとTIME_WAITの数が多くなるので
socket使い果たさないようにきをつけお
0 件のコメント:
コメントを投稿