LVS负载均衡群集与NAT模式LVS负载均衡部署

1、LVS-DR工作原理

1、数据包流向分析

第一步:客户端发送请求到 Director Server (负载均衡器),请求的数据报文到达内核空间。
数据报文
源 IP ------客户端的 IP
目标 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
源 MAC ------ Real Server 的 MAC
目的 MAC ------ 客户端的 MAC
第四步:通过交换机和路由器将响应报文传送到客户端。客户端收到回复报文,得到想要的服务,但是不会知道是哪台服务器处理的。

2、DR模式的特点

Director Server 和 Real Server 必须在同一个物理网络中。
Real Server 可以使用私有地址,也可以使用公网地址。如果使用公网地址,可以通过互联网对 RIP 进行直接访问。
Director Server 作为群集的访问入口,但不作为网关使用。
所有的请求报文经由 Director Server,但回复响应报文不能经过 Director Server。
Real Server的网关不允许指向Director Server IP,即 Real Server 发送的数据包不允许经过 Director Server。
Real Server 上的 lo 接口配置 VIP 的 IP 地址。

问题一:

在LVS-DR负载均衡集群中,负载均衡与节点服务器都要配置相同的VIP地址。
在局域网中具有相同的IP地址,势必会造成各服务器ARP通信的紊乱。
解决思路:
当ARP广播发送到LVS-DR集群时,因为负载均衡器和节点服务器都是连接到相同网络上,它们都会接收到ARP广播。
只有前端的负载均衡器进行响应,其他节点服务器不应该响应ARP广播。
对节点服务器进行处理,使其不响应针对VIP的ARP请求。
解决方法:
使用虚接口lo:0承载VIP地址
设置内核参数arp_ignore=1:系统只响应目的IP为本地IP的ARP请求

问题二:

RealServer返回报文(源IP是VIP)经路由器转发,重新封装报文时,需要先获取路由器的MAC地址。
发送ARP请求时,Linux默认使用IP包的源IP地址(即VIP)作为ARP请求包中的源IP地址,而不使用发送接口的IP地址
如:ens33
路由器收到ARP请求后,将更新ARP表项
原有的VIP对应Director的MAC地址会被更新为VIP对应RealServer的MAC地址
路由器根据ARP表项,会将新来的请求报文转发给RealServer,导致Director的VIP失效
解决方法:
对节点服务器进行处理,设置内核参数arp_announce=2:系统不使用IP包的源地址来设置ARP请求的源地址,而选择发送接口的IP地址。
解决ARP的两个问题的设置方法
修改 /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模式集群部署

搭建环境:

主机ip地址
DR负载均衡服务器

ens33=192.168.73.130 ens33:0=192.168.73.15

web服务器1ens33=192.168.73.110 lo:0(vip)=192.168.73.15
web服务器2ens33=192.168.73.120 lo:0(vip)=192.168.73.15
Tomcat服务器多实例ens33=192.168.73.100
客户端192.168.73.15

一、安装tomcat多实例

1.关闭防火墙,将安装 Tomcat 所需软件包传到/opt目录下
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
2.安装JDK
cd /opt
tar xf jdk-8u391-linux-x64.tar    #tar解压缩jdk软件包
mv jdk-8u391-linux-64 /usr/local   #将解压完的软件包移动到/usr/local目录下
java -version #显示java运行版本
3.设置JDK环境变量
vim /etc/profile
export JAVE_HOME=/usr/local/jdk1.8.0_391
export JRE_HOME=$JAVE_HOME/jre
export CLASSPATH=.:$JAVE_HOME/lib:$JRE_HOME/lib
export PATH=$JAVE_HOME/bin:$JRE_HOME/bin:$PATH
 
source /etc/profile     

重新定义环境变量,$PATH要放在工作目录后面,让系统先读取工作目录里的信息

 4.安装启动Tomcat
