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

文章目录

  • 一、基本了解
  • 二、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.mzph.cn/news/4905.shtml

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

相关文章

2023年7月北京/广州/深圳制造业产品经理NPDP认证招生

产品经理国际资格认证NPDP是新产品开发方面的认证,集理论、方法与实践为一体的全方位的知识体系,为公司组织层级进行规划、决策、执行提供良好的方法体系支撑。 【认证机构】 产品开发与管理协会(PDMA)成立于1979年,是…

C# 移除链表元素

203 移除链表元素 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val val 的节点,并返回 新的头节点 。 示例 1: 输入:head [1,2,6,3,4,5,6], val 6 输出:[1,2,3,4,5] 示例 2&#x…

2023-07-14:讲一讲Kafka与RocketMQ中存储设计的异同?

2023-07-14:讲一讲Kafka与RocketMQ中存储设计的异同? 答案2023-07-14: 在Kafka中,文件的布局采用了Topic/Partition的方式,每个分区对应一个物理文件夹,且在分区文件级别上实现了顺序写入。然而&#xff0…

WIN无法访问linux开启的SAMBA服务器

WIN无法访问linux开启的SAMBA服务器 打开搜索框“管理Windows凭据” 点击编辑

Camtasia Studio 2023保存为mp4格式的视频的详细教程,Camtasia的视频导出功能

很多用户刚接触Camtasia Studio,不熟悉如何保存mp4格式的视频。在今天的文章中小编为大家带来了Camtasia Studio 2023保存为mp4格式的视频的详细教程介绍。 1、 打开Camtasia Studio。 Camtasia Studio- 2023 win: https://souurl.cn/1JFEsn Camtasia …

06_本地方法接口+07_本地方法栈

一、本地方法? 本地方法就是Java调用非Java代码的接口。 本地方法的作用是融合不同的编程语言为Java所用,它的初衷是融合 C、C程序 二、为什么要使用Native Method? 三、本地方法栈 Java虚拟机栈用于管理Java方法的调用,而本地方法栈用于…

【Linux】Docker 基本管理

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 Docker 基本管理 Docker 概述Docker 核心概念Docker 安装部署Docker 镜像操作Docker 容器操作 Docker 概述 Docker是一个开源的应用容器引擎,基于go语言开发并遵…

spring复习:(40)全注解的spring AOP

零、需要的依赖&#xff1a; <dependency><groupId>org.aspectj</groupId><artifactId>aspectjrt</artifactId><version>1.8.9</version></dependency><dependency><groupId>org.aspectj</groupId><arti…

AHB协议理解

从小父亲就教育我&#xff0c;做一个对社会有用的人&#xff01; 目录 Chapter1 AHB Block Diagram Ginput signal lnput signals Output Signal Chapter3 Transfers AHB接口Overview Chapter6 Data Buses HWDATA HRDATA Chapter1 Introduction AHB: Advanced High-performanc…

奇迹MU架设教程:SQL Server 2008数据库的安装教程

不管是搭建什么游戏&#xff0c;都是有数据库的&#xff0c;奇迹MU用的是SQL 数据库&#xff0c;根据服务器系统选择SQL server版本&#xff0c;我比较喜欢用Windows server 2008R2系统&#xff0c;所以我安装的是SQL server 2008。作为架设奇迹很重要的数据库程序&#xff0c;…

【Ubuntu】安装docker-compose

要在Ubuntu上安装Docker Compose&#xff0c;可以按照以下步骤进行操作&#xff1a; 下载 Docker Compose 二进制文件&#xff1a; sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/loc…

ThreeJS打造自己的人物

hello&#xff0c;大家好&#xff0c;我是better&#xff0c;今天为大家分享如何使用Three打造属于自己的3D人物模型。 人物建模 当下有很多人物建模的网站&#xff0c;这里给大家分享的 Ready Player Me - Create a Full-Body 3D Avatar From a Photo 前往这个网址&#xff…

C#List转IList方法

最近工作中使用到了C#的List和IList。 这里参考百度上的资料&#xff0c;总结一下。 IList使用命名空间&#xff1a; using System.Collections; List<T>类:表示可通过索引访问的对象的强类型列表&#xff0c;提供用于对列表进行搜索、排序和操作的方法。 IList<T&…

​​Layui之用户管理实例(对数据的增删改查)

目录 ​编辑一、R工具介绍&#xff08;&#xff09; ​编辑二、数据表的增删改查 ​编辑2.1我们先得从查询数据库的语句入手 2.2优化dao类 2.4UserAction类 2.5前台的页面实现增删改查操作 2.6 userManage页面JS 2.7user新增、修改iframe层js 前言 上一篇我分享了…

试玩python的web框架 flask、fastapi、tornado、django

文章目录 一、Flask入门案例 [官网](https://flask.net.cn/quickstart.html) [其它参考](https://zhuanlan.zhihu.com/p/104273184?utm_id0)二、FastAPI入门案例 [官网](https://fastapi.tiangolo.com/zh/) [w3cschool教程](https://www.w3cschool.cn/fastapi/fastapi-feature…

[RocketMQ] Broker CommitLogDispatcher 异步构建ConsumeQueue和IndexFile源码解析 (十四)

CommitLogDispatcherBuildConsumeQueue: 异步构建ConsumerQueue。CommitLogDispatcherBuildIndex: 异步构建IndexFile。 文章目录 1.CommitLogDispatcherBuildConsumeQueue构建ConsumeQueue1.1 putMessagePositionInfo写入消息位置信息1.2 findConsumeQueue查找ConsumeQueue1.2…

go初识iris框架(二) - get,post请求和数据格式

继初步了解iris后 文章目录 获取url路径获取数据get请求post请求获取JSON数据格式JSON返回值获取XML数据格式XML返回值 获取url路径 package mainimport "github.com/kataras/iris/v12"func main(){app : iris.New()app.Get("/hello",func(ctx iris.Conte…

Redis报错-CROSSSLOT keys in request don‘t hash in the same slot

背景 问题涉及&#xff1a;spring security、spring session、redis 问题描述 springbootspringsecurityspringsessionantd 登录功能的时候&#xff0c;在源码中使用到了redis的rename命令&#xff08;如下图所示&#xff09; 在这里就会报错 CROSSSLOT keys in request d…

基于小波哈尔法(WHM)的一维非线性IVP测试问题的求解(Matlab代码实现)

&#x1f4a5;1 概述 小波哈尔法&#xff08;WHM&#xff09;是一种求解一维非线性初值问题&#xff08;IVP&#xff09;的数值方法。它基于小波分析的思想&#xff0c;通过将原始问题转化为小波空间中的线性问题&#xff0c;然后进行求解。以下是一维非线性IVP测试问题的求解…

守护数智未来,开源网安受邀参加2023OWASP北京论坛

2023年7月14日&#xff0c;OWASP中国与网安加社区联合举办的“2023OWASP中国北京安全技术论坛”在北京圆满召开&#xff0c;开源网安受邀参加本次论坛并分享“软件供应链安全治理实践”。 本次“2023OWASP中国北京安全技术论坛”是OWASP中国北京地区年度重要活动之一&#xff…