01 LVS负载均衡群集
集群
在互联网应用中,随着站点对硬件的性能、响应速度、服务稳定性、数据可靠性等要求越来越高,单台服务器越来越力不从心
集群的含义
- Cluster,集群也叫群集
- 由多台主机构成,但对外只表现为一个整体
集群分类
类型
- 负载均衡集群(高并发)
- 高可用集群(避免单点故障)
- 高性能运算集群
负载均衡集群(Load Balance Cluster)
- 提高应用系统的响应能力,因可能处理更多的访问请求、减少延迟为目标,获得高并发、高负载(LB)的整体性能
- LB的负载均衡依赖于主节点的分流算法
高可用集群(High Availability Cluster)
- 以提高系统的可靠性,尽可能地减少中断时间为目标,确保服务的连续性,达到高可用的容错效果
- HA的工作方式包括双工和主从两种模式
高性能运算集群(High Performance Computer Cluster)
- 以提高应用系统的CPU运算速度、扩展硬件资源和分析能力为目标,获得相当于大型、超级计算机的高性能运算(HPC)能力
- 高性能依赖于"分布式运算"、"并行计算",通过专用硬件和软件将多个服务器的CPU、内存等资源整合在一起,实现只有大型、超级计算机才具备的计算能力
负载均衡集群架构
第一层,负载调度器(Load Balancer或Director)
- 当用户向服务器发送一个访问请求时,不让用户直接访问服务器,而是访问一个独立的调度器服务器,它的任务是接收用户的访问请求,把请求按照调度策略分配给后端的服务器
- 调度器不负责数据的解析,只是一个中转站,因此调度器的并发能力很强
第二层,服务器池(Server Pool)
- 调度器分配请求的目的地就是服务器池,负责向用户提供服务
- 在集群中,服务器池内的任意一个单台服务器,都可以单独运行业务产品,只是压力比负载均衡的环境更大而已
第三层,共享存储(Share Storage)
- 让服务器池中的每个Web服务器都挂载同一个存储池,假如网站内容更新,不需要在每个Web服务器上都更新一遍
结构

LVS集群的工作模式
本次只演示地址转换的示例步骤
- 负载均衡集群是目前企业用的最多的集群类型
- 集群的负载调度技术有三种工作模式
- 地址转换
- IP隧道
- 直接路由
NAT模式

- Network Address Translation,简称NAT模式
- 类似于防火墙的私有网络结构,负载调度器作为所有服务器节点的网关,作为外网的访问入口,内网的应答出口
- 服务器节点使用私有IP地址,与负载调度器位于同一个物理网络,安全性要优于其他两种方式
- 外网的请求和内网的响应都需要经过调度器,所以内网服务器的网关地址应该是调度器
- 针对中小型的集群环境
源地址和目标地址转换的过程
- 当外网客户端访问业务而发送请求时,调度器根据策略选择一个可用的后端服务器来处理请求
- 然后调度器通过DNAT把目标地址转换为后端服务器的地址,并传递给该服务器
- 后端服务器收到请求后,生成响应,然后返回给调度器,此时响应的源地址是后端服务器的IP地址
- 调度器收到响应后,通过SNAT把源地址修改为自己与外网通信的公有IP地址
- 然后返回给客户端
DR模式(直接路由)

- Direct Routing,简称DR模式
- 采用半开放式的网络结构,与TUN模式的结构类似,但内网服务器并不是分散在各地,而是与调度器位于同一个物理网络
- 负载调度器与内网服务器通过本地网络连接,不需要建立专用的IP隧道
- 因为调度器只接收外网的请求,内网服务器的响应则是直接由网关路由出去,所以减轻了调度器的压力
- 针对大规模集群
源地址和目标地址转换的过程
- 当外网客户端需要访问业务而发送请求时
- 通过DNAT修改目标地址为调度器的地址,然后传递给内网调度器
- 调度器收到请求后,根据调度策略选择一个可用的后端服务器,再通过DNAT把目标地址转换为内网服务器的地址,然后把请求传递给内网服务器
- 内网服务器收到请求后,生成响应直接返回给网关,此时的源地址是内网服务器的IP地址
- 网关收到后端服务器的响应后,进行SNAT地址转换,把源地址转换为网关的公有IP地址,然后返回给客户端
TUN模式(IP隧道)

