如何讓同一網段客戶端訪問LVS-NAT主機

kusix發表於2011-11-22
今天在繼續redis的壓力測試時,發現一個“奇怪”的現象,我本機可以訪問的通LVS主機,但測試伺服器卻不行。在請教運維部的同事之後才知道,原來LVS-NAT模式下,客戶端是不能和RS在一個網段的( :cry: 知識欠缺啊,以前只耍過DR模式)。

但是真的不能麼?google一番,發現一個童鞋提過一句話:不是不可以,但是要修改路由表。

這一下就醍醐灌頂了,LVS-NAT模式通常用於銜接不同網段之間的請求,如果客戶端與RS主機在同一網段的話,會由於RS主機在響應請求時將響應直接發給client而不經過LVS主機,導致client認為這是個錯誤而丟棄這個響應,表現出來的就是timeout。而修改RS的路由表,則可以指定它該如何響應。

[code="java"]
# route add -host 10.10.224.191 gw 10.10.224.251
# netstat -r
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
10.10.224.191 10.10.224.251 255.255.255.255 UGH 0 0 0 eth0
10.10.224.0 * 255.255.255.0 U 0 0 0 eth0
192.168.1.0 * 255.255.255.0 U 0 0 0 eth1
169.254.0.0 * 255.255.0.0 U 0 0 0 eth1
default 10.10.224.251 0.0.0.0 UG 0 0 0 eth0
[/code]

191就是客戶端,251是VIP,我們指定RS在響應191的請求時,使用LVS主機作為閘道器,這樣就使得即使它們在同一個網段,響應時也必須經過LVS主機。
測試一下,果然成功。

相關文章