集群基础1——集群概念、LVS负载均衡

news2024/11/27 6:38:04

文章目录

  • 一、基本了解
  • 二、LVS负载均衡
    • 2.1 基本了解
    • 2.2 工作模式
      • 2.2.1 NAT模式
      • 2.2.2 DR模式
      • 2.2.3 LVS-TUN模式
      • 2.2.4 LVS-FULLNAT模式
  • 三、调度器算法
  • 四、ipvsadm命令

一、基本了解

什么是集群?

  • 多台服务器做同一件事情。

集群扩展方式:

  1. scale up:向上扩展,提高服务器资源配置,比如更换CPU、增加内存等。
  2. scale out:向外扩展,增加服务器数量共同协作完成对外服务。

集群类型:

  1. 负载均衡集群(LB):
    • 负载均衡集群中有一个分发器或者叫调度器,称为Director,它处在多台服务器的上面。
    • 分发器根据内部锁定义的规则或调度方式,从下面的服务器群中选择一个以此来响应客户端发送的请求,从而解决高并发的问题。
    • 在扩展中可非常容易的使用scale out扩展,从而实现集群的伸缩性,常见开源解决方案有lvs、haprox、nginx、ats。
  2. 高可用集群(HA):
    • 高可用集群可以提高服务的可用性,当可以防止某台服务器宕机导致业务中断问题。
    • 工作模式是将一个具有故障的服务转交给一个正常工作的服务器,从而达到服务不会中断。
    • 集群中工作在前端(分发器)的服务器都会对后端服务器做健康检查,若发现服务器宕机就不会对其再做转发。
    • 衡量标准:可用性=在线时间/(在线时间+故障处理时间),就是通常我们说的可用性99%、99.9%、99.99%等等,常见开源解决方案有heartbeat、keepalived等。
  3. 高性能集群(HP):
    • 高性能集群是当某一个任务量非常大的时候,可以做一个集群共同来完成这一个任务,这种处理方式称为并行处理集群。
    • 并行处理集群是将大任务划分为小任务,分别进行处理的机制,常常用于大数据分析、海量资源整合,目前比较出名的就是Hadoop。

负载均衡实现方案:

  • 硬件实现的调度器:F5 BIG-IP、Citrix NetScaler、A10、Array、Redware。
  • 软件实现的调度器:lvs、haproxy、nginx、ats(apache+traffic+server) 、perlbal

注意事项:

  1. 按照调度器工作在OSI协议的哪一层,可以将实现方案进行分类:
  • 传输层(内核空间,四层调度):lvs、haproxy(mode接口,tcp接口)
  • 应用层(用户空间,七层调度):haproxy、nginx、ats、perlbal

二、LVS负载均衡

2.1 基本了解

概念:

  • LVS:全称Linux Virtual Server,为linux虚拟服务器,是一个工作在linux服务器上的服务。
  • L4:四层交换,四层路由。根据请求报文的目标IP和端口将其转发至后端主机集群中的某一台主机,其中会涉及到算法。
  • 支持lvs的协议,TCP、UDP、AH、EST、AH_EST、SCTP等诸多协议。

LVS组成:

  1. 由ipvsadm和ipvs两个工具组成:
  2. ipvsadm:用户空间命令行工具,用于在Director上定义集群服务和添加集群上的Real Servers。
  3. ipvs:工作于内核上netfilter中INPUT钩子上的程序代码

netfilter流量过滤器的三种模式:

  1. 当客户端请求目标是本机时,流量状态变化为:PREROUTING ——> INPUT(本机)。
  2. 当客户端请求目标是后端服务器集群时,流量状态变化为:PREROUTING ——> FORWARD (数据从本机转发出去之后)——> POSTROUTING
  3. 当本机发出数据时,流量状态变化为:OUTPUT(本机没发数据之前) ——> POSTROUTING(由本机发出数据)。

