LVS负载均衡群集——DR模式

news2024/12/23 9:49:26

一、LVS-DR集群介绍

LVS-DR(Linux Virtual Server Director Server)工作模式,是生产环境中最常用的一 种工作模式。

1、LVS-DR 工作原理

LVS-DR 模式,Director Server 作为群集的访问入口,不作为网关使用,节点 Director Server 与 Real Server 需要在同一个网络中,返回给客户端的数据不需要经过 Director Server。为了响应对整个群集的访问,Director Server 与 Real Server 都需要配置 VIP 地址。

2、 数据包流向分析

为方便进行原理分析,将Client与群集机器放在同一网络中,数据包流经的路线为 1-2-3-4 四步

第一步:客户端发送请求到 Director Server (负载均衡器),请求的数据报文到达内核空间。

此时请求的数据报文
源 IP —— 客户端的 IP(CIP)
目标 IP —— VIP
源 MAC —— 客户端的 MAC
目的 MAC —— Director Server 的 MAC

第二步:内核空间判断数据包的目标 IP 是本机 VIP,此时 IPVS(IP 虚拟服务器)比对数据包请求的服务是否是集群服务,是集群服务就重新封装数据包。然后将数据包发送给根据 负载均衡算法选择的 Real Server。(Director Server 和 Real Server 在同一个网络中,数据通过二层数据链路层来传输。)

此时请求的数据报文
源 IP —— 客户端的 IP
目标 IP —— VIP
源 MAC —— Director Server 的 MAC
目的 MAC —— Real Server 的 MAC

第三步:到达 Real Server 的请求报文的 MAC 地址是自身的 MAC 地址,就接收此报文。数据包重新封装报文,将响应报文通过 lo 接口传送给物理网卡然后向外发出。

此时请求的数据报文
源 IP —— VIP
目标 IP —— 客户端的 IP(CIP)
源 MAC —— Real Server 的 MAC
目的 MAC —— 客户端的 MAC

第四步:通过交换机和路由器将响应报文传送到客户端。客户端收到回复报文,得到想要的服务,但是不会知道是哪台服务器处理的。

3、LVS-DR 模式的特点

Director Server 和 Real Server 必须在同一个物理网络中。

Real Server 可以使用私有地址,也可以使用公网地址。如果使用公网地址,可以通过互联网对RIP进行直接访问。

所有的请求报文经由 Director Server,但回复响应报文不能经过 Director Server。

Real Server 的网关不允许指向 Director Server IP,即不允许数据包经过 Director S erver。

Real Server 上的 lo 接口配置 VIP 的 IP 地址。

4、LVS-DR中的ARP问题

4.1 问题一

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

当ARP广播发送到LVS-DR集群时,因为负载均衡器和节点服务器都是连接到相同的网络上,它们都会接收到ARP广播

只有前端的负载均衡器进行响应,其他节点服务器不应该响应ARP广播

解决方法:

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

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

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

4.2问题二

问题说明:RealServer返回报文(源IP是VIP)经路由器转发,重新封装报文时,需要先获取路由器的MAC地址,发送ARP请求时,Linux默认使用IP包的源IP地址(即VIP)作为ARP请求包中的源IP地址,而不使用发送接口的IP地址,路由器收到ARP请求后,将更新ARP表项,原有的VIP对应Director的MAC地址会被更新为VIP对应RealServer的MAC地址。

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

解决方法:

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

二、构建LVS-DR集群的步骤

实验环境准备:

DR 服务器:192.168.2.66
Web 服务器1:192.168.2.105
Web 服务器2:192.168.229.200
NFS共享服务器:192.168.229.100
vip:192.168.229.67
客户端:192.168.2.1

1、配置负载调度器(192.168.2.66)

systemctl stop firewalld.service
setenforce 0
modprobe ip_vs
cat /proc/net/ip_vs
yum -y install ipvsadm

1.1 配置虚拟 IP 地址(VIP:192.168.2.67)

cd /etc/sysconfig/network-scripts/
cp ifcfg-ens33 ifcfg-ens33:0                #若隧道模式,复制为ifcfg-tunl0
vim ifcfg-ens33:0
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.2.6
NETMASK=255.255.255.255
 
ifup ens33:0
ifconfig ens33:0
route add -host 192.168.229.188 dev ens33:0

1.2 调整 proc 响应参数

由于 LVS 负载调度器和各节点需要共用 VIP 地址,应该关闭Linux 内核的重定向参数响应。
vim /etc/sysctl.conf
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
 
sysctl -p

1.3 配置负载分配策略

ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl start ipvsadm
 
ipvsadm -C
ipvsadm -A -t 192.168.229.67:80 -s rr
ipvsadm -a -t 192.168.229.67:80 -r 192.168.2.105:80 -g            #若隧道模式,-g替换为-i
ipvsadm -a -t 192.168.229.67:80 -r 192.168.2.200:80 -g
ipvsadm
 
ipvsadm -ln                 #查看节点状态,Route代表 DR模式

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

systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0
 
yum install nfs-utils rpcbind -y
systemctl start nfs.service
systemctl start rpcbind.service
systemctl enable nfs.service
systemctl enable rpcbind.service
 
mkdir /opt/ly /opt/weq
chmod 777 /opt/ly /opt/weq
 
echo 'this is xkq web!' > /opt/ly/index.html
echo 'this is wy web!' > /opt/weq/index.html
 
vim /etc/exports
/opt/xkq 192.168.2.0/24(rw,sync)
/opt/wy 192.168.2.0/24(rw,sync)
 
--发布共享---
exportfs -rv  

3.配置节点服务器(192.168.2.105、192.168.2.200)

systemctl stop firewalld.service
setenforce 0

3.1 配置虚拟 IP 地址(VIP:192.168.2.67)

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

cd /etc/sysconfig/network-scripts/
cp ifcfg-ens33 ifcfg-lo:0      
vim ifcfg-lo:0
DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.2.67                    #和VIP保持一致
NETMASK=255.255.255.255                     #注意:子网掩码必须全为 1
ifup lo:0
ifconfig lo:0
route add -host 192.168.2.67 dev lo:0        #添加VIP本地访问路由,将访问VIP的数据限制在本地,以避免通信紊乱
 
vim /etc/rc.local
/sbin/route add -host 192.168.2.67 dev lo:0
chmod +x /etc/rc.local

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

vim /etc/sysctl.conf
......
net.ipv4.conf.lo.arp_ignore = 1         #系统只响应目的IP为本地IP的ARP请求
net.ipv4.conf.lo.arp_announce = 2       #系统不使用IP包的源地址来设置ARP请求的源地址,而选择发送接口的IP地址
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
 
sysctl -p
 
或者临时添加
 
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
 
sysctl -p
 
yum -y install nfs-utils rpcbind httpd
systemctl start rpcbind
systemctl start httpd  

3.3 共享挂载目录

yum -y install nfs-utils rpcbind httpd
systemctl start rpcbind
systemctl start httpd
 
--192.168.2.105---
mount.nfs 192.168.2.105:/opt/xkq /var/www/html
 
--192.168.2.200---
mount.nfs 192.168.2.200:/opt/wy /var/www/html

4、测试 LVS 群集

在客户端使用浏览器访问 http://192.168.2.11 

三、实例操作:构建LVS-DR集群

1、配置负载调度器(192.168.2.66)


  

1.1 配置虚拟 IP 地址(VIP:192.168.2.67)

1.2 调整 proc 响应参数

1.3 配置负载分配策略


  

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


  

3.配置节点服务器(192.168.2.105、192.168.2.200)

3.1 配置虚拟 IP 地址(VIP:192.168.2.67)

节点服务器1(192.168.2.105)
 


  

节点服务器2(192.168.229.70)  

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

节点服务器1(192.168.2.105)


    

节点服务器2(192.168.2.200)  

3.3 共享挂载目录

节点服务器1(192.168.2.105)


 

节点服务器2(192.168.2.200)  


  

4、测试 LVS 群集

在客户端使用浏览器访问 http://192.168.2.67

  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/473175.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第九章 子查询

文章目录 前言一、.需求分析与问题解决1 、实际问题2 、子查询的基本使用3 、子查询的分类 二、单行子查询1、单行比较操作符2、代码示例3、 HAVING 中的子查询4、CASE中的子查询5、 子查询中的空值问题6、非法使用子查询 三、多行子查询1、 多行比较操作符2、代码示例3 、空值…

客快物流大数据项目(一百一十八):配置中心 Spring Cloud Config

文章目录 配置中心 Spring Cloud Config 一、​​​​​​​Config 简介

STM32-HAL-SPI-W25Q128FV简单读写测试(2)

文章目录 一、Flash的基本读写操作1.1 向芯片中的某个地址(addr:0x02)连续写入不定长的数据并读取代码示例读写流程分析函数分析 1.2 向芯片中的某个地址(addr:0x00)写入一个数值代码示例:读写流程分析 具体的配置接上…

react native ios 添加启动页 xcode14

最近更新xcode,有些配置有些不同,网上查的方法都是过时的,导致配了一段时间卡在这里,最后访问官网才弄好了,所以以后解决问题的办法先看官网再查其他各路神仙的办法。 官网的步骤:https://github.com/crazy…

MAC 查看已装载的卷宗

查看卷宗目录命令 ls /Volumes网络卷宗:本机、系统报告。 参考资料:https://blog.csdn.net/qq_41731201/article/details/125407204

建筑行业如何进行高效管理文件?

建筑设计行业在日常办公中会产出大量文件,如设计图纸协作商议,项目资料等,建筑行业该如何高效管理文件呢? 建筑设计行业团队可能遇到的文件管理问题: 1,设计图纸一般较大,来回传输不仅麻烦&…

【矩阵快速幂 | 斐波那契数列 | 矩阵加速】

