LVS on Xen上の設定(失敗)

ということでLVSの設定を仕込んでロードバランスしてみたいと思います。

lvsにて

インストール

# yum -y install ipvsadm

サービス用仮想アドレス追加 (192.168.0.31をサービス受けつけアドレスにする)

# vi /etc/sysconfig/network-scripts/ifcfg-eth0:0

DEVICE=eth0:0
BOOTPROTO=static
BROADCAST=192.168.0.255
IPADDR=192.168.0.31
IPV6INIT=yes
IPV6_AUTOCONF=yes
NETMASK=255.255.255.0
NETWORK=192.168.0.0
ONBOOT=yes

バランシングの設定。ラウンドロビン+NATで設定

# ipvsadm -C
# ipvsadm -A -t 192.168.0.31:80 -s rr
# ipvsadm -a -t 192.168.0.31:80 -r 192.168.1.11 -m
# ipvsadm -a -t 192.168.0.31:80 -r 192.168.1.12 -m

設定の確認

# ipvsadm -L

IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.0.31:http lc
  -> 192.168.1.12:http            Masq    1      0          0         
  -> 192.168.1.11:http            Masq    1      0          0 

設定終了。クライアントから192.168.0.31をたたいてみるも応答が返ってこない。なんでか良くわからんので順番に調べてみる

lvsにて

クライアントからのリクエスト確認。来てるっぽい

# tcpdump -n -i eth0 port 80

07:33:30.438260 IP 192.168.0.21.54451 > 192.168.0.31.http: S 1048579348:1048579348(0) win 65535 

l vsからクライアントへ向かうリクエスト。行ってるっぽいけどソースアドレスがクライアントから直になってる。NATで設定してるはずなのになんかおかしい気がする。

# tcpdump -n -i eth1 port 80

07:35:18.039102 IP 192.168.0.21.54451 > 192.168.1.12.http: P 1:6(5) ack 0 win 65535 

-c でLVSのコネクションテーブルがみれるらしい。stateがFIN_WAITなので実ホストからのACKを待っている状態かな。

# ipvsadm -L -c -n

pro expire state       source             virtual            destination
TCP 01:57  FIN_WAIT    192.168.0.21:54461 192.168.0.31:80    192.168.1.12:80

web1にて

クライアントからのリクエスト確認。あいかわらずソースアドレスがlvsで書き換えられてなくクライアントから直できてる。これのせいかな?
NATで設定したはずだからlvsのアドレスで上書きされるはずがされてないのが原因な気がする。

# tcpdump -n -i eth0 port 80

07:42:59.979908 IP 192.168.0.21.54509 > 192.168.1.11.http: S 4268655527:4268655527(0) win 65535 
07:42:59.980027 IP 192.168.1.11.http > 192.168.0.21.54509: S 3585005400:3585005400(0) ack 4268655528 win 5792 

色々調べてみたけどめぼしいもの見当たらず。Xen上で同じ様なことして同じ様な症状に見舞われてる人もいるみたいなのでウマくいかないのかなー?

http://www.grandarbre.net/2007/11/centos50lvslinux-virtual-serve.html

もしくはカーネルモジュールまわりでNAT関係とか何かが足りないから追加しないといけないのかも。準仮想化でそんなことできるのだろうか orz。もしくはiptablesのPOSTROUTINGとか使ってアドレス上書きしてやればつながるかな....。やっぱ粘って完全仮想化をすべきだったか...。なんかそんな予感はしたんだよなぁ。とりあえず上記サイトはDSRで試してるみたいなんでそっちやってみますかね。本当はabを使ってパフォーマンスとか見てみたいのだがXen触ったおかげで当初と目的がずれて来ている気するけどまあいっか。そもそも物理的には1台なんだし....。

追記

DSRもうまくいかない...ぷぎゃー。流石にお手上げかなぁ。ま、LVSの触り方もわかったしボチボチ調べますかねぇ。