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

一文带你快速了解——LVS负载均衡集群

前言:

       Internet的飞速发展给网络带宽和服务器带来巨大的挑战。从网络技术的发展来看,网络带宽的增长远高于处理器速度和内存访问速度的增长。对用硬件和软件方法实现高可伸缩、高可用网络服务的需求不断增长。针对高可伸缩、高可用网络服务的需求,给出了基于IP层和基于内容请求分发的负载平衡调度解决方法,并在Linux内核中实现了这些方法,将一组服务器构成一个实现可伸缩的、高可用网络服务的虚拟服务器——LVS(Linux Virtual Server)。

一、LVS简介

1.1、什么是LVS

LVS(Linux Virtual Server),也就是Linux虚拟服务器。是由章文嵩博士主导的开源负载均衡项目,目前LVS已经被集成到Linux内核模块。LVS 是一个实现负载均衡集群的开源软件项目,LVS 架构从逻辑上可分为调度层、Server 集群层和共享存储。

通过LVS 达到的负载均衡技术和Linux操作系统可以实现一个高性能、高可用的服务器,它具有很好的可伸缩性(Scalability)、可靠性(Reliability)和可管理性(Manageability)。

LVS官网 - http://www.linuxvirtualserver...
Keepalived - http://www.keepalived.org/

1.2、LVS的优点

LVS(Linux Virtual Server)的优点包括:

1、应用范围广:因为LVS工作在4层,所以它几乎可以对所有应用做负载均衡,包括http、数据库、DNS、ftp服务等等。

2、性能高:纯 4 层负载均衡,运行在内核态,性能是软件负载均衡中最高的。

3、成本低:负载均衡有硬件和软件的,硬件相对应的设备需求会高些,成本相对高。而LVS是软件的,只需要一台服务器和就能免费部署使用,性价比极高。

4、支持多种算法:支持多种论调算法,可根据业务场景灵活调配进行使用。

5、支持多种工作模型:可根据业务场景,使用不同的工作模式来解决生产环境请求处理问题。

1.3、LVS相关术语

  • LB (Load Balancer 负载均衡)
  • HA (High Available 高可用)
  • Failover (失败切换)
  • Cluster (集群)
  • LVS (Linux Virtual Server Linux 虚拟服务器)
  • DS (Director Server),指的是前端负载均衡器节点
  • RS (Real Server),后端真实的工作服务器
  • VIP (Virtual IP),虚拟的IP地址,向外部直接面向用户请求,作为用户请求的目标的 IP 地址
  • DIP (Director IP),主要用于和内部主机通讯的 IP 地址
  • RIP (Real Server IP),后端服务器的 IP 地址
  • CIP (Client IP),访问客户端的 IP 地址

1.4、访问流程

CIP <--> VIP == DIP <--> RIP

1.5、LVS 的组成及作用

LVS 由两部分程序组成,包括 ipvs 和 ipvsadm。

1、ipvs(ip virtual server):LVS 是基于内核态的 netfilter 框架实现的 IPVS 功能,工作在内核态。用户配置 VIP 等相关信息并传递到 IPVS 就需要用到 ipvsadm 工具。

2、ipvsadm :是 LVS 用户态的配套工具,可以实现 VIP 和 RS 的增删改查功能,是基于 netlink 或 raw socket 方式与内核 LVS 进行通信的,如果 LVS 类比于 netfilter,那 ipvsadm 就是类似 iptables 工具的地位。

1.6、负载均衡集群

负载均衡群集:Load Balance Cluster,以提高应用系统的响应能力,尽可能处理更多的访问请求、减少延迟为目标,从而获得高并发、高负载的整体性能。

二、四种工作模式的解析