文章目录 基础知识1. 矩阵结构2. 重载 * 运算符3. 矩阵快速幂 例题1: 矩阵幂求和例题2: 矩阵快速幂例题3: 斐波那契数列例题4: 矩阵加速例题5: 广义斐波那契例题6: 斐波那契公约数例题7: 这个勇…

设计模式——设计模式介绍和单例设计模式

目录 一、设计模式概述和分类 1.1 设计模式介绍 1.2 设计模式分类 二、创建型设计模式-单例模式 2.1 介绍 2.2 八种单例模式的创建方式 2.2.1 饿汉式(静态常量) 2.2.2 饿汉式(静态代码块) 2.2.3 懒汉式(线程…

TCP/IP协议基础

1.TCP/IP模型的分层 网络接口层(Network Interface Layer):(数据链路层) 功能: ①将数据帧发送到物理网络,并从物理网络接收数据帧。 ②处理硬件地址,如MAC地址。 主要协议&#xff…

[独家]自动播放K线图训练盘感能力!股票量化分析工具QTYX-V2.3.5

K线量价的重要性 K线图对炒股的朋友来说太熟悉不过了,每一根K线包含了开盘价、收盘价、最高价和最低价这四个价位信息,分别用红和绿两种颜色来表示上涨或下跌,反映了单位时间周期内价格变动的情况。 不过K线的功效可不仅仅用来记录价格的变动…

Linux信号:信号 信号集 信号集函数

1. 信号的概念 Linux进程间通信的方式之一。信号也称为“软件中断”。 信号特点: 简单;携带信息有限;满足特定条件才发送信号;可进行用户空间和内核空间进程的交互; 信号4要素: (1&#xf…

根据Java的TreeMap源码的原理编写C++红黑树删除操作

(一)了解二叉搜索树的删除操作 删除操作总结: ******普通结点删除:******* ①删除叶结点 ②删除只有1个子结点的结点 >>如果被删除结点的左子树为空,则令其右子树子承父业代替其位置即可 >>如果被删除结点…

JPA整合达梦数据库

陈老老老板🦸 👨‍💻本文专栏:国产数据库-达梦数据库(主要讲一些达梦数据库相关的内容) 👨‍💻本文简述:本文讲一下SpringBoot整合JPA与达梦数据库,就是简单&…

《算法工程师带你去》读书笔记

什么是稀疏向量(向量的稀疏表示) 对数据进行预处理时,一般需要对类别型特征进行编码: 序号编码独热编码 二进制编码 其中独热编码用的是最多的。但是当类别数十分巨大时,独热编码是一个非常稀疏的向量,只有…

IDEA(八)常用插件推荐

目录 1.GitHub Copilot2.MyBatisCodeHelperPro3.Maven Helper4.Translation5.Api Savior6.Alibaba Java Coding Guidelines7.Sequence Diagram8.Key Promoter X9.Restfultoolkit-fix 在IDEA中,Ctrl Alt S 选择 Plugins,可以添加很多帮助我们开发的插件…

Arduino串口提取数字(整型和浮点型)

数据提取 文章目录 数据提取前言一、提取整型数据二、提取浮点型数据 前言 之前需要用32和ESP进行通信上传数据,一直都用的都是数据上传然后处理成整型数据,今天需要处理成浮点型数据所以就查了一下,于是就记录一下。 一、提取整型数据 #i…

〖Python网络爬虫实战⑳〗- 数据存储之CSV操作实战

订阅:新手可以订阅我的其他专栏。免费阶段订阅量1000 python项目实战 Python编程基础教程系列(零基础小白搬砖逆袭) 说明:本专栏持续更新中,目前专栏免费订阅,在转为付费专栏前订阅本专栏的,可以免费订阅付…

JDBC数据库连接技术学习笔记

1. 概述 本笔记是学习尚硅谷教育的23版jdbc的课后笔记 1.1 JDBC概念和理解 1. jdbc是(Java Database Connectivity)单词的缩写,翻译为java连接数据库 2. jdbc是java程序连接数据库的技术统称 3. jdbc由java语言的规范(接口)和各个数据库厂商的实现驱动(jar)组成 4. jdbc是一…

Mysql 判断语句

目录 5 判读 5.1 if ... then ...->示例演示 局部变量 -> 打包储存过程 5.2 case 5.2.1 语法一 5.2.2 语法二 -> 示例演示 5.3 while 循环 ->有条件循环 5.3.1 示例演示 5.4 repeat 循环 -> 满足条件 -> 退出循环 5.4.1 示例演示 5.5 loop 5.5.1…

【c语言小项目】基于easyX的俄罗斯方块

EeayX是针对 C/C 的简单图形库插件,本项目基于easyX游戏框架下实现俄罗斯方块游戏。 俄罗斯方块功能实现中主要运用了二维数组的循环遍历。能够实现基本功能,暂未实现旋转 c语言系列专栏:c语言之路重点知识整合 更多相关:c语…