Linux入门攻坚——40、Linux集群系统入门-lvs(1)
Cluster,集群,为了解决某个特定问题将多台计算机组合起来形成的单个系统。
这个单个集群系统可以扩展,系统扩展的方式:scale up,向上扩展,更换更好的主机;scale out,向外扩展,增加更多的主机;
集群类型:
LB:负载均衡集群,Load Balancing,并发处理能力
HA:高可用集群(冗余),High Availablility,在线时间/(在线时间+故障处理时间)
HP(HPC):高性能集群(高性能计算集群),High Performance(High Performance Computing Cluster),向量机,并行处理集群
Availablility=90%,95%,99%,99.9%,99.99%,...
集群之前,是大规模分布式处理。
集群或是分布式都是一个系统。
度量一个系统: 可扩展性、 可用性、 容量、性能
系统运维:可用 ——> 标准化 ——> 自动化
构建高可扩展性系统的重要原则:在系统内部尽量避免串行化和交互;
GSLB:Global Service Load Balancing,全局负载均衡
SLB:Service Load Balancing
总结:
分层;
分割;
分布式:分布式应用、分布式静态资源、分布式数据和存储、分布式计算;
LB集群的实现:
硬件:
F5 BIG-IP、Citrix NetScaler、A10 A10、Array 、Redware、...
软件:
lvs、haproxy、nginx、ats(apache traffic server)、perbal、...
基于工作的协议层次划分:
传输层:lvs,haproxy(mode tcp)
应用层:haproxy、nginx、ats、perbal
lvs:内核中进行的转发,工作于netfilter,负载均衡。(程序作者:章文嵩)
——linux virtual server,linux虚拟服务器,基于哪个协议的哪个端口进行分发。相应的后台真正进行服务的主机叫real server。
L4:四层交换,四层路由;
根据请求报文的目标IP和PORT将其转发至后端主机集群中的某一台主机(根据挑选算法);
netfilter:
PREROUTING --> INPUT
PREROUTING --> FORWARD --> POSTROUTING
OUTPUT --> FORWARD --> POSTROUTING
lvs工作于INPUT链上,定义了集群规则,然后强行转发到POSTROUTING链上。
ipvsadm/ipvs:lvs在程序上叫做ipvs
ipvsadm:用户空间的命令行工具,用于管理集群服务;
ipvs:工作于内核中netfilter INPUT钩子上;
主机是否提供lvs功能:
grep -i -A 10 'IPVS' /boot/config-3.10.0-1160.el7.x86_64
说明内核已经编译了IPVS模块,可以使用。
支持TCP、UDP,AH,ESP,AH_ESP,SCTP等诸多协议;
lvs arch:lvs架构
专用名称:
调度器:director,dispatcher,balancer
RS:Real Server
Client IP:CIP
Director Virtual IP:VIP
Director IP:DIP
Real Server IP:RIP
lvs type:
lvs-nat:基于DNAT,MASQUERADE
lvs-dr(direct routing):GATEWAY
lvs-tun(ip tunneling):IPIP
lvs-fullnat:
lvs-nat:多目标的DNAT(iptables);通过修改请求报文的目标IP地址(同时可能修改目标端口)至挑选出的某RS的RIP地址实现转发;请求和响应报文都经由director。
1)RS和DIP应该使用私网地址,且RS的网关要指向DIP;
2)请求和响应报文都要经由director转发; 极高负载的场景中,director可能会成为系统瓶颈;
3)支持端口映射;
4)RS可以使用任意OS;
5)RS的RIP和Director的DIP必须在同一IP网络;
关键在第2步,Director调度时可以按算法选择后台的任一台RS实现负载均衡。
lvs-dr:direct routing
通过修改请求报文的目标MAC地址进行转发;仅请求报文经由director,响应报文是由RS直接响应给Client。
Director:VIP,DIP
RS:RIP,VIP(在lo上,即本地回环接口上)
1)保证前端路由器将目标IP为VIP的请求报文发送给director;
解决方案:静态绑定、arptables、修改RS主机内核的参数,主要是使RS不响应对VIP的ARP查询。
2)RS的RIP可以使用私有地址,也可以使用公网地址;
3)RS跟Director必须在同一物理网络中;
4)请求报文经由Director调度,但响应报文一定不能经由Director;
5)不支持端口映射;
6)RS可以是大多数OS;
7)RS的网关不能指向DIP;
通过上面的示意图,dr模型主要是通过MAC地址实现。
lvs-tun:不修改请求报文的IP首部,而是通过在原有的IP首部(cip <--> vip)之外,再封装一个IP首部(dip <--> rip);
1)RIP,DIP,VIP全部都是公网地址;
2)RS的网关不能指向DIP;
3)请求报文必须经由Director调度,但响应报文必须不能经由Director;
4)不支持端口映射;
5)RS的OS必须支持隧道功能;
lvs-fullnat:Director通过同时修改请求报文的源和目的IP地址进行转发;
1)VIP是公网地址,RIP和DIP是私网地址,二者无须在同一网络中;
2)RS接收到的请求报文的源地址是DIP,因此要响应给DIP;
3)请求报文和响应报文都必须经由Director;
4)支持端口映射机制;
5)RS的OS可以使用任意OS;
http:stateless,http协议是无状态的协议
session和cookie:实现状态追踪,无状态变为有状态。在集群中,涉及如何在不同集群服务器中对session的保持。
session保持机制:
session绑定:将来自同一个用户的请求,始终导向同一个RS;可以基于两种依据IP和cookie:
source ip hash,基于源ip做哈希。
cookie,基于cookie。
session集群:
session复制到其他所有RS中,可能网络中充斥session复制信息,浪费带宽;
session服务器:
使用一台服务器单独存放session信息,又引入了单点问题。
lvs scheduler:lvs调度器,多种不同的调度算法
静态方法:仅根据算法本身进行调度;
RR:round robin,轮询,论调;
WRR:weighted rr,加权轮询
SH:source hash,实现session保持的机制;将来自于同一个IP的请求始终调度至同一RS;
DH:destination hash,将对同一个目标的请求始终发往同一个RS;
动态方法:根据算法及各RS的当前负载状态进行调度;
负载 Overhead=
LC:Least Connection,最少连接数;Overhead=Active*256+Inactive
WLC:Weighted LC,Overhead=(Active*256 + Inactive)/ weight
SED:Shortest Expection Delay,Overhead=(Active+1)*256 / weight
NQ:Never Queue,在RS有空时,依次按权重选择,然后按SED;
LBLC:Locality-Based LC,即动态的DH算法;正向代理情形下的cache server调度;
LBLCR:Locality-Based Least-Connection with Replication,带复制功能的LBLC算法;
ipvs的集群服务:
tcp,udp,ah,esp,ah_esp,sctp
1)一个ipvs主机可以同时定义多个cluster service;tcp、udp
2)一个cluster service上至少应该有一个real server;
定义时,指明lvs-type,以及lvs scheduler;
ipvsadm的用法:
管理集群服务:
ipvsadm -A|E -t|u|f service-address [-s scheduler]
ipvsadm -D -t|u|f service-address
service-address:
tcp:-t ip:port
udp:-u ip:port
fwm:-f mark
-s scheduler:默认为wlc
管理集群服务中的RS:
ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight]
ipvsadm -d -t|u|f service-address -r server-address
server-address:ip:[port]
lvs-type:-g --> gateway,dr;-i --> ipip,tun;-m --> masquerade,nat
查看和清空:
ipvsadm -C
ipvsadm -L|l [options]
-n:基于数字格式显示地址和端口;
-c:connection,显示ipvs连接
--stats:统计数据
--rate:速率
--exact:显示精确值
保存和重载:
ipvsadm -R
ipvsadm -S [-n]
置零计数器:
ipvsadm -Z [ -t|u|f service-address]
实操测试:
模拟环境:
在RS1和RS2上安装好httpd服务,在Director上确保iptables是空的:
iptables -F -t filter -t nat -t mangle
确保Director上的转发功能开启:
添加规则
添加集群Director:
ipvsadm -A -t 192.168.61.129:80 -s rr
ipvsadm -L -n
添加RS:
ipvsadm -a -t 192.168.61.129:80 -r 192.168.147.129 -m
ipvsadm -a -t 192.168.61.129:80 -r 192.168.147.130 -m
保存规则、清空规则、重载规则:
修改Director调度算法:
ipvsadm -E -t 192.168.61.129:80 -s sh
修改RS:
ipvsadm -e -t 192.168.61.129:80 -r 192.168.147.129:8080 -m
这个命令一直不成功,提示No such destination,不知是什么原因
删除一个RS:
ipvsadm -d -t 192.168.61.129:80 -r 192.168.147.129
查询:
相关文章:

Linux入门攻坚——40、Linux集群系统入门-lvs(1)
Cluster,集群,为了解决某个特定问题将多台计算机组合起来形成的单个系统。 这个单个集群系统可以扩展,系统扩展的方式:scale up,向上扩展,更换更好的主机;scale out,向外扩展&…...

momentum 和 weight_decay 的区别
momentum 和 weight_decay 的区别 两者在优化器中的作用不同,主要体现在优化的目的和机制上。 1. momentum(动量) 作用:加速收敛并减少优化过程中的震荡。 机制: momentum 是用于在梯度下降中积累动量的机制。它通过在每一步中综合之前的更新方向,帮助模型在陡峭区域加速…...

Vue 3 + TypeScript进阶用法
在掌握了 Vue 3 和 TypeScript 的基本使用后,你可以进一步探索一些进阶特性和最佳实践。这些包括更复杂的类型定义、自定义 hooks、全局状态管理等。下面是一些关键点: 1. 更复杂的类型定义 Props 和 Emits 的类型 对于组件的 props 和 emits…...

AbutionGraph-时序向量图谱数据库-快速安装部署
运行环境 1)操作系统 最好是使用CentOS7或者Ubuntu18以上系统,不满足的话请升级系统内核gcc版本至8以上版本。 支持所有国产主流操作系统银河麒麟、统信OS、深度等等,均做过兼容性测试; 2)CPU 为确保数据库每个进…...

