LVS-DR模式

本章结构:

1、LVS-DR数据包流向分析

2、LVS-DR中ARP问题

3、LVS-DR特性

4、LVS-DR集群的搭建

LVS-DR数据包流向分析

(1)客户端发送请求到 Director Server(负载均衡器),请求的数据报文(源 IP 是 CIP,目标 IP 是 VIP)到达内核空间。

(2)Director Server 和 Real Server 在同一个网络中,数据通过二层数据链路层来传输。

(3)内核空间判断数据包的目标IP是本机VIP,此时IPVS(IP虚拟服务器)比对数据包请求的服务是否是集群服务,是集群服务就重新封装数据包。修改源 MAC 地址为 Director Server 的 MAC地址,修改目标 MAC 地址为 Real Server 的 MAC 地址,源 IP 地址与目标 IP 地址没有改变,然后将数据包发送给 Real Server。

(4)到达 Real Server 的请求报文的 MAC 地址是自身的 MAC 地址,就接收此报文。数据包重新封装报文(源 IP 地址为 VIP,目标 IP 为 CIP),将响应报文通过 lo 接口传送给物理网卡然后向外发出。

(5)Real Server 直接将响应报文传送到客户端

2、LVS-DR中ARP问题

问题1

在LVS-DR负载均衡群集中,负载均衡器与节点服务器都要配置相同的VIP地址,在局域网中具有相同的IP地址,势必会造成各服务器ARP通信的紊乱;

当ARP广播发送到LVS-DR集群时,因为负载均衡器和节点服务器都是连接到相同的网络上,它们都会接收到ARP广播,应该只有前端的负载均衡器进行响应,其他节点服务器不应该响应ARP广播。

解决办法:

对节点服务器进行处理,使其不响应针对VIP的ARP请求

使用虚接口lo:0承载VIP地址

设置内核参数arp_ignore=1:代表系统只响应目的IP为本地IP的ARP请求

问题2

RealServer返回报文(源IP是VIP)经路由器转发,重新封装报文时,需要先获取路由器的MAC地址,发送ARP请求时,Linux默认使用IP包的源IP地址(即VIP)作为ARP请求包中的源IP地址,此时路由器的路由表进行更新,VIP的MAC地址由原先的均衡器变为节点服务器,路由器根据ARP表项,会将新来的请求报文转发给节点服务器,导致均衡器的VIP失效,又会造成VIP的紊乱。

解决办法

对节点服务器进行处理,设置内核参数arp_announce=2:代表不使用IP包的源地址来设置ARP请求的源地址,而选择发送ens33接口的IP地址

复制代码
修改/etc/sysctl.conf文件
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce =2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce =2

LVS-DR实验

准备四台虚拟机:

192.168.88.10做LVS调度器

192.168.88.20做Web服务器1

192.168.88.30做Web服务器2

192.168.88.40做nfs共享存储

VIP:192.168.88.99

1.配置负载调度器(192.168.88.10)

关闭防火墙和安全机制

加载并检查ip_vs模块

安装ipvsadm服务

(1) 配置虚拟 IP 地址(VIP:192.168.88.99)

复制一个虚拟网卡,并配置虚拟网卡

启动并检查虚拟网卡

(2)调整 proc 响应参数

#由于 LVS 负载调度器和各节点需要共用 VIP 地址,需要关闭 icmp 的重定向,不充当路由器。

刷新并检查配置情况

(3)配置负载分配策略

保存一下初始策略并启动

清空策略

指定VIP地址和端口 指定负载均衡调度算法为轮询算法

配置虚拟ip的真实ip地址,-g:匹配的是DR模式

启动并检查ipvsadm服务 查看节点状态,Route代表 DR模式

2.部署共享存储(NFS服务器:192.168.88.40)

复制代码
systemctl stop firewalld.service
setenforce 0

yum -y install nfs-utils rpcbind
mkdir /opt/kgc /opt/benet
chmod 777 /opt/kgc /opt/benet

vim /etc/exports
/usr/share *(ro,sync)
/opt/kgc 192.168.88.0/24(rw,sync)
/opt/benet 192.168.88.0/24(rw,sync)

systemctl start nfs.service
systemctl start rpcbind.service

3.配置节点服务器(192.168.88.20、192.168.88.30)

关闭防火墙和安全机制

(1)配置虚拟 IP 地址(VIP:192.168.10.180)

#此地址仅用作发送 Web响应数据包的源地址,并不需要监听客户机的访问请求(改由调度器监听并分发)。因此使用虚拟接口 lo∶0 来承载 VIP 地址,并为本机添加一条路由记录,将访问 VIP 的数据限制在本地,以避免通信紊乱。

复制接口为虚拟接口

配置虚拟接口 #注意:子网掩码必须全为 1

开启虚拟接口并检查

为虚拟接口添加路由规则

检查一下

在底行添加,设置开机自启

赋权执行

(2)调整内核的 ARP 响应参数以阻止更新 VIP 的 MAC 地址,避免发生冲突

系统只响应本地的ip地址,作为ARP请求

封装去发送数据时,只让本地的ip地址进行发送

刷新并检查

安装并启动服务

挂载并检查,注意要指向nfs服务器

输入一段话用于测试

检查一下20和30是否能正常访问

访问VIP地址

等待三分钟左右,刷新即可实现跳转

相关推荐
醇氧5 分钟前
【linux】查看发行版信息
linux·运维·服务器
No8g攻城狮38 分钟前
【Linux】Windows11 安装 WSL2 并运行 Ubuntu 22.04 详细操作步骤
linux·运维·ubuntu
XiaoFan0121 小时前
免密批量抓取日志并集中输出
java·linux·服务器
souyuanzhanvip1 小时前
ServerBox v1.0.1316 跨平台 Linux 服务器管理工具
linux·运维·服务器
roman_日积跬步-终至千里2 小时前
【LangGraph4j】LangGraph4j 核心概念与图编排原理
java·服务器·数据库
野犬寒鸦2 小时前
从零起步学习并发编程 || 第六章:ReentrantLock与synchronized 的辨析及运用
java·服务器·数据库·后端·学习·算法
HalvmånEver2 小时前
Linux:线程互斥
java·linux·运维
番茄灭世神3 小时前
Linux应用编程介绍
linux·嵌入式
wdfk_prog3 小时前
[Linux]学习笔记系列 -- [drivers][mmc][mmc_sdio]
linux·笔记·学习
Forsete3 小时前
LINUX驱动开发#9——定时器
linux·驱动开发·单片机