cd /opt
tar zxvf apache-tomcat-9.0.16.tar.gz
mv apache-tomcat-9.0.16 /usr/local/tomcat
5.tomcat多部署
1.安装tomcat
tar zxvf apache-tomcat-9.0.16.tar.gz
mkdir /usr/local/tomcat
mv apache-tomcat-9.0.16 /usr/local/tomcat/tomcat1
cp  /usr/local/tomcat/tomcat1 /usr/local/tomcat/tomcat2
cp  /usr/local/tomcat/tomcat1 /usr/local/tomcat/tomcat3
2.修改tomcat主配置文件 server.xml 中的三个端口号 8080  8005  8009,每个实例要不一样
vim /usr/local/tomcat/conf/server.xml
3.修改tomcat启动停止脚本 startup.sh  shutdown.sh ,添加环境变量 export TOMCAT_HOME  CATALINA_HOME  CATALINA_BASE 都指向每个实例各自的工作目录

4.在使用mkdir /usr/local/tomcat/webapps/xy101

创建动态文件.jsp$的动态文件 test.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" %>
<html>
<head>
<title>JSP test1 page</title>
</head>
<body>
<% out.println("动态页面 1,http://www.test1.com"); %>
</body>
</html>
~                          

tomcat2 tomcat3 同理把文件里面的 123改成对应

二、配置节点服务器进行动静分离负载均衡

环境:两台服务器 nginx作为web服务器

web服务器1:192.168.73.110:80
web服务器2:192.168.73.120:80
1.安装nginx
rz -E nigxn repo
再使用yum安装比较方便
2.在http配置块使用upstream定义后端服务器列表名称和节点参数 

#配置负载均衡的服务器列表,weight参数表示权重,权重越高,被分配到的概率越大

server配置块中使用location匹配用户请求的动态页面的URL路径,使用 proxy_pass 基于协议代理转发。

location ~ \.jsp$ {
   proxy_pass http://tomcat_server;
#配置Nginx处理动态页面请求,将 .jsp文件请求转发到Tomcat 服务器处理 
    proxy_set_header HOST $host;
#设置后端的Web服务器可以获取远程客户端的真实IP
   proxy_set_header x_Real_IP $remote_addr;
#把$remote_addr赋值给X-Real-IP,来获取源IP
   proxy_set_header X_Forwarded_For $proxy_add_x_forwarded_for;
  }
#在nginx 作为代理服务器时,设置的IP列表,会把经过的机器ip,代理机器ip都记录下来

web2也按上图流程操作一下

然后重启nginx 

三、开始配置节点服务器 (192.168.73.110   192.168.73.120)

1.为两台主机配置虚拟 IP 地址
cd /etc/sysconfig/network-scripts/
cp ifcfg-lo ifcfg-lo:0
vim ifcfg-lo:0

配置如下:

2.编辑系统内核 调整内核的 ARP 响应参数以阻止更新 VIP 的 MAC 地址,避免发生冲突
vim /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
sysctl -p #加载一下、
systemctl restart network #重启网卡
3.设置临时的路由,重启失效 
route add -host 192.168.73.15 lo:0

重启nginx

systemctl restart nginx

四.配置负载调度器

1.安装ipvsadm
yum insatll -y ipvsadm  #安装ipvasadm
touch /etc/sysconfig/ipvsadm    #创建ipvsadm文件
systemctl restart ipvsadm.service    #启动ipvsadm
2.添加 modprobe ip_vs 模块
modprobe ip_vs
3.配置虚拟 IP 地址
cd /etc/sysconfig/network-scripts/
cp ifcfg-lo ifcfg-ens33:0
vim ifcfg-ens33:0

配置如下:

重启网卡

4.调整 proc 响应参数 修改内核参数
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 #加载一下、
5.配置负载分配策略

 保存规则:

ipvsadm-save -n > /opt/ipvsadm.bak #保存规则
systemctl restart ipvsadm.service  #重启ipvsadm

验证:静态网页负载均衡

     动态页面动静分离负载均衡

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Vue2+Vue3知识补充

