LVS部署DR模式集群

1.实验环境

配置实验环境

bash 复制代码
 #在客户端主机中为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服务器可以出外网

配置内容如下:

bash 复制代码
在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上

问题呈现

bash 复制代码
在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]

示例如下:

bash 复制代码
在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上

bash 复制代码
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
相关推荐
阿里小阿希3 小时前
Vue3 + Element Plus 项目中日期时间处理的最佳实践与数据库设计规范
数据库·设计规范
白鹭4 小时前
MySQL源码部署(rhel7)
数据库·mysql
星期天要睡觉4 小时前
Linux 综合练习
linux·运维·服务器
666和7774 小时前
Struts2 工作总结
java·数据库
saynaihe4 小时前
proxmox8升级到proxmox9
linux·运维·服务器
还听珊瑚海吗4 小时前
SpringMVC(一)
数据库
星期天要睡觉5 小时前
MySQL 综合练习
数据库·mysql
Y4090015 小时前
数据库基础知识——聚合函数、分组查询
android·数据库