LVS常用术语:

  1. 调度器,简称director、dispatcher、balancer。
  2. 后端服务器,简称Real Server、Backend Server、RS。
  3. 调度器一般配两个IP地址:
    • VIP为虚拟IP,用于向外提供服务。
    • DIP为真实IP,用于与后端服务器通信。
  4. RIP:后端服务器的的真实IP。
  5. CIP:客户端的真实IP。

1.在调度器主机查看系统对ipvs的支持情况,包括算法。

grep -i -A 2 'ipvs' /boot/config-4.18.0-193.el8.x86_64 

2.安装ipvsadm命令提供包。

yum -y install ipvsadm

2.2 工作模式

四种工作模式原理:

  • lvs-nat模式:通过网络地址转换方式来实现调度。
    1. 调度器(LB)接收到客户的请求数据包时(请求的目的IP为VIP),根据调度算法决定将请求发送给哪个后端的真实服务器。
    2. 调度器把客户端发送的请求数据包的目标IP地址及端口改成后端真实服务器的IP地址(RIP),这样真实服务器就能够接收到客户的请求数据包了。
    3. 真实服务器响应完请求后,查看默认路由把响应后的数据包发送给LB,LB再接收到响应包后,把包的源地址改成虚拟地址(VIP)然后发送回给客户端。
  • lvs-dr模式:通过改写请求报文的目标MAC地址实现调度。
    1. 默认模式,也是企业中最常用的模式。
    2. 真实服务器响应后的处理结果直接返回给客户端用户。
    3. 可以极大提高集群系统的伸缩性,对真实服务器集群没有必要必须支持IP隧道协议要求,但是要求调度器与真实服务器都有一块网卡连接到同一物理网段上,必须在同一个局域网环境。
  • lvs-tun模式:具备封装操作,也称隧道模式。
    1. 客户端将请求发往前端的负载均衡器(LB),请求报文源地址是CIP,目标地址为VIP。
    2. 负载均衡器在数据包的基础上在封装一层IP报文,将源地址改为DIP,目标地址改为RIP,并将此包发送给RS
    3. RS收到请求报文后,会首先拆开第一层封装,然后发现里面还有一层IP首部的目标地址是自己lo接口上的VIP,所以会处理请求报文,处理完请求就会以自己的lo接口的vip地址将数据发送给客户端。
  • lvs-fullnat模式:
    1. 客户端对VIP发起请求,Director接过请求, 发现是请求后端集群服务,Director对请求报文做FULL NAT,把源IP改为DIP,把目标IP转换为任意后端RS的RIP,随后发往后端。
    2. RS 接到请求后,进行响应,相应报文源IP为RIP,目标IP还是DIP,又内部路由路由到Director。
    3. Director 接到响应报文后,进行FULL NAT,把源地址改为VIP,目标地址改为CIP。

2.2.1 NAT模式

流程图:
在这里插入图片描述
工作流程:

  1. 当用户请求到达调度器时,此时请求的数据报文会先到内核空间的PREROUTING链,此时报文的源IP为CIP,目标IP为VIP。
  2. PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链。
  3. IPVS比对数据包请求的服务是否为集群服务,若是,修改数据包的目标IP地址为后端服务器IP,后将数据包发至POSTROUTING链。 此时报文的源IP为CIP,目标IP为RIP。
  4. POSTROUTING链通过选路,将数据包发送给Real Server。
  5. Real Server比对发现目标为自己的IP,开始构建响应报文发回给Director Server。 此时报文的源IP为RIP,目标IP为CIP。
  6. Director Server在响应客户端前,此时会将源IP地址修改为自己的VIP地址,然后响应给客户端。 此时报文的源IP为VIP,目标IP为CIP

优缺点:

  1. NAT模式一直在做目标地址转换工作,所以当网站访问量比较大时,LB负载均衡调度器有比较大的瓶颈,一般要求最多之能10-20台节点。
  2. 只需要在LB上配置一个公网IP地址就可以了。
  3. 每台内部的节点服务器的网关地址必须是调度器LB的内网地址。
  4. NAT模式支持对IP地址和端口进行转换,即客户端对调度器发送的请求端口与最终转发到后端服务器的请求端口可以不一致。

