LVS之NAT、TUN模式配置
LVS之DR请参考上一篇文章。
NAT模式实验
服务器IP及部署角色如下:
- node01:192.168.252.10,负载均衡器。
- node02:192.168.252.11,Real Server,上面部署httpd,对外提供服务。
- node03:192.168.252.12,Real Server,上面部署httpd,对外提供服务。
部署图如下:
具体部署步骤如下:
- node02、node03分别安装httpd,并在浏览器测试能正常访问页面。
- node02、node03分别配置默认网关为node01(lvs负载均衡器的DIP)。
# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.252.2 0.0.0.0 UG 100 0 0 ens32
192.168.252.0 0.0.0.0 255.255.255.0 U 100 0 0 ens32
# route del default gw 192.168.252.2
# route add default gw 192.168.252.10
# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.252.10 0.0.0.0 UG 0 0 0 ens32
192.168.252.0 0.0.0.0 255.255.255.0 U 100 0 0 ens32
这里只是临时配置,临时生效,要想永久生效,需要修改/etc/sysconfig/network-scripts/ifcfg-ens32
中的默认网关。
- node01的配置
配置VIP:ifconfig ens32:5 192.168.224.100/24
。
lvs配置:
# ipvsadm -At 192.168.224.100:80 -s rr
# ipvsadm -at 192.168.224.100:80 -r 192.168.252.11:80 -m -w 1
# ipvsadm -at 192.168.224.100:80 -r 192.168.252.12:80 -m -w 1
# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.224.100:80 rr
-> 192.168.252.11:80 Masq 1 0 0
-> 192.168.252.12:80 Masq 1 0 0
centos默认是不开启转发功能,所以需要激活ip转发功能,我测试的时候不需要开启这个配置,先记录到这里吧:
# echo 1 > /proc/sys/net/ipv4/ip_forward
注意/proc/
下的文件都是内核虚拟出来的,不能用vi打开,修改后立刻生效,但是都是临时的,要想永久生效,需在/etc/sysctl.conf
设置net.ipv4.ip_forward = 1
,并重启系统。
TUN模式实验
TUN模式只不过在DR模式的基础至少加了一层隧道而已。
服务器IP及部署角色如下:
- node01:192.168.252.10,负载均衡器。
- node02:192.168.252.11,Real Server,上面部署httpd,对外提供服务。
- node03:192.168.252.12,Real Server,上面部署httpd,对外提供服务。
具体部署步骤如下:
- node02、node03分别安装httpd,并在浏览器测试能正常访问页面。
- node01、node02、node03分别开启隧道支持
modprobe ipip
。 - node02、node03上执行如下脚本:
#!/bin/bash
VIP=192.168.252.100
echo 1 > /proc/sys/net/ipv4/conf/tunl0/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/tunl0/arp_announce
echo 0 > /proc/sys/net/ipv4/conf/tunl0/rp_filter
echo 1 > /proc/sys/net/ipv4/conf/ens32/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/ens32/arp_announce
echo 0 > /proc/sys/net/ipv4/conf/ens32/rp_filter
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter
ifconfig tunl0 $VIP netmask 255.255.255.255
rp_filter参数:当IP隧道数据包到达Real Server192.168.252.11
服务器后,首先进行拆包,发现目标IP为192.168.252.100(配置在tunl0这个网卡上),但是这个数据包是由192.168.252.11
ens32这个网卡接收的,那么系统默认认为这是一个不合法的数据包,故而拒绝之,所以要配置rp_filter接收这种包。
- node01上执行如下脚本:
#!/bin/bash
VIP=192.168.252.100
RIP1=192.168.252.11
RIP2=192.168.252.12
ipvsadm -C
ifconfig ens32:1 $VIP/24
ipvsadm -A -t $VIP:80 -s rr
ipvsadm -a -t $VIP:80 -r $RIP1:80 -i
ipvsadm -a -t $VIP:80 -r $RIP2:80 -i