今までずっと LVS DSR で、リアルサーバでは iptables に、次のようなルールを追加した REDIRECT していましたが、iptables のオーバーヘッドが気になったので、lo:0 を定義するように変更してみました。
*nat
: PREROUTING ACCEPT [0:0]
: OUTPUT ACCEPT [0:0]
: POSTROUTING ACCEPT [0:0]
-A PREROUTING -d VIP -j REDIRECT
COMMIT
1.lo:0 を定義する
$ sudo vi /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
IPADDR=VIP
NETMASK=255.255.255.255
ONBOOT=yes
2. lo:0 を起動する
$ sudo ifup lo:0
3. sysctl を変更する、net.ipv4.netfilter.ip_conntrack_max の設定は不要なのであわせて削除する
$ sudo vi /etc/sysctl
# Ignore ARP
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
4. sysctl の設定を再読み込みする
$ sudo sysctl -p
5. iptables を停止する
$ sudo service iptables stop
$ sudo chkconfig iptables off
# 負荷的には、ほとんど変わらずといった印象、iptables を無効にすることで SSL の場合とかにリアルサーバ側で REDIRECT できないことが唯一の欠点かと思いますが、リアルサーバ側で ip_conntrack の設定に悩まなくて済むのはいいことだと思いますねぇ。
Tags: linux, lvs