LVS负载均衡——DR群集

LVS-DR数据流量分析

web节点和调度器同一网段,入从调度器走,出从web节点走
在这里插入图片描述

client:客户机 Director:调度器 Server:服务器
调度器的ens33:0(ens33虚拟IP)需要和服务器的lo:0(环回虚拟IP)相同

1.客户机向目标VIP发出请求,Director(负载均衡器)接收

IP包头及数据帧头信息

source MAC dest MAC source IP dest IP dest port
客户机MAC 调度器MAC 客户机IP 调度器VIP 80

2.Director根据负载均衡算法选择Server,不修改也补封装IP报文,而是将数据帧的MAC地址改为Server的MAC地址,然后在局域网上发送

IP包头及数据帧头信息

source MAC dest MAC source IP dest IP dest port
调度器MAC 服务器MAC 客户机IP 调度器VIP 80

3.Server收到这个帧,解封装后发现目标IP与本机匹配(Server需要绑定VIP),于是处理这个报文。随后重新封装报文,发送到局域网

IP包头及数据帧头信息

source MAC dest MAC source IP dest IP dest port
服务器MAC 客户机MAC 服务器IP 客户机IP 80

4.Client将收到回复报文。Client任务得到正常的服务,而不会知道是哪一台服务器处理的

LVS-DR的ARP问题

问题1

在LVS-DR负载均衡集群中,负载均衡器与节点服务器都要配置相同的VIP地址
在局域网中具有相同IP地址,会造成各服务器ARP通信紊乱,当APR广播发送到LVS-DR集群时,因为负载均衡器和节点服务器都是连接到相同的网络上,它们都会收到ARP广播

解决方法

对节点服务器进行处理,使起不响应针对VIP的ARP请求
使用虚接口lo:0承载VIP地址
设置内核参数arp_ignore=1
当arp_ignore=1时,网卡上收到目的IP为环回IP的arp请求,发现请求IP不是自己网卡上的IP,不会回arp响应

问题2

路由器根据ARP表项,会将新来的请求报文转发给Server,导致Director的VIP失效

解决方法

对节点服务器进行处理,设置内核参数arp_ignore=2 系统不适用IP包的源地址来设置ARP请求源地址,而选择发送接口的IP地址

附:ARP的工作原理。

ARP指的是已知目标IP地址未知目标mac地址时用
举例:若PC1想发消息给PC2,但是只知道PC2 的IP,未知PC2的mac 地址时 就会通过ARP发送广播帧给交换机,交换机接收到广播帧时无条件广播处理,此时连接到交换机上的所有主机有课收到此广播帧,它们会比较自己的IP地址与目标IP地址是否一致,若不一致则丢弃处理,若一致则回复消息给对方,在回包的过程中加上自己的IP地址和mac地址,当发送房接收到此数据时,查看接受方的mac和IP地址,把他们一起放入ARP缓存起来。

LVS-DR群集部署

群集拓扑图

在这里插入图片描述

部署环境

IP设置

虚拟IP:192.168.2.100

设备 IP地址 子网掩码 网关 网卡
LVS 192.168.2.15 255.255.255.0   ens33
web1 192.168.2.16 255.255.255.0 192.168.2.15 ens33
web2 192.168.2.17 255.255.255.0 192.168.2.15 ens33
nfs 192.168.2.18 255.255.255.0   ens33

NFS共享存储

1.需安装nfs-utils、rpcbind软件包

yum -y install nfs-utils rpcbind

2.设置共享目录
(为了便于测试,所以设置两个不同的目录区分)

mkdir /opt/web1
mkdir /opt/web2
echo "<html><title>web1</title><body><h1>This is web1</h1></body></html>" >> /opt/web1/index.html
echo "<html><title>web2</title><body><h1>This is web2</h1></body></html>" >> /opt/web2/index.html
vi /etc/exports
/opt/web1 192.168.2.16(ro)
/opt/web2 192.168.2.17(ro)

在这里插入图片描述

重启

systemctl restart nfs

查看本机发布的NFS共享目录

showmount -e

在这里插入图片描述

web1节点

安装httpd用于测试

yum -y install httpd

查看NFS服务器共享的目录

showmount -e 192.168.2.18

在这里插入图片描述
将目录挂载到网站根目录

mount 192.168.2.18:/opt/web1 /var/www/html/

检查一下是否挂载成功

在这里插入图片描述
开启httpd

systemctl start httpd

关闭防火墙

systemctl stop firewalld
setenforce 0
vi /etc/selinux/config

在这里插入图片描述
测试

curl http://localhost

在这里插入图片描述
编辑脚本

vim web1.sh
#!/bin/bash
#Lvs-Dr模式 web1
ifconfig lo:0 192.168.2.100 broadcast 192.168.2.100 netmask 255.255.255.255 up
route add -host 192.168.2.100 dev lo:0
echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
sysctl -p &> /dev/null

执行脚本

web2节点

web2节点和web1节点,除了更改几个参数之外,其它都一样

安装httpd用于测试

yum -y install httpd

查看NFS服务器共享的目录

showmount -e 192.168.2.18

在这里插入图片描述
将目录挂载到网站根目录

mount 192.168.2.18:/opt/web2 /var/www/html/

检查一下是否挂载成功

cat /var/www/html/index.html

在这里插入图片描述

开启httpd

systemctl start httpd

关闭防火墙

systemctl stop firewalld
setenforce 0
vi /etc/selinux/config

在这里插入图片描述
测试

curl http://localhost

在这里插入图片描述

编辑脚本

vim web2.sh
#!/bin/bash
#Lvs-Dr模式 web2
ifconfig lo:0 192.168.2.100 broadcast 192.168.2.100 netmask 255.255.255.255 up
route add -host 192.168.2.100 dev lo:0
echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
sysctl -p &> /dev/null

执行脚本

LVS调度器部署

1.手动加载ip_vs模块

modprobe ip_vs

查看

cat /proc/net/ip_vs

在这里插入图片描述
安装 ipvsadm

yum -y install ipvsadm

2.编写脚本

vim dr.sh
#!/bin/bash
#Lvs-dr
ifconfig ens33:0 192.168.2.100 broadcast 192.168.2.100 netmask 255.255.255.255 up
route add -host 192.168.2.100 dev ens33:0
ipvsadm -C
ipvsadm -A -t 192.168.2.100:80 -s rr
ipvsadm -a -t 192.168.2.100:80 -r 192.168.2.16:80 -g
ipvsadm -a -t 192.168.2.100:80 -r 192.168.2.17:80 -g
ipvsadm -Ln

在这里插入图片描述

ipvsadm选项

选项 说明
-C 清除内核虚拟服务器表中的所有记录
-A 添加虚拟服务器
-a 添加真是服务器
-t 用来指定VIP地址及TCP端口
-r 用来指定RIP地址及TCP端口
-s 用来指定负载调度算法
-m 表示使用NAT群集模式
-g 表示使用DR群集模式
i 表示使用TUN群集模式

执行脚本

3访问测试

在这里插入图片描述
在这里插入图片描述
查看详细信息

ipvsadm -Lnc

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_50345511/article/details/110850567