LVS部署DR模式集群

发布于:2025-07-19 ⋅ 阅读:(17) ⋅ 点赞:(0)

1.实验环境

配置实验环境

 #在客户端主机中为nat模式网卡
[root@client ~]# vim/etc/NetworkManager/system-connections/eth0.nmconnection
 [connection]
 id=eth0
 type=ethernet
 interface-name=eth0
 [ipv4]
 method=manual
 address1=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=eth0
 type=ethernet
 interface-name=eth0
 [ipv4]
 method=manual
 address1=172.25.254.100/24
#对于eth1的设定
[root@DR-server ~]# vim  /etc/NetworkManager/system-connections/eth1.nmconnection
 [connection]
 id=eth1
 type=ethernet
 interface-name=eth1
 [ipv4]
 method=manual
 address1=192.168.0.10/24

#对于dr调度器设定网卡为仅主机模式
[root@dr-server ~]# vim /etc/NetworkManager/system-connections/eth0.nmconnection
 [connection]
 id=eth0
 type=ethernet
 interface-name=eth0
 [ipv4]
 method=manual
 address1=192.168.0.200/24,192.168.0.10
 [root@dr-server ~]# route  -n
 Kernel IP routing table
 Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
 0.0.0.0         192.168.0.10    0.0.0.0         UG    100    0        0 eth0
 192.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=eth0
 type=ethernet
 interface-name=eth0
 [ipv4]
 method=manual
 address1=192.168.0.101/24,192.168.0.10

#对于RS2中的网络设定
[root@webserver2 ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection
 [connection]
 id=eth0
 type=ethernet
 interface-name=eth0
 [ipv4]
 method=manual
 address1=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;done
 RS2 server - 192.168.0.102
 RS1 server - 192.168.0.101
 RS2 server - 192.168.0.102
 RS1 server - 192.168.0.101
 RS2 server - 192.168.0.102
 RS1 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.100
 RS1 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持久链接

在我们客户上网过程中有很多情况下需要和服务器进行交互,客户需要提交响应信息给服务器,如果单纯的进行调度会导致客户填写的表单丢失,为了解决这个问题我们可以用sh算法,但是sh算法比较简单 粗暴,可能会导致调度失衡
解决方案
在进行调度时,不管用什么算法,只要相同源过来的数据包我们就把他的访问记录在内存中,也就是把 这个源的主机调度到了那个RS
如果在短期(默认360S)内同源再来访问我仍然按照内存中记录的调度信息,把这个源的访问还调度到 同一台RS上。 如果过了比较长的时间(默认最长时间360s)同源访问再次来访,那么就会被调度到其他的RS
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


网站公告

今日签到

点亮在社区的每一天
去签到