2.2.2 DR模式

流程图:
在这里插入图片描述

工作流程:

  1. 当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP。
  2. PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT。
  3. IPVS比对数据包请求的服务是否为集群服务,若是,将请求报文中的源MAC地址修改为DIP的MAC地址,将目标MAC地址修改RIP的MAC地址,然后将数据包发至POSTROUTING链。 此时的源IP和目的IP均未修改,仅修改了源MAC地址为DIP的MAC地址,目标MAC地址为RIP的MAC地址
  4. 由于DS和RS在同一个网络中,所以是通过二层来传输。POSTROUTING链检查目标MAC地址为RIP的MAC地址,那么此时数据包将会发至Real Server。
  5. RS发现请求报文的MAC地址是自己的MAC地址,就接收此报文。处理完成之后,将响应报文通过lo接口传送给eth0网卡然后向外发出。 此时的源IP地址为VIP,目标IP为CIP。
  6. 响应报文最终送达至客户端。

特点:

  1. lvs-dr(direct routing):lvs的默认模式,gateway。
  2. lvs-dr模式通过修改请求报文的目标MAC地址进行转发。
  3. Director:调度器要配置VIP,DIP。
  4. RS:所有的Real Server都要配置RIP,VIP

优缺点:

  1. RS的RIP可以使用私有地址,也可以使用公网地址。
  2. RS跟Director必须在同一物理网络中,中间不能有路由器相隔。
  3. 请求报文经由Director调度,但响应报文一定不能经由Director。
  4. 不支持端口映射,客户端对调度器发送的请求端口与最终转发到后端服务器的请求端口必须一致。
  5. RS可以是大多数OS。
  6. RS的网关不能指向DIP
  • 保证前端路由器将目标IP为VIP的请求报文发送给调度器,解决方案有以下三种:
方案释义
静态绑定:在客户机上去绑定vip是指向dr。忽略不考虑
arptables:改变客户机忽略不考虑
修改RS主机内核的2个参数推荐适用

方案三的2个参数:

  • 参数一:arp_announce,是否接收并记录别人的通告(广播)以及是否通告自己的mac地址给别人。三个可选值,项目中使用2。

    • 0(default,默认值为0):通告自己所拥有的所有地址。
    • 1:尽量不通告与自己不在同一个网段的地址,比如不通告2.0网段的地址给1.0网段,不通告3.0网段的地址给1.0网段等,但是是尽量不通告,有可能还是会通告的。
      • 尽量避免不在该网络接口子网段的本地地址做出arp回应。
      • 当发起ARP请求的源IP地址是被设置应该经由路由达到此网络接口的时候很有用。
      • 此时会检查来访IP是否为所有接口上的子网段内ip之一.如果该来访IP不属于各个网络接口上的子网段内,那么将采用级别2的方式来进行处理。
    • 2:总是不通告与自己不在同一个网段的地址,比如不通告2.0网段的地址给1.0网段,不通告3.0网段的地址给1.0网段等,绝对不会通告。
      • 对查询目标使用最适当的本地地址.在此模式下将忽略这个IP数据包的源地址并尝试选择与能与该地址通信的本地地址。
      • 首要是选择所有的网络接口的子网中外出访问子网中包含该目标IP地址的本地地址。
      • 如果没有合适的地址被发现,将选择当前的发送网络接口或其他的有可能接受到该ARP回应的网络接口来进行发送。
  • 参数二:arp_ignore:是否响应arp请求。9个可选值,项目中使用1。

    • 0(default,默认值为0):回应任何网络接口上对任何本地IP地址的arp查询请求。
    • 1:请求报文从哪个接口进入的且请求的目标地址就是此接口配置的地址才予以响应,否则不响应只回答目标IP地址是来访网络接口本地地址的ARP查询请求。
    • 2:只回答目标IP地址是来访网络接口本地地址的ARP查询请求,且来访IP必须在该网络接口的子网段内。
    • 3:不回应该网络接口的arp请求,而只对设置的唯一和连接地址做出回应。
    • 4-7:保留未使用。
    • 8:不回应所有(本地地址)的arp查询。

