首页 > 代码库 > lvs的nat模式和dr模式
lvs的nat模式和dr模式
一.lvs的nat模式:
web端:192.168.3.124 通过访问nginx的反向代理192.168.8.123:80,传送到后端realserver上。
lvs端eth0: dip 192.168.3.123 eth0:0 vip 192.168.8.123
realserver1端eth0:192.168.3.128 echo "hello,192.168.3.128" > 1.html
realserver2端eth0:192.168.3.129 echo "hello,192.168.3.129" > 1.html
在lvs端操作:
ipvsadm -A -t 192.168.8.123:80 -s wrr
ipvsadm -a -t 192.168.8.123:80 -r 192.168.3.128:80 -m -w 2
ipvsadm -a -t 192.168.8.123:80 -r 192.168.3.129:80 -m -w 2
采用加权轮询的算法,但权重默认都为2。
问题来了:
在lvs服务上curl 192.168.8.123/1.html可以正常轮询访问,但是在192.168.3.124的就不可以,提示“curl: (7) couldn‘t connect to host”,而且telnet 192.168.8.123也不通
解决方法:
将realserver的网关指向vip 192.168.8.123,vip和realserver的ip是不是同一网段都可以的,只需要改realserver的网关即可。
注:若realserver网关指向vip后导致无法上网,我们需要在网卡上新建子ip,并将这些子ip加到lvs中,且需要配置单独的路由策略,用于lvs包转发。
二.lvs的dr模式:
web端:192.168.3.124 通过访问nginx的反向代理192.168.8.123:80,传送到后端realserver上。
lvs端eth0: dip 192.168.3.123 eth0:0 vip 192.168.8.123
realserver1端eth0:192.168.3.128 eth0:0 vip 192.168.8.128echo "hello,192.168.3.128" > 1.html
realserver2端eth0:192.168.3.129 eth0:0 vip 192.168.8.129echo "hello,192.168.3.129" > 1.html
在lvs端操作:
ipvsadm -A -t 192.168.8.123:80 -s wrr
ipvsadm -a -t 192.168.8.123:80 -r 192.168.8.128:80 -g -w 2
ipvsadm -a -t 192.168.8.123:80 -r 192.168.8.129:80 -g -w 2
在两台realserver上操作:
ifconfig lo:0 192.168.8.123 netmask 255.255.255.255
echo “1” >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo “2” >/proc/sys/net/ipv4/conf/lo/arp_announce
echo “1” >/proc/sys/net/ipv4/conf/all/arp_ignore
echo “2” >/proc/sys/net/ipv4/conf/all/arp_announce
sysctl -p
问题:
lvs的vip 80端口无法访问,ipvsadm -L -n -c 都处于SYN_RECV 状态,但是vip rip 都能访问
解决方案:
检查realserver端的路由
[root@usvr-128 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.3.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
192.168.8.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0
0.0.0.0 192.168.3.1 0.0.0.0 UG 0 0 0 eth0
从上面可以看到,目的网段192.168.8.0 走的接口是eth0(这是系统根据设置的ip自动添加的路由) ,而我们将vip绑定在lo:0上,因此不会发送给vip,我们需要更改路由:
ip route add 192.168.8.123/32 dev lo:0
[root@usvr-128 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.8.123 0.0.0.0 255.255.255.255 UH 0 0 0 lo
192.168.3.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
192.168.8.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0
0.0.0.0 192.168.3.1 0.0.0.0 UG 0 0 0 eth0
好了,更改完路由后就通了
注:1.因为dr模式的原理是lvs调度器修改mac地址为真是服务器地址,报文的目的ip还是vip,网卡只会把目的mac和目的ip都是自己的报文上送到cpu;要让realserver处理目的ip和目的mac都为自己的报文,因此需要将realserver的lo上绑定vip。
2.网卡重启和服务器重启后,lo上绑定的vip会失效。lvs的nat模式和dr模式