defineProperty 一个对象默认的配置规则参数如下&#xff0c;通常都是为true。通过getOwnPropertyDescriptor方法查看 let obj {x: 10,};console.log(Object.getOwnPropertyDescriptor(obj, "x"));当使用defineProperty定义一个对象中已经存在属性的配置项时。如果…

二刷算法训练营Day28 | 回溯算法(4/6)

目录 详细布置&#xff1a; 1. 93. 复原 IP 地址 2. 78. 子集 3. 90. 子集 II 详细布置&#xff1a; 1. 93. 复原 IP 地址 有效 IP 地址 正好由四个整数&#xff08;每个整数位于 0 到 255 之间组成&#xff0c;且不能含有前导 0&#xff09;&#xff0c;整数之间用 . 分隔…

一、SpringBoot框架搭建

一、SpringBoot框架搭建 系列文章目录1.SpringBoot简介2.基础环境1.idea2.jdk3.maven 3.创建、配置、启动SpringBoot项目4.SpringBoot其他配置1.SpringBoot开发拦截器和解决跨域问题2.SpringBoot统一结果封装3.SpringBoot统一异常处理1.Result&#xff08;通用返回结果&#xf…

Thinkpad产品系列进BIOS设置(重装系统)

Thinkpad产品系列进BIOS设置&#xff08;重装系统&#xff09; 对于大多数ThinkPad笔记本产品&#xff08;T、X、W、P、L、E系列部分除外&#xff09;&#xff0c;例如T14、T15、T490、T590、X13、X390等&#xff0c;您需要在启动计算机时&#xff0c;当显示ThinkPad徽标时&…

防止设计图纸泄露:挑选合适的图纸加密解决方案

在技术迅猛发展的今天&#xff0c;企业的技术资产和知识产权成为了竞争的核心。图纸作为创新成果的直接体现&#xff0c;其安全性保护显得尤为重要。本文将探讨如何通过加密软件有效保护企业图纸&#xff0c;防止信息泄露。 一、图纸加密的必要性 图纸加密是确保企业技术资产安…

基于Nuvoton N9H30 咖啡机彩屏解决方案

基于Nuvoton N9H30 咖啡机彩屏解决方案 咖啡分为美式咖啡、滴滤、黑咖啡以及意式咖啡等&#xff0c;各种特色的咖啡都有不同的适应人群。一杯奶盖飘香的咖啡&#xff0c;不仅可以缓解工作上的疲惫&#xff0c;还可以获得苦尽甘来的滋味。在上班族的快节奏环境下&#xff0c;一…

【全网最齐报错的解决方法!】运行mvn命令打包项目jar包报错?“Fatal error compiling: 无效的目标发行版: 19 ”, 让我来看看~

最近写实验&#xff0c;要打包项目&#xff0c;但是不管是在cmd运行“mvn clean package -Dmaven.test.skiptrue”命令&#xff0c;还是在idea上去操作&#xff0c;都出现了这样的一个错误&#xff1a; [EROR] Failed to exeoute goal org.apache.maven.plugins:maven-comnpile…

【论文速读】| 通过大语言模型从协议实现中推断状态机

本次分享论文&#xff1a;Inferring State Machine from the Protocol Implementation via Large Language Model 基本信息 原文作者&#xff1a;Haiyang Wei, Zhengjie Du, Haohui Huang, Yue Liu, Guang Cheng, Linzhang Wang, Bing Mao 作者单位&#xff1a;南京大学&#…

AIHub导航

4、 AIHub https://www.aihub.cn/tools/llm/

CMake的学习之路

目录 一、基础命令 二、编译选项和设置 三、文件和目录操作 四、控制流命令 五、其他命令 六、CMake构建级别 CMake是一个跨平台的自动化建构系统&#xff0c;它使用一种人类可读的配置文件&#xff08;CMakeLists.txt&#xff09;来控制软件编译过程。以下是CMake中的一些…

Python报表需求处理示例