2.2.3 LVS-TUN模式

流程图:
在这里插入图片描述
工作流程:

  1. 当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP 。
  2. PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链。
  3. IPVS比对数据包请求的服务是否为集群服务,若是,在请求报文的首部再次封装一层IP报文,封装源IP为DIP,目标IP为RIP,然后发至POSTROUTING链。 此时源IP为DIP,目标IP为RIP。
  4. POSTROUTING链根据最新封装的IP报文,将数据包发至RS(因为在外层封装多了一层IP首部,所以可以理解为此时通过隧道传输)。 此时源IP为DIP,目标IP为RIP。
  5. RS接收到报文后发现是自己的IP地址,就将报文接收下来,拆除掉最外层的IP后,会发现里面还有一层IP首部,而且目标是自己的lo接口VIP,那么此时RS开始处理此请求,处理完成之后,通过lo接口送给eth0网卡,然后向外传递。 此时的源IP地址为VIP,目标IP为CIP。
  6. 响应报文最终送达至客户端。

特点:

  • RIP,DIP,VIP必须是公网地址.
  • RS的网关不能指向DIP.
  • 请求报文必须经由dr调度,但响应报文必须不能经由dr调度器.
  • 不支持端口映射.
  • RS的OS必须支持隧道功能

2.2.4 LVS-FULLNAT模式

流程图:
在这里插入图片描述
特点:

  • RIP,DIP可以使用私有地址。
  • RIP和DIP可以不再同一个网络中,且RIP的网关未必需要指向DIP。
  • 支持端口映射。
  • RS的OS可以使用任意类型。
  • 请求报文经由Director,响应报文也经由Director

三、调度器算法

算法类型
静态算法:仅根据算法本身进行调度RR:轮调。
WRR:加权的rr,根据一定的比例进行轮调,比如每次RS1给2个请求,RS2给1个请求。
SH:源地址hash,将来自于同一个IP的请求始终调度至同一RS,每个服务单独调度。
DH:目标地址hash,将对同一个目标(资源)的请求始终发往同一个RS
动态算法:根据算法及各RS的当前负载状态进行调度,
根据指定的算法算出overhead(负载),
最终挑选出overhead值最小的则为被选中的RS。
LC:最少连接数,算法如下:overhead = Active * 256 + Inactive。
WLC:加权的LC,算法如下:overhead=(Active*256+Inactive)/ weight
SED:最短期望延迟,算法如下:overhead = (Active + 1) * 256 / weight
NQ:是SED算法的改进,根据SED算法每台主机第一次至少要均分配一次,然后再按SED算法来挑选。
LBLC:基于本地的最少连接数,即为动态的DH算法正向代理情形下的cache server调度。
LBLCR:带复制功能的LBLC算法
  • ipvs的集群服务:支持TCP,UDP,AH,EST,AH_EST,SCTP等诸多协议。
  • ipvs集群服务的特点:
    1. 一个ipvs主机可以同时定义多个cluster service。
    2. 定义时指明lvs-type(lvs的模式)以及lvs scheduler(调度器)。
    3. 一个cluster service上至少应该有两个real server

四、ipvsadm命令

常用参数
-A :添加
-E:修改
-t:tcp协议;-u:udp协议。
-f:防火墙的标记
-D:删除
-s scheduler:调度的算法,默认为wlc
-p [timeout]:定义持久连接,timeout不指定时默认为300秒

常见的service-address:

  1. tcp:-t ip:port
  2. udp:-u ip:port
  3. fwm:-f mark
//常用命令格式。
ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]] [-M netmask]
ipvsadm -D -t|u|f service-address