- IP Tunnel,简称TUN模式
- 采用开放式的网络结构,调度器和内网设备不在同一物理网络
- 负载调度器仅作为外网的访问入口,内网服务器通过各自的Internet连接直接回应外网请求,而不再经过调度器
- 服务器节点分散在互联网中的不同位置,具有独立的公网IP地址,通过专用IP隧道与负载调度器相互通信
- 由于调度器和服务器都部署在公网,所以它们之间的通信都通过ip-ip的加密算法来加密通信
源地址和目标地址转换的过程
- 外网请求首先到达调度器的外网接口
- 调度器收到这些请求后,根据预设的路由规则将请求打包封装进IP隧道中,然后发送到内网
- 数据在IP隧道中传输时,隧道设备会将原始数据包头部封装,这个头部包含的是隧道设备的公共IP地址和内网目标服务器的私有IP地址
- 当内网服务器收到请求后,生成响应,响应首先到达隧道设备。
- 隧道设备会解析响应,去除隧道头部,然后根据记录的信息将响应返回到发起请求的外网客户端
- 外网客户端最终接收到的响应来自调度器,因为调度器会将来自内网服务器的响应经过隧道的IP地址转换,使得外网客户端看到的是调度器的公共IP地址作为源地址。
调度算法
-
轮询(Round Robin)
- 将受到的访问请求按照顺序轮流分配给群集中的各节点,(真实服务器),均等的对待每一台服务器,而不管服务器实际的连接数和系统负载
-
加权轮询(Weighted Round Robin)
- 根据调度器设置的权重值来分发请求,权重值高的节点优先获得任务,分配的请求书越多
- 保证性能强的服务器承担更多的请求数量
LVS常用选项
| 选项 | 说明 |
| -s | 指定调度算法 rr:轮询 wrr:加权轮询 lc:最小链接数 wlc:加权最小连接数 |
| -A | 添加一个新的集群服务 |
| -E | 修改一个己有的集群服务 |
| -D | 删除指定的集群服务 |
| -S | 保存ipvsadm设定的规则策略,默认保存在/etc/sysconfig/ipvsadm中 |
| -R | 载入己保存的规则策略,默认加载/etc/sysconfig/ipvsadm |
| -C | 清除所有集群服务 |
| -Z | 清除所有记数器 |
| -L | 显示当前己有集群服务,能通过相应的options查看不同状态信息 |
| -a | 向指定的集群服务中添加RS及属性 |
| -e | 修改RS属性 |
| -t | 指定为tcp协议 |
| -u | 指定为udp协议 |
| -s | 调度方法,默认为wlc |
| -w | 指定权重,默认为1 |
| -g | Gateway, DR模型 |
| -i | ipip, TUN模型 |
| -m | masquerade, NAT模型 |
| -r | 指定后端服务器的地址 |
相关文章:
01 LVS负载均衡群集
集群 在互联网应用中,随着站点对硬件的性能、响应速度、服务稳定性、数据可靠性等要求越来越高,单台服务器越来越力不从心 集群的含义 Cluster,集群也叫群集由多台主机构成,但对外只表现为一个整体 集群分类 类型 负载均衡集…...
Redis结合Lua脚本的简单使用
我们就拿购物车举例子 现在有5个东西免费送,我们只能选择1个 例如 可乐 美年达 香蕉 苹果 薯片 我们选择后就放进redis里面 然后我们不能选重复,只能选不同 Lua脚本 我们redis使用lua脚本的时候,会传两个参数进去 一个是List<Strin…...
Java使用zip4j加密压缩和解压文件与文件夹
最近项目中有个需求需要对文件夹进行压缩后传输,考虑数据泄露安全性问题,需要对压缩包进行加密,特地查找了下开源压缩加密类库,找到了Java语言开发的zip4j库,觉得挺好用的,在这分享给大家! Jav…...
一款好用的开源网站内容管理系统
今天给大家介绍的是一款开源网站内容管理系统(灵活、易用,性能良好、运行稳定,轻松管理建设网站) 官网:https://www.ujcms.com/ 介绍 客户端兼容Edge(Chromium版)、谷歌浏览器(Chro…...
Qt Modbus 寄存器读写实例
一.线圈状态寄存器读写 项目效果如下 1. 写单个寄存器 MODBUS_API int modbus_write_bit(modbus_t *ctx, int coil_addr, int status); int addrui->spinBoxwirte_addr->value();int dataui->spinBoxwirte_data->value();int ret modbus_write_bit(mb,addr,d…...
centos安装es、kibana、ik
这里es使用的是7.10.2版本的es,物料包下载地址如下 #注意安装的插件需和es版本保持一致 #es https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.10.2-linux-x86_64.tar.gz #kibana https://artifacts.elastic.co/downloads/kibana/kibana-7.10…...
调试工具之GDB的基本使用
GDB基本使用 GDB是Linux下一款非常强大的调试软件,其实就是GNU Debugger的缩写。接下来我们学习一下他的基本使用。 例子函数,其中只有一个ds18b20的采集温度函数和一个主函数: #include <stdio.h> #include <errno.h> #includ…...
C++ //练习 16.14 编写Screen类模板,用非类型参数定义Screen的高和宽。
C Primer(第5版) 练习 16.14 练习 16.14 编写Screen类模板,用非类型参数定义Screen的高和宽。 环境:Linux Ubuntu(云服务器) 工具:vim 代码块 template <int H, int W> class Screen{…...
【Java】深度解析监视器的组成原理
目录 一、什么是监视器(Monitor)二、监视器的组成部分三、线程的状态转换四、总结 一、什么是监视器(Monitor) 在Java中,监视器(Monitor)是用来实现线程同步的一种机制。每个Java对象都有一个与…...
Day14-Servlet后端验证码的实现
图片验证码的生成采用的是Kaptcha; Kaptcha是一个高度可配置的验证码生成工具,由Google开源。它通过一系列配置文件和插件,实现了将验证码字符串自动转换成图片流,并可以与session进行关联,从而在验证过程中使用&#…...
MySQL:数据库权限与角色
权限 MySQL 的权限管理系统是保障数据库安全性的关键组件之一。它允许数据库管理员精确控制哪些用户可以对哪些数据库对象执行哪些操作。 自主存取控制 DAC(DiscretionaryAccess Control):用户对于不同的数据库对象有不同的存取权限,不同的…...
等保测评练习卷25
等级保护初级测评师试题25 姓名: 成绩: 一、判断题(10110分) 1.安全区域边界对象主要根据系统中网络访问控制设备的部署情况来确定()不是网络访问控制设备而…...
《python语言程序设计》2018第6章第28题 掷骰子 两个色子,分别是1到6
2、3、12 玩家输 7、11玩家赢 4、5、6、8、9、10算1点,之后出7玩家输或者和上一次相同。def rolled(num_t):count 0still_win 0second_win 0still_lose 0second_lose 0while count < num_t:a_1 random.randint(1, 6)b_1 random.randint(1, 6)tTen a_1 b…...
Java方法递归
目录 1.方法递归调用 基本介绍 递归能解决什么问题? 八皇后问题 递归举例 递归重要规则 练习 2.递归调用应用实例-迷宫问题 3.递归调用实例-汉诺塔 4.递归调用实例-八皇后问题 1.方法递归调用 基本介绍 简单来说,递归就是自己调用自己。 …...
目标跟踪那些事
目标跟踪那些事 跟踪与检测的区别 目标跟踪和目标检测是计算机视觉中的两个重要概念,但它们的目的和方法是不同的。 目标检测(object Detection):是指在图像或视频帧中识别并定位一个或多个感兴趣的目标对象的过程 。 目标跟踪(object Tracking)&…...
【Git】 如何将一个分支的某个提交合并到另一个分支
【Git】 如何将一个分支的某个提交合并到另一个分支 在使用 Git 进行版本控制时,常常会遇到这样的需求:将某个分支的特定提交合并到另一个分支中。这种情况下,我们可以使用 cherry-pick 命令来实现。本文将详细介绍 cherry-pick 命令的使用方…...
【嵌入式之RTOS】什么是消息队列
目录 一、FreeRTOS消息队列的基本概念 二、FreeRTOS消息队列的工作原理 三、FreeRTOS消息队列的特点 四、FreeRTOS消息队列的应用 五、示例 消息队列是一种用于任务间通信的机制,它允许一个任务(生产者)向消息队列发送消息,而…...
9-springCloud集成nacos config
本文介绍spring cloud集成nacos config的过程。 0、环境 jdk 1.8maven 3.8.1Idea 2021.1nacos 2.0.3 1、项目结构 根项目nacos-config-sample下有两个module,这两个module分别是两个springboot项目,都从nacos中获取连接mysql的连接参数。我们开工。 …...
市场主流 AI 视频生成技术的迭代路径
AI视频生成技术的迭代路径经历了从GANVAE、Transformer、Diffusion Model到Sora采用的DiT架构(TransformerDiffusion)等多个阶段,每个阶段的技术升级都在视频处理质量上带来了飞跃性的提升。这些技术进步不仅推动了AI视频生成领域的快速发展&…...
移情别恋c++ ദ്ദി˶ー̀֊ー́ ) ——1.c++入门(2)
1. 函数重载 C⽀持在同⼀作⽤域中出现同名函数,但是要求这些同名函数的形参不同,可以是参数个数不同或者 类型不同。这样C函数调⽤就表现出了多态⾏为,使⽤更灵活。C语⾔是不⽀持同⼀作⽤域中出现同 名函数的。 #include<iostream> u…...
synchronized 学习
学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...
java_网络服务相关_gateway_nacos_feign区别联系
1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...
Module Federation 和 Native Federation 的比较
前言 Module Federation 是 Webpack 5 引入的微前端架构方案,允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...
tomcat入门
1 tomcat 是什么 apache开发的web服务器可以为java web程序提供运行环境tomcat是一款高效,稳定,易于使用的web服务器tomcathttp服务器Servlet服务器 2 tomcat 目录介绍 -bin #存放tomcat的脚本 -conf #存放tomcat的配置文件 ---catalina.policy #to…...
Chrome 浏览器前端与客户端双向通信实战
Chrome 前端(即页面 JS / Web UI)与客户端(C 后端)的交互机制,是 Chromium 架构中非常核心的一环。下面我将按常见场景,从通道、流程、技术栈几个角度做一套完整的分析,特别适合你这种在分析和改…...
ubuntu系统文件误删(/lib/x86_64-linux-gnu/libc.so.6)修复方案 [成功解决]
报错信息:libc.so.6: cannot open shared object file: No such file or directory: #ls, ln, sudo...命令都不能用 error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory重启后报错信息&…...
comfyui 工作流中 图生视频 如何增加视频的长度到5秒
comfyUI 工作流怎么可以生成更长的视频。除了硬件显存要求之外还有别的方法吗? 在ComfyUI中实现图生视频并延长到5秒,需要结合多个扩展和技巧。以下是完整解决方案: 核心工作流配置(24fps下5秒120帧) #mermaid-svg-yP…...
Vue3中的computer和watch
computed的写法 在页面中 <div>{{ calcNumber }}</div>script中 写法1 常用 import { computed, ref } from vue; let price ref(100);const priceAdd () > { //函数方法 price 1price.value ; }//计算属性 let calcNumber computed(() > {return ${p…...
