LVS负载均衡及LVS-NAT模式
一、集群概述
1.1 集群的背景
集群定义:为解决某个特定问题将多个计算机组合起来形成一个单系统
集群目的:为了解决系统的性能瓶颈
集群发展历史:
垂直扩展:向上扩展,增加单个机器的性能,即升级硬件
水平扩展:向外扩展,增加设备。并行的运行多个服务,通过网络和算法来调度服务分配的问题
1.2 集群的类型
- 负载均衡集群:LB(loab blance),由多个主机组成,每个主机只承担一部分访问请求。主要靠负载均衡算法来实现
- 高可用集群:HA(high availiablity),避免SPOF(single point of failure)单点故障。系统当中有一部分组件出现故障,可以保障整个系统继续运行
- 高性能集群:HPC(hish-performance computing),快速转发,快速响应
1.3 集群的可靠性指标
- MTBF:mean time between failure,系统在正常运行期间无故障的平均时间,一般用小时或者天数来表示。MTBF值越高,系统的可靠性越高,出现故障的概率也越小
- MTTR:系统从发生故障到恢复正常运行的平均时间,一般用小时或者天数表示,MTTR值越小,说明系统恢复故障的能力越强
- A:系统的可靠性指标,A值越高越好
三者关系:A=MTBF/(MTBF+MTTR)
停机时间:
计划内停机:指预定时间内的维护或者检修时间
计划外停机:运维人员主要关注
1.4 设计集群的原则
1、可扩展性:集群要有随时可以添加或者删除设备的能力以及动态地扩缩容
2、可靠性:集群中如果有节点发生故障,可以快速检测并且自动切换
3、负载均衡:合理地分配负载,避免单个节点过载,影响整体性能
4、可维护性:能够方便地进行配置、维护、监控,降低成本
5、安全性:防止恶意攻击以及数据泄露、丢失
6、易用性:相关的工作人员可以方便地进入集群,能够快速地开发、部署、测试等等
二、LVS虚拟服务器
2.1 LVS概述
Linux Virtual Server:是一个部署在Linux系统通过内核层面实现负载均衡的软件
主要作用:多个后端服务器组成一个高可用、高性能、负载均衡的高性能集群。通过负载均衡的算法将客户端请求发送到后端服务器
LVS集群当中的术语:
vs(virtual server):lvs服务的逻辑名字,外部访问lvs集群时提供的一个虚拟ip地址和端口
DS(Directop server):lvs集群当中的主服务器,也叫调度器,是整个lvs集群的核心,接受客户端的请求转发到后端RS
RS(real server):lvs的后端的真实服务器的ip,接收到了DS的请求之后返回响应结果
CIP(client ip):客户端的ip地址
VIP(virtual ip):对外提供访问的同一虚拟IP地址
DIP(Director ip):调度器在lvs内部使用的ip地址,用于和真实服务器进行通信
RIP:后端真实服务器的ip地址
2.2 LVS访问流程
- 客户端访问都是访问vip
- DS接收到请求,根据调度算法选择好后端服务器(rs)
- RS处理请求并将响应发送到DS
- DS把RS的响应包装成自己响应,发送到客户端
这种情况下,客户端既不知道请求的真实服务器,也不知道响应的服务器
2.3 LVS的负载均衡方式
-
NAT(Network Address Translation):地址转换,访问的是vip,进入集群,调度器来选择一台后端的真实服务器,然后转发到真实服务器;响应过程是先到调度器,调度器做地址转换,再把响应发送到客户端。
-
DR(Direct Routing):直接路由模式 ,在LVS集群和后端服务器之间建立一个虚拟接口,将客户端请求直接发送到后端服务器,并将后端服务器返回的响应包通过LVS集群进行转发。
-
TUN(Tunneling):隧道协议, 将客户端请求通过LVS集群中的一个IP地址和端口号发送到后端服务器,同时在LVS集群和后端服务器之间建立一个隧道进行数据传输。
其中NAT和DR是最常用的方式
2.4 LVS集群的设置
ipvasdm工具:管理ipvs内核模块的命令行工具,可用于配置和管理lvs集群
ipvasdm工具常用选项:
-A:添加虚拟服务器
-D:删除整个虚拟服务器
-s:指定负载调度的算法
- rr:轮询
- wrr:加权轮询
- dh:目的地址hash,根据ip地址查找静态hash表,获取需要真实的RS的地址
- sh:源地址hash
- lc:最小连接数调度
- wlc:加权最小连接数调度,权重高的,转发的就多,为了避免性能瓶颈,再跟上最小连接数分配,可以把请求往连接数量较小的服务器继续转发
- lblc:基于地址的最小连接数调度,将来自同一个目的地址的请求分配给RS,如果这台服务器尚未满负荷,就会把请求分配给连接数最小的RS,而且在下一次转发时会优先考虑这台RS
-a:添加真实服务器
-d:删除真实服务器
-t:指定VIP地址的端口号
-r:指定RIP的端口号
-m:表示使用nat模式
-g:表示使用DR模式
-i:表示使用TUN模式
-w:设置真实服务器的权重
-p 60:设置连接保持的时间60s
三、LVS-NAT部署实操
实验配置:
20.0.0.10:调度器内网网卡
12.0.0.1:调度器外网网卡
20.0.0.40:nfs共享存储
20.0.0.61:web集群1
20.0.0.62:web集群2
20.0.0.20:访问客户端
配置nfs服务器
40、61、62:
yum -y install nfs-utils rpcbind
40:
[root@pup4 ~]# cd /opt
[root@pup4 opt]# mkdir pup benet
[root@pup4 opt]# chmod 777 /opt/kgc/ /opt/benet/
[root@pup4 opt]# echo "this is pup" > /opt/pup/index.html
[root@pup4 opt]# echo "this is benet" > /opt/benet/index.html
[root@pup4 opt]# vim /etc/exports
--添加--
/opt/pup 20.0.0.0/24(rw,sync)
/opt/benet 20.0.0.0/24(rw,sync)[root@pup4 opt]# systemctl restart rpcbind
[root@pup4 opt]# systemctl restart nfs
[root@pup4 opt]# exportfs -rv
exporting 20.0.0.0/24:/opt/benet
exporting 20.0.0.0/24:/opt/pup
配置web服务器
61:
[root@nginx1 ~]# systemctl restart rpcbind
[root@nginx1 ~]# systemctl restart nfs
[root@nginx1 ~]# showmount -e 20.0.0.40
Export list for 20.0.0.40:
/opt/benet 20.0.0.0/24
/opt/pup 20.0.0.0/24
[root@nginx1 ~]# mount 20.0.0.40:/opt/pup /usr/local/nginx/html
[root@nginx1 ~]# systemctl restart nginx
62:
[root@nginx2 ~]# systemctl restart rpcbind
[root@nginx2 ~]# systemctl restart nfs
[root@nginx2 ~]# showmount -e 20.0.0.40
Export list for 20.0.0.40:
/opt/benet 20.0.0.0/24
/opt/pup 20.0.0.0/24
[root@nginx2 ~]# mount 20.0.0.40:/opt/benet /usr/local/nginx/html
[root@nginx2 ~]# systemctl restart nginx
61、62相同操作:
[root@nginx1 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
--修改--
GATEWAY=20.0.0.10
#DNS1=218.2.135.1[root@nginx1 ~]# systemctl restart network
配置调度器
[root@pup1 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
--修改--
#GATEWAY=20.0.0.2
#DNS1=218.2.135.1
[root@pup1 network-scripts]# cp ifcfg-ens33 ifcfg-ens36
[root@pup1 network-scripts]# vim ifcfg-ens36
[root@pup1 network-scripts]# systemctl restart network
[root@pup1 network-scripts]# iptables -t nat -A POSTROUTING -s 20.0.0.0/24 -o ens36 -j SNAT --to 12.0.0.1
[root@pup1 network-scripts]# yum install ipvsadm* -y
[root@pup1 yum.repos.d]# ipvsadm -A -t 12.0.0.1:80 -s rr
[root@pup1 yum.repos.d]# ipvsadm -a -t 12.0.0.1:80 -r 20.0.0.61:80 -m
[root@pup1 yum.repos.d]# ipvsadm -a -t 12.0.0.1:80 -r 20.0.0.62:80 -m
[root@pup1 yum.repos.d]# ipvsadm-save>/etc/sysconfig/ipvsadm
[root@pup1 yum.repos.d]# systemctl restart ipvsadm.service
[root@pup1 yum.repos.d]# vim /etc/sysctl.conf
--添加--
net.ipv4.ip_forward = 1[root@pup1 yum.repos.d]# sysctl -p
net.ipv4.ip_forward = 1
验证
20.0.0.20客户端网卡配置:
相关文章:

LVS负载均衡及LVS-NAT模式
一、集群概述 1.1 集群的背景 集群定义:为解决某个特定问题将多个计算机组合起来形成一个单系统 集群目的:为了解决系统的性能瓶颈 集群发展历史: 垂直扩展:向上扩展,增加单个机器的性能,即升级硬件 水…...

【Java集合类面试八】、 介绍一下HashMap底层的实现原理
文章底部有个人公众号:热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享? 踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。利己利人、所谓双赢。 面试官: 介绍一下HashMap底层的…...

linux 安装操作 redis
1、redis概述和安装 1.1、安装redis 1. 下载redis 地址 https://download.redis.io/releases/ 2. 将 redis 安装包拷贝到 /opt/ 目录 3. 解压 tar -zvxf redis-6.2.1.tar.gz4. 安装gcc yum install gcc5. 进入目录 cd redis-6.2.16. 编译 make7. 执行 make install 进…...

博客后台模块续更(五)
十一、后台模块-菜单列表 菜单指的是权限菜单,也就是一堆权限字符串 1. 查询菜单 1.1 接口分析 需要展示菜单列表,不需要分页。可以针对菜单名进行模糊查询。也可以针对菜单的状态进行查询。菜单要按照父菜单id和orderNum进行排序 请求方式 请求路径…...

手写一个PrattParser基本运算解析器4: 简述iOS的编译过程
点击查看 基于Swift的PrattParser项目 iOS项目的编译过程与PrattParser解析器 前面三篇我们看到了PrattParser解析器的工作原理, 工作过程, 我们了解到PrattParser解析器实际上是模拟了编译过程中的 词法分析 、语法分析 、语义分析 、 中间代码生成 这几个编译前端过程. 那么P…...

【Java集合类面试六】、 HashMap有什么特点?
文章底部有个人公众号:热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享? 踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。利己利人、所谓双赢。 面试官:HashMap有什么特点&…...

基于LSTM的天气预测 - 时间序列预测 计算机竞赛
0 前言 🔥 优质竞赛项目系列,今天要分享的是 机器学习大数据分析项目 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🧿 更多资料, 项目分享: https://gitee.com/dancheng-senior/po…...

SpringBoot AOP + Redis 延时双删功能实战
一、业务场景 在多线程并发情况下,假设有两个数据库修改请求,为保证数据库与redis的数据一致性,修改请求的实现中需要修改数据库后,级联修改Redis中的数据。 请求一:A修改数据库数据 B修改Redis数据 请求二ÿ…...

【Java集合类面试七】、 JDK7和JDK8中的HashMap有什么区别?
文章底部有个人公众号:热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享? 踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。利己利人、所谓双赢。 面试官:JDK7和JDK8中的HashMap有…...
el-tree 获取过滤后的树结构
正常来说element框架应该返回的,但实际上没有,只能自己处理了 递归处理,思路就是赋值,如果是自己过滤到的数据就push进去,不是就不要 let newCheckTree [] let tree get_tree(treeData,newCheckTree); //获取过滤…...
Windows连接SFTP服务
最近有个新需求需要通过SFTP方式连接到一个FTP中下载相关内容 1.使用命令行方式 在cmd中使用如下命令 sftp -P [port] [username]ip #示例 sftp -P 666 ftp123.123.123.123然后弹出的提示输入yes,再输入密码就可以了。 2.使用资源管理器方式 普通FTP可以使用资源…...

《红蓝攻防对抗实战》五.内网探测协议出网之DNS协议探测出网
DNS(Domain Name System)即域名解析系统,可将域名解析到对应访问IP。下面我们还是以系统自带命令为案例,进行演示DNS协议探测出网。 目录 一.Windows系统探测DNS协议出网 二.Linux系统探测DNS协议出网 1. Dig命令 2.Nslookup命…...

计算机算法分析与设计(18)---回溯法(介绍、子集和问题C++代码)
文章目录 一、回溯法介绍二、子集和问题2.1 知识概述2.2 代码编写 一、回溯法介绍 1. 回溯法(back tracking)是一种选优搜索法,又称为试探法,有“通用的解题法”之称,按选优条件向前搜索,以达到目标。但当探…...

[Hive] explode
在 Hive 中,explode 函数用于将数组(Array)或者Map类型的列拆分成多行, 每个元素或键值对为一行。这允许我们在查询中对数组或 Map 进行扁平化操作。 下面是使用 explode 函数的示例: 假设我们有一个包含数组字段的表…...
2023年10月22日找工作面试交流遇到的基本问题
交叉编译解决的痛点问题 不同硬件体系结构之间的编译问题。嵌入式系统开发需要在主机上编写代码。提高效率和节省时间。软件移植和管理依赖关系。 不同硬件体系结构之间的编译问题:例如,你开发了一个针对Intel x86架构的应用程序,但想要在Ra…...

如何判断要不要用振动技术来进行设备预测性维护
在现代工业设备运行过程中,及时发现设备故障并进行维修对于确保生产线的正常运行至关重要。振动分析技术作为一种先进的设备监测和预测性维护方法,通过实时监测和分析设备的振动信号,可以提前发现潜在故障,降低停机时间和维护成本…...

数据结构和算法——用C语言实现所有树形结构及相关算法
文章目录 前言树和森林基础概念二叉树二叉树的遍历二叉树的构造树和森林与二叉树之间的转化树和森林的遍历 满二叉树完全二叉树线索二叉树线索二叉树的构造寻找前驱和后继线索二叉树的遍历 最优二叉树(哈夫曼树)哈夫曼树的构造哈夫曼编码 二叉排序树&…...

OTA: Optimal Transport Assignment for Object Detection 论文和代码学习
OTA 原因步骤什么是最优传输策略标签分配的OT正标签分配负标签分配损失计算中心点距离保持稳定动态k的选取 整体流程代码使用 论文连接: 原因 1、全部按照一个策略如IOU来分配GT和Anchors不能得到全局最优,可能只能得到局部最优。 2、目前提出的ATSS和P…...

前后端交互—跨域与HTTP
跨域 代码下载 同源策略 同源策略(英文全称 Same origin policy)是浏览器提供的一个安全功能。 MDN 官方给定的概念:同源策略限制了从同一个源加载的文档或脚本如何与来自另一个源的资源进行交互。这 是一个用于隔离潜在恶意文件的重要安全机制。 通俗的理解:浏览器规定&a…...
Error和Exception的关系以及区别
在Java中,Error 和 Exception 是两种不同类型的异常类,它们都继承自 java.lang.Throwable,但在用途和处理方式上有重要区别。 Error: Error 表示在程序运行过程中,通常由于系统或环境的严重问题而引起的异常情况。这些问题通常是无…...

Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

C++实现分布式网络通信框架RPC(3)--rpc调用端
目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...
CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型
CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...

Xshell远程连接Kali(默认 | 私钥)Note版
前言:xshell远程连接,私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...
Frozen-Flask :将 Flask 应用“冻结”为静态文件
Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)
可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...
ffmpeg(四):滤镜命令
FFmpeg 的滤镜命令是用于音视频处理中的强大工具,可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下: ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜: ffmpeg…...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...
LeetCode - 199. 二叉树的右视图
题目 199. 二叉树的右视图 - 力扣(LeetCode) 思路 右视图是指从树的右侧看,对于每一层,只能看到该层最右边的节点。实现思路是: 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...