2.1、NAT模式(Network Address Translation

lvs-nat: 修改请求报文的目标IP,多目标IP的DNAT

  • 类似于防火墙的私有网络结构,负载调度器作为所有服务器节点的网关,作为客户机的访问入口,也是各节点回应客户机的访问出口,服务器节点使用私有 IP 地址,与负载调度器位于同一个物理网络,安全性要优于其他方式。
  • RIP和DIP应在同一个IP网络,且应使用私网地址;RS的网关要指向DIP
  • 请求报文和响应报文都必须经由Director转发,Director易于成为系统瓶颈
  • 支持端口映射,可修改请求报文的目标PORT
  • VS必须是Linux系统,RS可以是任意OS系统 

  • 客户请求到达vip后进入PREROUTING,在没有ipvs的时候因该进入本机INPUT,IPVS存在后访问请求在通PREROUTING后被ipvs结果并作nat转发
  • 因为ipvs的作用点是在PREROUTINGINPUT链之间,所以如果在prerouting中设定规则会干扰ipvs的工作。所以在做lvs时要把iptables的火墙策略全清理掉。

2.1、DR模式(Direct Routing

lvs-dr: 操纵封装新的MAC地址

  • 采用半开放式的网络结构,与 TUN 模式的结构类似,但各节点并不是分散在各个地方,而是与调度器位于同一个物理网络,负载调度器与各节点服务器通过本地网络连接,不需要建立专用的 IP 隧道。它是最常用的工作模式,因为它的功能性强大。
  • 直接路由,LVS默认模式,应用最广泛,通过为请求报文重新封装一个MAC首部进行转发,源MACDIP所在的接口的MAC,目标MAC是某挑选出的RSRIP所在接口的MAC地址
  • IP/PORT,以及目标IP/PORT均保持不变

  • 客户端发送数据帧给vs调度主机帧中内容为客户端IP+客户端的MAC+VIP+VIPMAC
  • VS调度主机接收到数据帧后把帧中的VIPMAC该为RS1MAC,此时帧中的数据为客户端IP+客户端MAC+VIP+RS1MAC
  • RS1得到2中的数据包做出响应回传数据包,数据包中的内容为VIP+RS1MAC+客户端IP+客户端IPMAC

2.3、TUN模式(IP Tunnel)

lvs-tun: 在原请求IP报文之外新加一个IP首部

  • 采用开放式的网络结构,负载调度器作为客户机的访问入口,各节点通过各自的 Internet 连接直接回应给客户机,而不经过负载调度器,服务器节点分散在互联网中的不同位置,有独立的公网 IP 地址,通过专用 IP 隧道与负载调度器相互通信。
  • 转发方式:不修改请求报文的IP首部(源IPCIP,目标IPVIP),而在原IP报文之外再封装一个IP首部 IPDIP,目标IPRIP),将报文发往挑选出的目标RS
  • RS直接响应给客户端(源IPVIP,目标IPCIP

  • 1.客户端发送请求数据包,包内有源IP+vip+dport
  • 到达vs调度器后对客户端发送过来的数据包重新封装添加IP报文头,新添加的IP报文头中包含 TUNSRCIP(DIP)+TUNDESTIP(RSIP1)并发送到RS1
  • RS收到VS调度器发送过来的数据包做出响应,生成的响应报文中包含SRCIP(VIP)+DSTIPCIP) +port,响应数据包通过网络直接回传给client

2.4、fullnet模式

lvs-fullnat: 

  • 通过同时修改请求报文的源 IP 地址和目标 IP 地址进行转发
    CIP --> DIP
    VIP --> RIP
  • VIP是公网地址, RIP DIP 是私网地址,且通常不在同一 IP 网络;因此, RIP 的网关一般不会指向 DIP
  • RS收到的请求报文源地址是 DIP ,因此,只需响应给 DIP ;但 Director 还要将其发往 Client
  • 请求和响应报文都经由Director
  • 支持端口映射

2.5、区别

模式与特点NAT 模式IPIP 模式DR 模式
对服务器的要求任何操作系统必须支持 IP 隧道,目前只有 Linux 系统支持服务器节点支持虚拟网卡设备,能够禁用设备的 ARP 响应
网络要求拥有私有 IP 地址的局域网络拥有合法 IP 地址的局域,网或广域网拥有合法 IP 地址的局域,服务器节点与负载均衡器必须在同一个网段
通常支持节点数量较少,10 到 20 个,根据负载均衡器的处理能力而定较高,可以支持 100 个服务节点较高,可以支持 100 个服务节点
RS 服务器网网关
指向到调度器 DIP
指向到路由
指向到路由
调度器和服务器网络
可跨网络
可跨网络
不可跨网络
服务节点安全性较好,采用内部 IP,服务节点隐蔽较差,采用公用 IP 地址,节点安全暴露较差,采用公用 IP 地址,节点安全暴露
特点地址转换封装 IP修改 MAC 地址
配置复杂度简单复杂复杂

三、LVS负载均衡调度算法

3.1、lvs静态调度算法

  • 静态方法:仅根据算法本身进行调度,不考虑 RS 的负载情况

1、RR:roundrobin(轮询)

RS分别被调度,当RS配置有差别时不推荐

2、WRR:Weighted RR(加权轮询)

根据RS的配置进行加权调度,性能差的RS被调度的次数少

3、SH:Source Hashing(源地址散列调度算法 
实现 session sticky ,源 IP 地址 hash ;将来自于同一个 IP 地址的请求始终发往第一次挑中的RS ,从而实现会话绑定
4、DH :Destination Hashing( 目标地址散列调度算法 
目标地址哈希,第一次轮询调度至 RS ,后续将发往同一个目标地址的请求始终转发至第一次挑中的RS ,典型使用场景是正向代理缓存场景中的负载均衡,如:宽带运营商

3.2、lvs动态调度算法

  • 动态方法:主要根据每RS当前的负载状态及调度算法进行调度Overhead=value较小的RS将被调度
1 LC:least connections(最少链接)
适用于长连接应用Overhead(负载值)=activeconns (活动链接数) x 256+inactiveconns (非活动链接数)
2、WLC:Weighted LC(权重最少链接)
默认调度方法Overhead=(activeconns x 256+inactiveconns)/weight
3、SED:Shortest Expection Delay(初始连接高权重优先)
Overhead=(activeconns+1+inactiveconns) x 256/weight
但是,当node1 的权重为 1 node2 的权重为 10 ,经过运算前几次的调度都会被 node2 承接
4、NQ:Never Queue(永不排队
第一轮均匀分配,后续SED
5、LBLC:Locality-Based LC(基于局部性的最少连接调度算法
动态的DH 算法,使用场景:根据负载状态实现正向代理
6、LBLCR:LBLC with Replication
带复制功能的LBLC ,解决 LBLC 负载不均衡问题,从负载重的复制到负载轻的RS

3.3、在4.15版本内核以后新增调度算法

1、FO(Weighted Fai Over)调度算法:(常用作灰度发布)

在此 FO 算法中,遍历虚拟服务所关联的真实服务器链表,找到还未过载 ( 未设置 IP_VS_DEST_F
OVERLOAD 标志 ) 的且权重最高的真实服务器,进行调度
当服务器承接大量链接,我们可以对此服务器进行过载标记( IP_VS_DEST_F OVERLOAD ),那么 vs 调度 器就不会把链接调度到有过载标记的主机中。
2、OVF(Overflow-connection)调度算法
基于真实服务器的活动连接数量和权重值实现。将新连接调度到权重值最高的真实服务器,直到其活动连接数量超过权重值,之后调度到下一个权重值最高的真实服务器, 在此 OVF 算法中,遍历虚拟服务相关联的真实服务器链表,找到权重值最高的可用真实服务器。

四、实验

4.1、NAT模式实验

 

 先配上IP,再更改/etc/NetworkManage/system-connections/eth0-nmconnection(自己网卡名)中的网关

CLient的网关:172.25.254.100(LVS的v),RS1/2的网关:192.168.0.100(LVS的dip),lvs的网关不变。

nmcli connection reload
nmcli connection up eth0(自己的网卡)

RS1:

dnf install apache -y
echo websever - 192.168.0.10 > /var/www/html/index.html
systemctl enable --now httpd

RS2:

dnf install apache -y
echo websever - 192.168.0.20 > /var/www/html/index.html
systemctl enable --now httpd

LVS:
打开路由内核功能 

vim /etc/sysctl.conf

刷新

sysctl -p

检测:
curl 192.168.0.10
curl 192.168.0.20
lvs中安装lvs软件
dnf install ipvsadm -y

客户访问时开始调度
ipvsadm -A -t 172.25.254.100:80 -s rr
ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.10:80 -m
ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.20:80 -m
ipvsadm -Ln

 ipvsadm -E -t 172.25.254.100:80 -s wrr

ipvsadm -e -t 172.25.254.100:80 -r 192.168.0.10 -m -w 2

 

4.2、DR模式实验

CLient,LVS,RS1,RS2的虚拟机设置和上面一样。

先配上IP,再更改/etc/NetworkManage/system-connections/eth0-nmconnection(自己网卡名)中的网关,上图中有。

nmcli connection reload
nmcli connection up eth0(自己的网卡)

给LVS,RS1,RS2配上临时环回IP:192.168.0.200/32

ip a a 192.168.0.200/32 dev lo

 

  

 

router:

vim /etc/sysctl.conf
net.ipv4.ip_forward=1

 

RS1/2:

RS主机中使ARP不对外响应
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
调网关为192.168.0.100
sysctl -a | grep arp_ignore

 

LVS:

ipvsadm -A -t 192.168.0.200:80 -s wrr
ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.10:80 -g -w 2
ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.20:80 -g -w 1 

测试:

Client访问:
for i in {1..10}
do
curl 192.168.0.200
done

 

4.3、防火墙标签解决轮训错误

接着上面DR模拟实验做

RS1/2:
安装mod_ssl模块,让RS支持http
yum install mod_ssl -y
让可以使用https
systemctl restart httpd

LVS主机中为端口做标记:
iptables -t mangle -A PREROUTING -d 192.168.0.200 -p tcp -m multiport --dports 80,443 -j MARK --set-mark 66
查看
iptables -t mangle -nL
ipvsadm -A -f 66 -s wrr  [-p(默认360)]
ipvsadm -a -f 66 -r 192.168.0.10 -g
ipvsadm -a -f 66 -r 192.168.0.20 -g
ipvsadm -Ln 

 

 

Client: 

curl 192.168.0.200;curl -k https://192.168.0.200

 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • [Unity]在场景中随机生成不同位置且不重叠的物体
  • C#-了解ORM框架SqlSugar并巧妙使用(附相关数据库工具)
  • 数据结构——排序(2):选择排序+交换排序
  • 算法力扣刷题记录 六十九【动态规划基础及509. 斐波那契数】
  • 鸿蒙AI功能开发【文档扫描控件】 场景识别服务
  • 【c++学习技术栈】
  • 如何利用现成的网络抓取工具提高效率和生产力
  • [kimi笔记]为什么csc.exe不可以双击运行
  • Java面试题(基础篇)②
  • 攻击者劫持 Facebook 页面用于推广恶意 AI 照片编辑器
  • 将nestjs项目迁移到阿里云函数
  • 【开端】通过Java 过滤器灵活配置URL访问权限,并返回403
  • 浅谈基础的图算法——Tarjan求强联通分量算法(c++)
  • 本地Linux服务器创建我的世界MC私服并实现与好友异地远程联机游戏
  • java学习笔记 VSCode
  • 「前端早读君006」移动开发必备:那些玩转H5的小技巧
  • android 一些 utils
  • CSS 专业技巧
  • ES6核心特性
  • extjs4学习之配置
  • java B2B2C 源码多租户电子商城系统-Kafka基本使用介绍
  • JavaScript的使用你知道几种?(上)
  • tensorflow学习笔记3——MNIST应用篇
  • 包装类对象
  • 初探 Vue 生命周期和钩子函数
  • 分布式任务队列Celery
  • 回流、重绘及其优化
  • 聚类分析——Kmeans
  • 前嗅ForeSpider中数据浏览界面介绍
  • 树莓派用上kodexplorer也能玩成私有网盘
  • 小白应该如何快速入门阿里云服务器,新手使用ECS的方法 ...
  • ​ 轻量应用服务器:亚马逊云科技打造全球领先的云计算解决方案
  • ![CDATA[ ]] 是什么东东
  • #### go map 底层结构 ####
  • #经典论文 异质山坡的物理模型 2 有效导水率
  • #我与虚拟机的故事#连载20:周志明虚拟机第 3 版:到底值不值得买?
  • #中的引用型是什么意识_Java中四种引用有什么区别以及应用场景
  • (02)Unity使用在线AI大模型(调用Python)
  • (pt可视化)利用torch的make_grid进行张量可视化
  • (Redis使用系列) Springboot 在redis中使用BloomFilter布隆过滤器机制 六
  • (读书笔记)Javascript高级程序设计---ECMAScript基础
  • (七)理解angular中的module和injector,即依赖注入
  • (十)T检验-第一部分
  • (万字长文)Spring的核心知识尽揽其中
  • (一)认识微服务
  • (转载)从 Java 代码到 Java 堆
  • .helper勒索病毒的最新威胁:如何恢复您的数据?
  • .NET C# 配置 Options
  • .net core 依赖注入的基本用发
  • .NET delegate 委托 、 Event 事件
  • .Net Remoting常用部署结构
  • .NET 应用架构指导 V2 学习笔记(一) 软件架构的关键原则
  • .Net中的集合
  • /etc/apt/sources.list 和 /etc/apt/sources.list.d
  • /usr/lib/mysql/plugin权限_给数据库增加密码策略遇到的权限问题