LVS部署DR模式集群
1.实验环境
配置实验环境
#在客户端主机中为nat模式网卡
[root@client ~]# vim/etc/NetworkManager/system-connections/eth0.nmconnection[connection]id=eth0type=ethernetinterface-name=eth0[ipv4]method=manualaddress1=172.25.254.10/24,172.25.254.100#在路由主机中设定双网卡,eth0为nat网卡,eth1为仅主机网卡
#对于eth0的设定
[root@DR-server ~]# vim /etc/NetworkManager/system-connections/eth0.nmconnection[connection]id=eth0type=ethernetinterface-name=eth0[ipv4]method=manualaddress1=172.25.254.100/24
#对于eth1的设定
[root@DR-server ~]# vim /etc/NetworkManager/system-connections/eth1.nmconnection[connection]id=eth1type=ethernetinterface-name=eth1[ipv4]method=manualaddress1=192.168.0.10/24#对于dr调度器设定网卡为仅主机模式
[root@dr-server ~]# vim /etc/NetworkManager/system-connections/eth0.nmconnection[connection]id=eth0type=ethernetinterface-name=eth0[ipv4]method=manualaddress1=192.168.0.200/24,192.168.0.10[root@dr-server ~]# route -nKernel IP routing tableDestination Gateway Genmask Flags Metric Ref Use Iface0.0.0.0 192.168.0.10 0.0.0.0 UG 100 0 0 eth0192.168.0.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0#################################################################################################################################################################################对于RS1的设定网卡为仅主机模式
[root@webserver1 ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection[connection]id=eth0type=ethernetinterface-name=eth0[ipv4]method=manualaddress1=192.168.0.101/24,192.168.0.10#对于RS2中的网络设定
[root@webserver2 ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection[connection]id=eth0type=ethernetinterface-name=eth0[ipv4]method=manualaddress1=192.168.0.102/24,192.168.0.10
5.2.2解决vip响应问题
DR模型中各主机上均需要配置VIP,解决地址冲突的方式有三种:
(1)在前端网关做静态绑定
(2)在各RS使用arptables
(3)在各RS修改内核参数,来限制arp响应和通告的级别
限制响应级别:arp_ignore
0:默认值,表示可使用本地任意接口上配置的任意地址进行响应
1:仅在请求的目标IP配置在本地主机的接收到请求报文的接口上时,才给予响应
限制通告级别:arp_announce
0:默认值,把本机所有接口的所有信息向每个接口的网络进行通告
1:尽量避免将接口信息向非直接连接网络进行通告
2:必须避免将接口信息向非本网络进行通告
3.配置要点
1.Director服务器采用双IP桥接网络,一个是VPP,一个DIP
2.Web服务器采用和DIP相同的网段和Director连接
3.每个Web服务器配置VIP 4.每个web服务器可以出外网
配置内容如下:
在lvs 和 rs 中设定vip[root@lvs ~]# ip addr add dev lo 192.168.0.100/32[root@rs1 ~]# ip addr add dev lo 192.168.0.100/32[root@rs2 ~]# ip addr add dev lo 192.168.0.100/32
在RS1和RS2中解决响应问题
[root@rs1 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore[root@rs1 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore[root@rs1 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce[root@rs1 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce[root@rs2 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore[root@rs2 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore[root@rs2 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce[root@rs2 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
在lvs中配置策略
[root@lvs ~]# ipvsadm -A -t 192.168.0.100:80 -s wrr[root@lvs ~]# ipvsadm -a -t 192.168.0.100:80 -r 192.168.0.101:80 -g[root@lvs ~]# ipvsadm -a -t 192.168.0.100:80 -r 192.168.0.102:80 -g[root@lvs ~]# ipvsadm -Ln测试:
[root@RS1 ~]#echo "RS1 server -192.168.0.101" > /var/www/html/index.html
[root@RS2 ~]#echo "RS2 server -192.168.0.102" > /var/www/html/index.html[root@node10 ~]# for N in {1..6};do curl 192.168.0.100;doneRS2 server - 192.168.0.102RS1 server - 192.168.0.101RS2 server - 192.168.0.102RS1 server - 192.168.0.101RS2 server - 192.168.0.102RS1 server - 192.168.0.101
3.防火墙标签解决轮询错误
以http和https为例,当我们在RS中同时开放80和443端口,那么默认控制是分开轮询的,这样我们就出 现了一个轮询错乱的问题 当我第一次访问80被轮询到RS1后下次访问443仍然可能会被轮询到RS1上
问题呈现
在RS1和RS2中安装mod_ssl并重启apache]# yum install mod_ssl -y]# systemctl restart httpd
在lvs中设置调度,因为我们要调度80和443两个端口所以我们需要设定两组策略
]# ipvsadm -C[root@lvs ~]# ipvsadm -A -t 192.168.0.100:80 -s rr[root@lvs ~]# ipvsadm -A -t 192.168.0.100:443 -s rr[root@lvs ~]# ipvsadm -a -t 192.168.0.100:80 -r 192.168.0.101:80 -g[root@lvs ~]# ipvsadm -a -t 192.168.0.100:80 -r 192.168.0.102:80 -g[root@lvs ~]# ipvsadm -a -t 192.168.0.100:443 -r 192.168.0.102:80 -g[root@lvs ~]# ipvsadm -a -t 192.168.0.100:443 -r 192.168.0.101:80 -g[root@lvs ~]# ipvsadm -Ln测试问题
[root@node10 ~]# curl http://192.168.0.100;curl -k https://192.168.0.100RS1 server - 192.168.0.101
RS1 server - 192.168.0.101
当访问vip时两次调度都到了101
测试结果
4..防火墙标记解决轮询调度问题
防火墙标记(FireWall Mark, FWM)是Linux内核网络子系统提供的一种报文分类机制,通过给特定数据包打上数字标记,实现流量的灵活控制。
MARK target 可用于给特定的报文打标记,
--set-mark value
其中:value 可为0xffff格式,表示十六进制数字借助于防火墙标记来分类报文,而后基于标记定义集群服 务:可将多个不同的应用使用同一个集群服务进行调度
实现方法:
在Director主机打标记:
iptables -t mangle -A PREROUTING -d $vip -p $proto -m multiport --dports $portl,$port2,..-i MARK --set-mark NUMBER
在Director主机基于标记定义集群服务
ipvsadm -A -f NUMBER [options]
示例如下:
在vs调度器中设定端口标签,人为80和443是一个整体
# iptables -t mangle -A PREROUTING -d 192.168.0.100 -p tcp -m multiport --dports
80,443 -j MARK --set-mark 6666
设定调度规则
[root@lvs ~]# ipvsadm -A -f 6666 -s rr[root@lvs ~]# ipvsadm -a -f 6666 -r 192.168.0.101 -g[root@lvs ~]# ipvsadm -a -f 6666 -r 192.168.0.102 -g
测试结果
5.lvs持久链接
ipvsadm -AlE -tlulf service-address [-s scheduler] [-p [timeout]]默认360秒
在lvs调度器中设定
[root@lvs ~]# ipvsadm -E -f 6666 -s rr -p [3000]
[root@lvs ~]# ipvsadm -LnC