单一文件下&#xff0c;相关主题的共128张字段结构相似的表&#xff0c;对一种需求用Excel手工编辑相当麻烦&#xff0c;下面介绍一种python做自动化报表示例及代码流程。 每张表均有相同的字段结构&#xff0c;因此可对该文件下所有表格同时操作&#xff0c;大大提高了计算效率…

公用nacos,实现只调用本机相应服务,不出现负载均衡到别人机器上

当我们有两个研发同时在调试一个微服务模块时&#xff0c;你和对方本地都会启动服务&#xff0c;这就导致在nacos会同时注册两个实例。默认情况下请求这个服务&#xff0c;具体处理请求的程序会在你和对方之间来回轮询&#xff0c;即一下你的服务一下对方的服务。 其结果就导…

(三十八)Vue之插槽Slots

文章目录 插槽介绍插槽分类默认插槽具名插槽条件插槽动态插槽名 作用域插槽默认作用域插槽具名作用域插槽 上一篇&#xff1a;&#xff08;三十七&#xff09;vue 项目中常用的2个Ajax库 插槽介绍 在之前的文章中&#xff0c;我们已经了解到组件能够接收任意类型的值作为 prop…

bmp转jpg怎么转?给你介绍几种将bmp转成jpg的方法

bmp转jpg怎么转&#xff1f;首先&#xff0c;了解BMP和JPG两种格式的特点对于转换过程非常重要。BMP格式以无损方式存储图像数据&#xff0c;这意味着它可以保留图像的每个像素信息&#xff0c;但文件大小较大。而JPG格式则使用有损压缩算法&#xff0c;可以将文件大小大大减小…

ARM32开发--PWM通道输出

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 文章目录 前言 内容 需求 通用定时器多通道 开发流程 多通道配置 占空比更新 完整代码 高级定时器通道输出 开发流程 通道配置 Break配置 完整代码 总结 前言 加强掌握…

【Python】Flask问答系统Demo项目

学习视频 我是跟着知了传课学的Flask&#xff0c;起初了解Flask还是GPT告诉我的&#xff0c;现在可以说用Flask做后端是真的方便&#xff01; https://www.bilibili.com/video/BV17r4y1y7jJ 项目结构与下载 FlaskOA&#xff08;项目文件夹&#xff09; │ app.py │ conf…

性能测试------LoadRunner 详解

性能测试------LoadRunner的使用 一、什么是LoadRunner LoadRunner是一款由Micro Focus&#xff08;以前是Hewlett-Packard或HP公司&#xff09;开发的性能测试工具。它用于测试和分析系统在负载下的行为和性能。具体来说&#xff0c;LoadRunner可以模拟数千名用户同时访问应…

r语言数据分析案例26-美元兑换欧元汇率分析与研究

一、研究背景&#xff1a; 汇率是国际贸易和金融中最重要的价格之一&#xff0c;它直接影响着各国的经济利益和国际竞争力。美元兑换欧元汇率是全球最重要的汇率之一&#xff0c;它的波动对全球经济和金融市场都有着深远的影响。因此&#xff0c;对美元兑换欧元汇率的分析和研…

树莓派4B_OpenCv学习笔记5:读取窗口鼠标状态坐标_TrackBar滑动条控件的使用

今日继续学习树莓派4B 4G&#xff1a;&#xff08;Raspberry Pi&#xff0c;简称RPi或RasPi&#xff09; 本人所用树莓派4B 装载的系统与版本如下: 版本可用命令 (lsb_release -a) 查询: Opencv 版本是4.5.1&#xff1a; 今日学习:读取窗口鼠标状态坐标_TrackBar滑动条控件的使…

华为机考入门python3--(35)牛客35-蛇形矩阵

分类&#xff1a;蛇形矩阵 知识点&#xff1a; 取出每行中非零的数字 row [str(num) for num in matrix[i] if num ! 0] 题目来自【牛客】 def generate_snake_matrix(n):# 初始化一个NN的矩阵matrix [[0] * n for _ in range(n)] start 1# i为行&#xff0c;&#xf…