//管理集群服务中的RS命令。
ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight] [-x upper] [-y lower]
ipvsadm -d -t|u|f service-address -r server-address
ipvsadm -L|l [options]

//lvs-type参数。
-g:gateway,dr模式。
-i:ipip,tun模式。
-m:masquerade,nat模式。
-w:设定权重,可为0到正无穷数值,设为0时不会被调度,默认为1权重值越大则表示性能越好,被调度的资源也会更多

1.清空和查看。

//清空。
ipvsadm -C 

//查看.
ipvsadm -L|l [options] 
options可选项:
1. -n:numeric,基于数字格式显示地址和端口
2. -c:connection,显示当前ipvs连接
3. --stats:统计数据
4. --rate:输出速率信息
5. --exact:显示精确值,不做单位换算

2.保存和重载。

/重载。
ipvsadm -R 

//保存。
ipvsadm -S [-n] 

3.置零计数器。

ipvsadm -Z [-t|u|f service-address]

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

OJ练习第136题——在二叉树中分配硬币

在二叉树中分配硬币 力扣链接:979. 在二叉树中分配硬币 题目描述 给定一个有 N 个结点的二叉树的根结点 root,树中的每个结点上都对应有 node.val 枚硬币,并且总共有 N 枚硬币。 在一次移动中,我们可以选择两个相邻的结点&…

java导出pdf(纯代码实现)

java导出pdf 在项目开发中,产品的需求越来越奇葩啦,开始文件下载都是下载为excel的,做着做着需求竟然变了,要求能导出pdf。导出pdf倒也不是特别大的问题关键就是麻烦。 导出pdf我知道的一共有3中方法: 方法一&#xff…

Linux系统ubuntu22.04安装最新版的gcc13.1.0编译器,支持c++20、23

Linux系统ubuntu22.04安装最新版的gcc13.1.0编译器,支持c20、23 本文全程实操,上机验证通过。 首先查看gcc版本,以确保系统内有gcc,如果没有需要安装sudo apt install gcc 去GUN官网查看最新的gcc版本Index of /gnu/gcc 下载最…

若依添加router-view,使用详细(若依后台管理系统添加router-view)

简介:大家都知道若依后台管理系统,它是一款基于SpringBoot,Spring Security,JWT,Vue & Element 的开发的企业级后台管理系统,可以用于管理企业网站、电子商务平台、移动应用等各种应用系统,…

Shell第四章——函数

命令序列按照格式写在一起 核心:财富使用的命令序列 使用函数可以避免代码重复,函数可以将大的工程分割成若干小的功能模块,提高代码的可读性 第一种写法 第二种写法 return:表示退出函数并返回一个退出值,用…

Android init 进程启动相关分析

目录 1.概述: 2.架构 2.1 Init进程如何被启动? 2.2Init进程启动后,做了哪些事? 3.kernel启动init进程 源码分析 3.1 kernel_init 3.2 do_basic_setup 4. Init 进程启动源码分析 4.1 Init 进程入口 4.2 ueventd_main …

【mysql】—— 数据库的操作

序言: 在上篇文章我已经对数据库进行了详细的介绍,接下来我们就将上手学习操作的细节了。本篇文章便带领大家去学习有关库操作的基本知识!!! 目录 (一)库的操作 1、 创建数据库 2、字符集和…

创新涌动于先,PingCAP 用户峰会 2023 成功举办

2023 年 7 月 13 日,企业级开源分布式数据库厂商 PingCAP 在京成功举办 PingCAP 用户峰会 2023。本届峰会以“创新涌动于先”为主题,PingCAP 全面解析了 AI 时代 TiDB 的演进方向,宣布 TiDB Serverless 正式商用。会上,PingCAP 携…

功率信号源操作注意事项有哪些

功率信号源一种用来生成特定频率、幅度、相位和波形的电信号的设备,通常用于测试电子设备的性能。在使用功率信号源的过程中,需要注意一些安全性和操作规范。下面是一些有关功率信号源操作注意事项的详细介绍。 图:安泰ATG-2000系列功率信号源…