Delphi-HTTP通讯及JSON解析
HTTP POST 请求函数 HttpPost 此函数用于发送带有JSON内容的POST请求到指定的URL,并接收服务器响应。它包括了必要的异常处理,确保在遇到错误时可以记录日志。 参数: sUrl:目标URL。sJson:要发送的JSON格式字符串。 返…...

Postgres 如何使事务原子化?
原子性(“ACID”意义上的)要求 对于对数据库执行的一系列操作,要么一起提交,要么全部回滚;不允许中间状态。对于现实世界的混乱的代码来说,这是天赐之物。 这些更改将被恢复,而不是导致生产环境…...

[Vue3]简易版Vue
简易版Vue 实现ref功能 ref功能主要是收集依赖和触发依赖的过程。 export class Dep { // 创建一个类,使用时使用new Depconstructor(value) { // 初始化可传入一个值this._val value;this.effects new Set(); //收集依赖的容器,使用set数据结构}…...

ElasticSearch学习记录
服务器操作系统版本:Ubuntu 24.04 Java版本:21 Spring Boot版本:3.3.5 如果打算用GUI,虚拟机安装Ubuntu 24.04,见 虚拟机安装Ubuntu 24.04及其常用软件(2024.7)_ubuntu24.04-CSDN博客文章浏览阅读6.6k次࿰…...

LabVIEW算法执行时间评估与Windows硬件支持
在设计和实现复杂系统时,准确估算算法的执行时间是关键步骤,尤其在实时性要求较高的应用中。这一评估有助于确定是否需要依赖硬件加速来满足性能需求。首先需要对算法进行时间复杂度分析并进行实验测试,了解其在Windows系统中的运行表现。根据…...

经验帖 | Matlab安装成功后打不开的解决方法
最近在安装Matlab2023时遇到了一个问题: 按照网上的安装教程成功安装 在打开软件时 界面闪一下就消失 无法打开 但是 任务管理器显示matlab在运行中 解决方法如下: matlab快捷方式–>右键打开属性–>目标 填写许可证文件路径 D:\MATLAB\MatlabR20…...

Ubuntu Linux 文件、目录权限问题
本文为Ubuntu Linux操作系统- 第五弹 此文是在上期文件目录的内容操作基础上接着讲权限问题 上期回顾:Ubuntu Linux 目录和文件的内容操作 文件访问者身份与文件访问权限 Linux文件结构 所有者(属主)所属组(属组)其他…...

LabVIEW密码保护与反编译的安全性分析
在LabVIEW中,密码保护是一种常见的源代码保护手段,但其安全性并不高,尤其是在面对专业反编译工具时。理论上,所有软件的反编译都是可能的,尽管反编译不一定恢复完全的源代码,但足以提取程序的核心功能和算法…...

yolo11经验教训----之一
一、格式转换 可以把python中的.pt文件,导出为libtorch识别的格式: model YOLO("yolo11n.pt") model.export(format"torchscript") 二、查看结构 在c中,我用qt,这样做的: #include "…...

异步处理优化:多线程线程池与消息队列的选择与应用
目录 一、异步处理方式引入 (一)异步业务识别 (二)明确异步处理方式 二、多线程线程池(Thread Pool) (一)工作原理 (二)直面优缺点和适用场景 1.需要快…...

Hadoop生态圈框架部署 伪集群版(一)- Linux操作系统安装及配置
文章目录 前言一、下载CentOS镜像1. 下载 二、创建虚拟机hadoop三、CentOS安装与配置1. 安装CentOS2. 配置虚拟网络及虚拟网卡2.1 配置虚拟网络2.2 配置虚拟网卡 3. 安装 SSH 远程连接工具 FinalShell3.1 简介3.2 下载和安装3.2.1 下载3.2.2 安装 3.3 查看动态ip地址3.4 使用Fi…...

Go的Gin比java的Springboot更加的开箱即用?
前言 隔壁组的云计算零零后女同事,后文简称 云女士 ,非说 Go 的 Gin 框架比 Springboot 更加的开箱即用,我心想在 Java 里面 Springboot 已经打遍天下无敌手,这份底蕴岂是 Gin 能比。 但是云女士突出一个执拗,非我要…...

pickle常见Error解决
1. pickle OverflowError: cannot serialize a bytes object larger than 4 GiB 进行pickle.dump时出现上述错误,可以加上“protocol4”参数。依据:https://docs.python.org/3/library/pickle.html#data-stream-format 2. pickle EOFError: Ran out of…...

认识Java数据类型和变量
数据类型分类 基本数据类型(8个): 整数型 byte 8位 short 16位 int 32位 long 64位 默认整数类型是int类型 小数型/浮点型 float【单精度32位】 double【双进度64位】 字符型 char 16位 只能表示单个字符 布尔型 boolean 1位 只能有两个值 true 【真】 false 【…...

Qt开发技巧(二十四)滚动部件的滑动问题,Qt设置时区问题,自定义窗体样式不生效问题,编码格式问题,给按钮左边加个图,最小化后的卡死假象
继续记录一些Qt开发中的技巧操作: 1.滚动部件的滑动问题 再Linux嵌入式设备上,有时候一个页面的子部件太多,一屏放不下是需要做页面滑动,可以使用“QScrollArea”控件,拖来一个“QScrollArea”控件,将子部件…...

SHELL----正则表达式
一、文本搜索工具——grep grep -参数 条件 文件名 其中参数有以下: -i 忽略大小写 -c 统计匹配的行数 -v 取反,不显示匹配的行 -w 匹配单词 -E 等价于 egrep ,即启用扩展正则表达式 -n 显示行号 -rl 将指定目录内的文件打…...

44.5.【C语言】辨析“数组指针”和“指针数组”
目录 1.数组指针 2.指针数组 执行结果 底层分析 1.数组指针 从语文的角度理解,"数组"修饰"指针".因此数组指针是指针 例如以下代码 #include <stdio.h> int main() {char a[5] { "ABCDE" };return 0;} 其中a就是数组指针,因为数…...

node.js基础学习-express框架-路由及中间件(十)
一、前言 Express 是一个简洁、灵活的 Node.js Web 应用框架。它基于 Node.js 的内置 HTTP 模块构建,提供了一系列用于构建 Web 应用程序和 API 的功能,使开发者能够更高效地处理 HTTP 请求和响应,专注于业务逻辑的实现。 其特点包括简单易用…...

使用MSYS搭建linux开发环境踩坑笔记
前言: 使用linux系统或虚拟机进行嵌入式linux开发是常规方法; 使用MSYS是用于尝鲜和研究。 由于windows和linux的差异,使用MSYS代替Linux虚拟机会遇到很多坑。 主要原因在于: 1. windows和linux文件系统的差异:win不…...

vue3+ts+vite+ElementPlus上传进度条实时更新(UPLoad和progress)。
需求: 上传文件时,展示进度条实时更新: 下面是代码片段: <!-- 添加媒体弹窗 -- 上传 --><el-dialog v-model"centerDialogVisible" title"媒体信息" width"700" :close-on-click-modal"false&qu…...

AspNet WebAPI 模型绑定问题
继承System.Web.Http.ApiController的Action的Model如果被[Serializable]定义,会导致Model的字段无法绑定。 Microsoft.AspNet.WebApi.Core.5.2.3\lib\net45\System.Web.Http.dll [Serializable] public class Model {public string id { get; set; } }public MyA…...

Android 图形系统之七:SurfaceFlinger
一. 引言 什么是 SurfaceFlinger?SurfaceFlinger 的核心作用和地位?为什么需要了解 SurfaceFlinger? 二. SurfaceFlinger 的基本概念 Surface 和 SurfaceFlinger 的关系SurfaceFlinger 与图形渲染(OpenGL ES 和 Vulkan…...

14、鸿蒙学习——管理通知角标
针对未读的通知,系统提供了角标设置接口,将未读通知个数显示在桌面图标的右上角角标上。 通知增加时,角标上显示的未读通知个数需要增加。 通知被查看后,角标上显示的未读通知个数需要减少,没有未读通知时࿰…...

TongRDS分布式内存数据缓存中间件
命令 优势 支持高达10亿级的数据缓冲,内存优化管理,避免GC性能劣化。 高并发系统设计,可充分利用多CPU资源实现并行处理。 数据采用key-value多索引方式存储,字段类型和长度可配置。 支持多台服务并行运行,服务之间可互…...

[在线实验]-RabbitMQ镜像的下载与部署
镜像下载 docker的rabbitmq镜像资源-CSDN文库 加载镜像 docker load --input rabbitmq.tar 给镜像打标签 这里发现镜像名为none,需要给镜像重命名下 docker tag [镜像id] [新镜像名称]:[新镜像标签] docker tag ebaf409ffbe2 rabbitmq:management 运行镜像…...

Linux 系统文件描述符(File Descriptor)小白级介绍
1. 概述 Linux 遵循"一切皆文件"的理念。在 Linux 系统中,文件描述符是一个索引值(非负整数),指向内核为每个进程所维护的该进程打开文件的记录表。 如上所述,每个进程都维护着一张文件描述符表。 文件描述…...