一、环境规划
计划配置五台虚拟机,1台作为客户端,1台模拟成路由器,1台作为lvs服务器,2台作为RS。
网络环境规划如下:
客户端:
IP:192.168.44.6 GW:192.168.44.200 模式:仅主机
路由器:
IP:192.168.44.200 模式:仅主机
IP:10.10.0.200 模式:NAT
lvs:
IP:10.10.0.2 GW:任意 模式:NAT
RS1:
IP:10.10.0.3 GW:10.10.0.200 模式:NAT
RS2:
IP:10.10.0.13 GW:10.10.0.200 模式:NAT
配置要点:1.路由器需要配置两个网络,一个负责与客户端通信,一个负责与RS通信。2.RS网关需要指向路由器上的NAT模式IP。3.每个RS和lvs上都要配置VIP。4.RS的RIP需要与DIP同网段。5.每个RS可以出外网。
二、集群结构图
集群结构图如下,防火墙和交换机本次实验用不到。
三、实验过程
1、网络环境搭建
下面按照规划和架构图进行配置。
(1)客户端网络设置
与上一篇NAT模式配置基本相同。唯一不同的是需要配置客户端的网关指向路由器。修改ens33配置:
重启网络服务使配置生效。
(2)路由器网络设置
路由器两个网络适配器的设置与NAT模式中的lvs设置相同。重点关注IP的设置,以下是ens33的设置(对应NAT网络适配器):
以下是ens37的设置(对应仅主机网络适配器):
配置完成后重启网络服务:
路由器上需要配置ip_forward参数开启路由转发。
vim /etc/sysctl.conf
使用命令sysctl -p使配置生效。
(3)RS网络设置
RS需要提供http服务,先在两个RS上下载好http支持服务,这里使用的是上篇NAT模式下的RS服务器,相关设置略过。
RS网络适配器设置与NAT模式中相同,重点关注其IP的设置。
ens33上需要设置网关指向路由器NAT模式IP,以下分别是RS1和RS2上ens33的配置:
如果以上配置正常,此时可以直接使用客户端访问RS:
由于DR模式下lvs和RS上都要配置VIP,需要将VIP配置在回环网卡上。直接使用以下命令将VIP绑定在回环网卡上:
ifconfig lo:1 10.10.0.100/32
或者
ip a a 10.10.0.100/32 dev lo label lo:1
绑定VIP到回环网卡后配置如下:
(4)LVS网络设置
LVS网络适配器同NAT模式下lvs的NAT适配器设置,这里也是主要配置网卡。ens33的配置如下:
注意:这里需要给LVS配置一个任意IP的网关,不指定一个网关的话,LVS不会转发请求,客户端发送请求会连接超时:
最好指向路由器NAT模式IP,不然lvs会一直发送arp询问谁有当前配置的这个网关,造成网络带宽的消耗。
LVS上也需要绑定VIP到回环网卡上:
2、lvs配置
LVS上需要安装ipvsadm管理工具,这里使用的是上篇NAT模式下的lvs进行改造的,ipvsadm已经安装,相关过程略过。
使用ipvsadm工具配置服务器负载均衡:
#lvs的VIP为10.10.0.100,使用wrr负载均衡算法
ipvsadm -A -t 10.10.0.100:80
#添加RS1到lvs管理列表中,-g表示DR模式
ipvsadm -a -t 10.10.0.100:80 -r 10.10.0.3 -g
#添加RS2到lvs管理列表中
ipvsadm -a -t 10.10.0.100:80 -r 10.10.0.13 -g
根据学习和了解到的理论知识,RS上还需要配置arp_ignore和arp_announce参数以限制arp通告和响应级别以防止lvs和各RS上的VIP发生冲突,不过实际测试过程中不配置这两个参数好像也没有影响。哪位大神可以解惑,感激不尽!!!
为了保险起见,还是在所有RS上把这两个内核参数的配置加上吧
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
3、验证
客户端访问VIP,正确负载到各个RS上
另外,也可以设置成VIP与DIP不在同一个网段,不过在物理上它们始终在一个网段。需要修改的配置有路由器上ens33上再绑定一个不同网段的IP,然后分别修改lvs和各RS上的VIP与路由器上新绑定的IP同网段即可,这里就不做验证了。
四、自动部署脚本
为了能够更加快捷方便地部署lvs负载均衡服务,各虚拟机只配置各自网络适配器和IP,VIP、ipvs规则、arp限制级别配置都放到脚本中,会节省很多时间,也便于可重复部署。以下是LVS服务器VIP和ipvs规则相关配置的脚本,输入参数start即可部署完成并启动,输入参数stop会清空相关配置。
#!/bin/bash
# description: 配置VIP和ipvs规则
VIP=10.10.0.100
RIP1=10.10.0.3
RIP2=10.10.0.13
iface=lo:0
mask=255.255.255.255
port=80
schedule="wrr"
type="-g"
weight1=1
weight2=1
case "$1" in
start)
ifconfig $iface $VIP netmask $mask
#清空防火墙规则
iptables -F
#添加ipvs规则
ipvsadm -A -t ${VIP}:${port} -s ${schedule}
ipvsadm -a -t ${VIP}:${port} -r ${RIP1} -g -w ${weight1}
ipvsadm -a -t ${VIP}:${port} -r ${RIP2} -g -w ${weight2}
echo "LVS Server is Ready!"
;;
stop)
#清空ipvs规则
ipvsadm -C
ifconfig $iface down
echo "Lvs Server stoped"
;;
*)
echo "Usage: $(basename $0) {start|stop}"
exit 1
esac
以下是配置RS的VIP和arp限制的脚本,输入参数start即可部署完成并启动,输入参数stop会清空相关配置:
#!/bin/bash
#description:配置RS的VIP以及arp限制
VIP=10.10.0.100
iface=lo:0
mask=255.255.255.255
case "$1" in
start)
ifconfig ${iface} $VIP netmask ${mask} broadcast $VIP
#route add -host $VIP dev lo:0
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 >/dev/null 2>&1
echo "RealServer Start OK"
;;
stop)
ifconfig ${iface} down
#route del $VIP >/dev/null 2>&1
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
echo "RealServer is Stoped"
;;
*)
echo "Usage: $(basename $0) {start|stop}"
exit 1
esac
exit 0
注意:以上脚本中使用的是lo:0绑定的VIP,手动测试的时候使用的是lo:1,这两个都是可以的,使用脚本前要把lo:1的配置去掉。
ifconfig lo:1 down
以上就是DR模式的相关实践总结。由于NAT和DR模式的实践中lvs都只用了一台虚拟机,一旦遇到lvs单点故障,整个集群就不可用了;另外RS不可用时lvs也不会将其从ipvs列表里剔除,影响集群的高可用性。下篇文章将介绍lvs+keepalived解决这两个问题。