集群基础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]

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

每日科技分享-POE新增文件和链接发送功能

POE推出新功能 注意POE需要魔法上午才能进去。 实测 实测可以发送论文给chatgpt,然后和AI进行共享的对话。 POE网站链接: 也可以发送链接,实测了一下,似乎有时候并不准确,我发送了关于分层强化的文章,但是…

05 Docker 安装常用软件 (mongoDB)

目录 1. mongoDB简介 1.1 mongodb的优势 2. mongodb的安装 2.1 创建数据文件夹 2.2 备份日志 2.3 配置文件夹 2.4 创建两个文件 ---> 2.4.1 配置如下: 2.5 拉取mongodb 2.6 运行容器 2.7 进入mongodb容器 ---> 2.7.0 高版本(6.0)以上是这样的 , 旧版的没研究 …

SpringBoot 集成 Mybatis

SpringBoot 集成 Mybatis 详细教程 (只有操作,没有理论,仅供参考学习) 一、操作部分 1. 准备数据库 1.1 数据库版本: C:\WINDOWS\system32>mysql -V mysql Ver 8.0.25 for Win64 on x86_64 (MySQL Community …

PyTorch深度学习实战(5)——计算机视觉

PyTorch深度学习实战(5)——计算机视觉 0. 前言1. 图像表示2. 将图像转换为结构化数组2.1 灰度图像表示2.2 彩色图像表示 3 利用神经网络进行图像分析的优势小结系列链接 0. 前言 计算机视觉是指通过计算机系统对图像和视频进行处理和分析,利…

笔记本电脑清灰换硅脂

文章目录 一、完整过程0.准备工具1.拆笔记本后盖2.洗手擦干断电3.清理部件浮尘4.拆风扇5.拆散热模具6.换硅脂7.装回去 二、图片 一、完整过程 0.准备工具 拆机螺丝刀、硅脂、撬片/撬棒、毛刷、气吹、卫生纸。 正常电脑是十字螺丝,推荐刀头使用 PH00 或 PH0。 1.拆…

基于单片机的智能太阳能手机充电器的设计与实现

功能介绍 以STM32/51单片机作为主控系统;LCD1602液晶显示当前电压值;太阳能电池板采集当前光照转换为电能,然后TP4056锂电池充放电模块给锂电池进行充电,充完后自动断电,防过充;通过CE8301模块对锂电池电压…

1-4 架构师所需要具备的技术栈与能力

架构师所需要具备的技术栈与能力 全局图解 全局图解

CSS整段文字缩进(一段多行文字中首列位置相对应)

<style>p {text-align: justify;padding-left: 2em;} </style>

学习系统编程No.28【多线程概念实战】

引言&#xff1a; 北京时间&#xff1a;2023/6/29/15:33&#xff0c;刚刚更新完博客&#xff0c;目前没什么状态&#xff0c;不好趁热打铁&#xff0c;需要去睡一会会&#xff0c;昨天睡的有点迟&#xff0c;然后忘记把7点到8点30之间的4个闹钟关掉了&#xff0c;恶心了我自己…

基于单片机智能饮水机加热系统的设计与实现

功能介绍 以51单片机作为主控系统&#xff1b;LCD1602液晶显示当前水温&#xff0c;定时提醒&#xff0c;水量变化DS18B20检测当前水体温度&#xff1b;水位传感器检测当前水位&#xff1b;继电器驱动加热片进行水温加热&#xff1b;定时提醒喝水&#xff0c;蜂鸣器报警&#x…

Java-通过IP获取真实地址

文章目录 前言功能实现测试 前言 最近写了一个日志系统&#xff0c;需要通过访问的 IP 地址来获取真实的地址&#xff0c;并且存到数据库中&#xff0c;我也是在网上看了一些文章&#xff0c;遂即整理了一下供大家参考。 功能实现 这个是获取正确 IP 地址的方法&#xff0c;可…

【css】用css样式快速写右上角badge徽标,颜色设置为渐变色

先看效果展示&#xff0c;已公开显示在图片卡片的右上角。 首先是dom代码&#xff1a;需要两个view或者div&#xff0c;public-badge是“已公开”那个矩形&#xff0c;show-signal是右边那个下三角&#xff0c;也就是阴影部分&#xff0c;这样看起来比较有立体感。 <view…

LabVIEW-实现波形发生器

一、题目 用两种方法实现一种多类型信号波形发生器&#xff08;至少包括&#xff1a;正弦波、三角波、方波等&#xff09;&#xff0c;可以调节信号频率、幅度、相位等参数&#xff0c;可以图形化显示信号波形。 需要给出产生信号波形的基本方法、程序设计基本方法以及程序实现…

云计算的学习(二)

二、计算虚拟化 1.计算虚拟化的介绍 1.1虚拟化简介 a.什么是虚拟化 将物理设备逻辑化&#xff0c;转化成文件或者文件夹&#xff0c;这个文件或文件夹一定包含两个部分&#xff1a;一部分用于记录设备配置信息&#xff0c;另一部分记录用户数据。 虚拟机摆脱了服务器的禁锢…

性能测试工具 Jmeter 测试 JMS (Java Message Service)/ActiveMQ 性能

目录 前言 ActiveMQ 介绍 准备工作 编写jndi.properties添加到ApacheJMeter.jar 中 下载 ActiveMQ 配置 Jmeter 进行测试 点对点 (Queues 队列) 配置 Jmeter 进行测试 发布/订阅 (Topic 队列) 配置发布 Publisher 配置订阅 Subscriber 总结 前言 JMeter是一个功能强大…

全方位对比 Postgres 和 MySQL (2023 版)

根据 2023 年 Stack Overflow 调研&#xff0c;Postgres 已经取代 MySQL 成为最受敬仰和渴望的数据库。 随着 Postgres 的发展势头愈发强劲&#xff0c;在 Postgres 和 MySQL 之间做选择变得更难了。 如果看安装数量&#xff0c;MySQL 可能仍是全球最大的开源数据库。 Postgre…

Windows环境下安装Nacos

文章目录 一、什么是Nacos1. 主要特点&#xff1a;1.1 服务发现和注册&#xff1a;1.2 配置管理&#xff1a;1.3 服务管理&#xff1a;1.4 多语言支持&#xff1a;1.5 高可用性和扩展性&#xff1a; 二、Windows下安装单机版Nacos1. 安装包下载&#xff1a;2. 目录文件说明&…

冒泡排序模拟实现qsort()函数

冒泡排序模拟实现qsort函数 前言1. 分析2. 解决一&#xff0c;如何接受不同数据3. 解决二&#xff0c;如何实现不同数据的比较4. 解决三&#xff0c;如何实现不同数据交换5. 模拟bubble_sort&#xff08;&#xff09;函数排序整型所有代码实现6. 结构体排序实现7. 结尾 前言 要…

Android Studio无法打开问题解决记录

目录 1 问题起因2 发现问题3 解决问题 1 问题起因 问题的起因是我为了运行一个Kotlin项目&#xff0c;但是报了一个错误&#xff1a; Kotlin报错The binary version of its metadata is 1.5.1, expected version is 1.1.16 然后我就上百度去搜了以下&#xff0c;一篇博客让禁用…

http-server 的安装与使用

文章目录 问题背景http-server简介安装nodejs安装http-server开启http服务http-server参数 问题背景 打开一个文档默认使用file协议打开&#xff0c;不能发送ajax请求&#xff0c;只能使用http协议才能请求资源&#xff0c;所以此时我们需要在本地建立一个http服务&#xff0c…