当前位置: 首页 > news >正文

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&#xff0c;集群&#xff0c;为了解决某个特定问题将多台计算机组合起来形成的单个系统。 这个单个集群系统可以扩展&#xff0c;系统扩展的方式&#xff1a;scale up&#xff0c;向上扩展&#xff0c;更换更好的主机&#xff1b;scale out&#xff0c;向外扩展&…...

momentum 和 weight_decay 的区别

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

Vue 3 + TypeScript进阶用法

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

AbutionGraph-时序向量图谱数据库-快速安装部署

运行环境 1&#xff09;操作系统 最好是使用CentOS7或者Ubuntu18以上系统&#xff0c;不满足的话请升级系统内核gcc版本至8以上版本。 支持所有国产主流操作系统银河麒麟、统信OS、深度等等&#xff0c;均做过兼容性测试&#xff1b; 2&#xff09;CPU 为确保数据库每个进…...

Delphi-HTTP通讯及JSON解析

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

Postgres 如何使事务原子化?

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

[Vue3]简易版Vue

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

ElasticSearch学习记录

服务器操作系统版本&#xff1a;Ubuntu 24.04 Java版本&#xff1a;21 Spring Boot版本&#xff1a;3.3.5 如果打算用GUI&#xff0c;虚拟机安装Ubuntu 24.04&#xff0c;见 虚拟机安装Ubuntu 24.04及其常用软件(2024.7)_ubuntu24.04-CSDN博客文章浏览阅读6.6k次&#xff0…...

LabVIEW算法执行时间评估与Windows硬件支持

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

经验帖 | Matlab安装成功后打不开的解决方法

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

Ubuntu Linux 文件、目录权限问题

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

LabVIEW密码保护与反编译的安全性分析

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

yolo11经验教训----之一

一、格式转换 可以把python中的.pt文件&#xff0c;导出为libtorch识别的格式&#xff1a; model YOLO("yolo11n.pt") model.export(format"torchscript") 二、查看结构 在c中&#xff0c;我用qt&#xff0c;这样做的&#xff1a; #include "…...

异步处理优化:多线程线程池与消息队列的选择与应用

目录 一、异步处理方式引入 &#xff08;一&#xff09;异步业务识别 &#xff08;二&#xff09;明确异步处理方式 二、多线程线程池&#xff08;Thread Pool&#xff09; &#xff08;一&#xff09;工作原理 &#xff08;二&#xff09;直面优缺点和适用场景 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更加的开箱即用?

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

pickle常见Error解决

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

认识Java数据类型和变量

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

Qt开发技巧(二十四)滚动部件的滑动问题,Qt设置时区问题,自定义窗体样式不生效问题,编码格式问题,给按钮左边加个图,最小化后的卡死假象

继续记录一些Qt开发中的技巧操作&#xff1a; 1.滚动部件的滑动问题 再Linux嵌入式设备上&#xff0c;有时候一个页面的子部件太多&#xff0c;一屏放不下是需要做页面滑动&#xff0c;可以使用“QScrollArea”控件&#xff0c;拖来一个“QScrollArea”控件&#xff0c;将子部件…...

SHELL----正则表达式

一、文本搜索工具——grep grep -参数 条件 文件名 其中参数有以下&#xff1a; -i 忽略大小写 -c 统计匹配的行数 -v 取反&#xff0c;不显示匹配的行 -w 匹配单词 -E 等价于 egrep &#xff0c;即启用扩展正则表达式 -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 模块构建&#xff0c;提供了一系列用于构建 Web 应用程序和 API 的功能&#xff0c;使开发者能够更高效地处理 HTTP 请求和响应&#xff0c;专注于业务逻辑的实现。 其特点包括简单易用…...

使用MSYS搭建linux开发环境踩坑笔记

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

vue3+ts+vite+ElementPlus上传进度条实时更新(UPLoad和progress)。

需求&#xff1a; 上传文件时&#xff0c;展示进度条实时更新&#xff1a; 下面是代码片段: <!-- 添加媒体弹窗 -- 上传 --><el-dialog v-model"centerDialogVisible" title"媒体信息" width"700" :close-on-click-modal"false&qu…...

AspNet WebAPI 模型绑定问题

继承System.Web.Http.ApiController的Action的Model如果被[Serializable]定义&#xff0c;会导致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&#xff1f;SurfaceFlinger 的核心作用和地位&#xff1f;为什么需要了解 SurfaceFlinger&#xff1f; 二. SurfaceFlinger 的基本概念 Surface 和 SurfaceFlinger 的关系SurfaceFlinger 与图形渲染&#xff08;OpenGL ES 和 Vulkan&#xf…...

14、鸿蒙学习——管理通知角标

针对未读的通知&#xff0c;系统提供了角标设置接口&#xff0c;将未读通知个数显示在桌面图标的右上角角标上。 通知增加时&#xff0c;角标上显示的未读通知个数需要增加。 通知被查看后&#xff0c;角标上显示的未读通知个数需要减少&#xff0c;没有未读通知时&#xff0…...

TongRDS分布式内存数据缓存中间件

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

[在线实验]-RabbitMQ镜像的下载与部署

镜像下载 docker的rabbitmq镜像资源-CSDN文库 加载镜像 docker load --input rabbitmq.tar 给镜像打标签 这里发现镜像名为none&#xff0c;需要给镜像重命名下 docker tag [镜像id] [新镜像名称]:[新镜像标签] docker tag ebaf409ffbe2 rabbitmq:management 运行镜像…...

Linux 系统文件描述符(File Descriptor)小白级介绍

1. 概述 Linux 遵循"一切皆文件"的理念。在 Linux 系统中&#xff0c;文件描述符是一个索引值&#xff08;非负整数&#xff09;&#xff0c;指向内核为每个进程所维护的该进程打开文件的记录表。 如上所述&#xff0c;每个进程都维护着一张文件描述符表。 文件描述…...