Python开源内容管理系统: Djangocms

一、Djangocms简介 Djangocms是基于Python语言开发的一款开源内容管理系统。它采用了Django框架,可以快速构建高效、灵活的网站。Djangocms拥有强大的可扩展性和易用性,支持多语言、多站点等功能。此外,Djangocms还提供了丰富的插件和主题&a…

JVM学习笔记(二)内存结构

目录 一、JVM内存结构 1. 虚拟机栈(JVM Stacks) 1)定义 2)栈内存溢出 3) 线程运行诊断 案例1:CPU占用过高 案例2:程序运行很长时间没有结果​编辑 2. 本地方法栈(Native Meth…

AlGaN基深紫外FP激光器仿真模型及材料信息数据库有何用途?

波长范围为UVC波段(100-280 nm)的深紫外FP(Fabry-Pero,法布里和珀罗是两位法国的科学家)激光器可广泛应用于数据通信、光通信、3D打印、材料加工、显示与照明、激光雷达、人脸/手势识别、医疗和表面监测等领域。FP激光…

Ubuntu 更改内核启动顺序

ubuntu服务器系统中用run包安装了某卡的驱动,后来又安装了docker,重启后,驱动失效。 经分析 安装docker时,又把新的linux内核安装上了。驱动是安装在旧内核上。 然会重新安装驱动,失败,确认是因为驱动只支…

最短路计数

题意:求1号点到每个点的最短路径的条数 分析:模板题,但要保证求的顺序是拓扑序,如果遇到的点的距离大于当前被更新点的距离就覆盖这个点之前的数据(比如如果先通过3-->2-->4,后来发现了另一条路3-->4&#x…

软件设计师(一)计算机系统知识

一、计算机系统基础知识 1、计算机系统硬件基本组成 基本硬件系统由运算器、控制器、存储器、输入设备和输出设备5大部件组成。 组成说明运算器、控制器集成在一起统称为中央处理单元(CPU)。CPU是硬件系统的核心,用于数据的加工处理存储器…

企业数字化的本质是什么?企业数字化建设应该怎么做?

近年前,无论哪个领域数字化都成为一种必选项,任何行业都可以用数字化的手段重新做一遍,但其本质含义就是基于一种数字化手段、数字化的工具再造企业,用新的数字化的思维手段来重新赋能业务。 企业数字化本质是技术与体系的联合&a…

IP-GUARD授权库勾选“不跟踪另存为”的效果

容灾时间过期如何申请延长? 有以下几种方式可以在已经超过容灾时间后,让客户端正常使用加密: 1、直接从控制台设置好容灾时间或者长期离线授权,右键客户端导出策略,然后从客户端c:\windows,调出policyimporttool.exe,导入策略即可。 2、直接在控制台设置好长期离线授权…

F#奇妙游(12):并行编程与π

核越多,越快乐 多核CPU对于计算机程序的开发带来了很大的挑战,但是也带来了很大的机遇。在多核CPU上,程序的性能可以通过并行化来提升,但是并行化的难度也随之提升。本文将介绍多核CPU的基本概念,以及如何在多核CPU上…

【分布式任务调度】XXL-JOB调度中心对执行器的上下线感知实现原理(三)

文章目录 1. 前言2. 调度关系3. 执行器注册3.1. 调度中心处理注册请求3.2. 执行器发起注册请求 4. 执行器注销4.1.主动注销4.2. 被动注销 5.流程图6. 总结 1. 前言 XXL-JOB专题历史文章列表: XXL-JOB调度中心集群部署配置(一)XXL-JOB执行器…

官宣!Databend Cloud 和青云科技达成合作

近日,北京数变科技有限公司与北京青云科技股份有限公司(以下简称:青云科技 )顺利完成了产品兼容性适配互认证。本次测试是对 Databend 云原生数据仓库系统与青云科技公司自主研发的 QingStor U10000 进行严格的联合测试验证。测试结果显示&am…