一、DR 模式工作原理
如图,LVS-DR的工作原理,在图中已经说明,下面,我们来列举 LVS-DR 模式特点:
1、RIP 可以使用私有地址,也可以使用公网地址,如果使用公网地址,则可以直接对 RIP 进行访问。
2、所有请求的数据包必须经过 Director Server,但是所有响应的数据包必须不能经过 Director Server,这样使得在高负载网络环境中,降低了 Director Server 的压力。
3、Real Server 服务器的网关绝对不能指定为 DIP,因为,响应数据包不需要经过 Director Server。
4、Real Server 和 Director Server 必须在同一物理网络中。
5、需要在 Real Server 的 lo 网卡上绑定 VIP。
二、LVS-DR 模式部署
1、IP 地址分配
2、Real ServerA 服务器配置
a、VIP 绑定
[root@weba ~]# cd /etc/sysconfig/network-scripts/
[root@weba network-scripts]# cp ifcfg-lo{,:0}
[root@weba network-scripts]# vim ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.20.134
NETMASK=255.255.255.255
NETWORK=192.168.20.134
BROADCAST=192.168.20.134
ONBOOT=yes
NAME=lo:0
[root@weba network-scripts]# ifup ifcfg-lo:0
[root@weba network-scripts]# ifconfig
如图:
b、修改内核参数,使得客户端发送到 VIP 的请求只有调度服务器响应,Real Server A(web服务器)不要响应。
[root@weba ~]# sysctl -a | grep net.ipv4.conf.all.arp_ignore
[root@weba ~]# echo "net.ipv4.conf.all.arp_ignore = 1" >> /etc/sysctl.conf
[root@weba ~]# sysctl -a | grep net.ipv4.conf.lo.arp_ignore
[root@weba ~]# echo "net.ipv4.conf.lo.arp_ignore = 1" >> /etc/sysctl.conf
[root@weba ~]# sysctl -a | grep net.ipv4.conf.all.arp_announce
[root@weba ~]# echo "net.ipv4.conf.all.arp_announce = 2" >> /etc/sysctl.conf
[root@weba ~]# sysctl -a | grep net.ipv4.conf.lo.arp_announce
[root@weba ~]# echo "net.ipv4.conf.lo.arp_announce = 2" >> /etc/sysctl.conf
[root@weba ~]# sysctl –p
如图:
3、Real ServerB 服务器配置:
a、VIP 绑定
[root@webb ~]# cd /etc/sysconfig/network-scripts/
[root@webb network-scripts]# cp ifcfg-lo{,:0}
[root@webb network-scripts]# vim ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.20.134
NETMASK=255.255.255.255
NETWORK=192.168.20.134
BROADCAST=192.168.20.134
ONBOOT=yes
NAME=lo:0
[root@webb network-scripts]# ifup ifcfg-lo:0
[root@webb network-scripts]# ifconfig
如图:
b、修改内核参数,使得客户端发送到 VIP 的请求只有调度服务器响应,Real ServerB (web服务器)不要响应。
[root@webb ~]# sysctl -a | grep net.ipv4.conf.all.arp_ignore
[root@webb ~]# echo "net.ipv4.conf.all.arp_ignore = 1" >> /etc/sysctl.conf
[root@webb ~]# sysctl -a | grep net.ipv4.conf.lo.arp_ignore
[root@webb ~]# echo "net.ipv4.conf.lo.arp_ignore = 1" >> /etc/sysctl.conf
[root@webb ~]# sysctl -a | grep net.ipv4.conf.all.arp_announce
[root@webb ~]# echo "net.ipv4.conf.all.arp_announce = 2" >> /etc/sysctl.conf
[root@webb ~]# sysctl -a | grep net.ipv4.conf.lo.arp_announce
[root@webb ~]# echo "net.ipv4.conf.lo.arp_announce = 2" >> /etc/sysctl.conf
[root@weba ~]# sysctl –p
如图:
说明,以上4个内核参数的含义为:
arp_ignore 定义了对目标地址为本机 IP 的 ARP 询问的不同应答模式。
0:响应任意网卡上接收到的对本机IP地址的arp请求(包括环回网卡上的地址),而不管该目的IP是否在接收网卡上。
1:只响应目的IP地址为接收网卡上的本地地址的arp请求。
2:只响应目的IP地址为接收网卡上的本地地址的arp请求,并且arp请求的源IP必须和接收网卡同网段。
3:如果ARP请求数据包所请求的IP地址对应的本地地址其作用域(scope)为主机(host),则不回应ARP响应数据包,如果作用域为全局(global)或链路(link),则回应ARP响应数据包。
4~7:预留。
8:不回应所有的arp请求。
arp_announce 对网络接口上发出的 ARP 请求包中的源IP地址作出相应的限制;主机会根据这个参数值的不同选择使用 IP 数据包的源 IP 或当前网络接口卡的IP地址作为ARP请求包的源IP地址。
0:本机所有IP地址都向任何一个接口通告ARP报文。
1:尽量仅向该网卡回应与该网段匹配的ARP报文。
2:只向该网卡回应与该网段匹配的ARP报文。
4、Director Server 服务器配置:
a、VIP 绑定
[root@lvs ~]# cd /etc/sysconfig/network-scripts/
[root@lvs network-scripts]# cp ifcfg-ens33{,:0}
[root@lvs network-scripts]# vim ifcfg-ens33:0
TYPE=Ethernet
BOOTPROTO=none
DEFROUTE=yes
NAME=ens33:0
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.20.135
PREFIX=24
[root@lvs network-scripts]# ifup ens33:0
[root@lvs network-scripts]# ifconfig
如图:
b、ipvsadm 安装及策略创建
[root@lvs ~]# yum –y install ipvsadm
[root@lvs ~]# ipvsadm -A -t 192.168.20.135:80 -s lc
[root@lvs ~]# ipvsadm -a -t 192.168.20.135:80 -r 192.168.20.132:80 -g -w 1
[root@lvs ~]# ipvsadm -a -t 192.168.20.135:80 -r 192.168.20.133:80 -g -w 2如图:
说明:LVS 默认工作模式为 DR 模式,因此,我们在配置策略的时候可以直接写成 [root@lvs ~]# ipvsadm -a -t 192.168.20.135:80 -r 192.168.20.132:80 -w 1 这样的,也可以使用 –g 参数来指定为 DR 模式。
5、验证,在浏览器中访问 http://192.168.20.135
三、服务配置
当我们的 LVS 服务器重启后,之前配置的 LVS 策略也会随之消失,因此,我们这里需要配置自动启动服务
[root@lvs ~]# touch /etc/sysconfig/ipvsadm
[root@lvs ~]# ipvsadm -A -t 192.168.20.135:80 -s lc
[root@lvs ~]# ipvsadm -a -t 192.168.20.135:80 -r 192.168.20.132:80 -g -w 1
[root@lvs ~]# ipvsadm -a -t 192.168.20.135:80 -r 192.168.20.133:80 -g -w 2
[root@lvs ~]# systemctl enable ipvsadm
[root@lvs ~]# systemctl start ipvsadm
[root@lvs ~]# systemctl restart ipvsadm
[root@lvs ~]# cat /etc/sysconfig/ipvsadm
如图: