LVS专题: LVS的工作模型和调度算法介绍

LVS专题: LVS的工作模型和调度算法介绍

    • 前言
    • 什么是负载均衡?
    • 什么是LVS?
    • LVS的架构:
    • LVS的实现模型:
      • NAT实现原理:
      • DR实现原理:
      • TUN实现原理:
      • FULLNAT实现原理:
    • LVS的调度算法
      • 静态调度算法(4种)
      • 动态调度算法(6种):
    • 总结

前言

本文大概介绍一下LVS的工作方式和实现的模型以及调度算法,流程图方面只上了两张图, 如果有需要LVS各工作模式的流程图请看张小凡:LVS原理详解

什么是负载均衡?

当单台服务器性能不足时我们有两种对其进行扩展的方式, 分别是向上扩展向外扩展 
向上扩展:

向上扩展意思是提升服务器的硬件性能来应对性能不足的问题

向外扩展:

向外扩展意思是新增服务器和现有服务器组成集群来应对性能不足的问题

在这两种解决方案中, 我们一般情况下都选择向外扩展,

因为向上扩展所付出的代价和得到性能的提升不成正比, 大多时候提升服务器一倍的性能需要花费三倍的价格

向外扩展也有很多问题, 例如:如何协调两台服务器提供一服务, 用户在两台服务器进行轮调时如何保存其的session信息….

我们可以将向外扩展数台服务器组成一个负载均衡集群, 前端通过负载均衡调度器来对用户请求通过调度算法合理分发到后端服务器中, 来达到负载均衡的目的.

负载均衡有软件和硬件的实现方式    硬件:F5 BIG IP, NetScaler    软件:         四层: LVS        七层: HAproxy, Nginx, Varnish....

什么是LVS?

LVS(Linux Virtual Server)是目前阿里巴巴首席科学家章文嵩博士在大学期间的一款开源的负载均衡软件, 可实现四层的负载均衡。

为了更好地理解LVS, 我们解释一下相应的术语:    Director: 负载均衡调度器, 负责在前端接受用户请求根据特定的算法转发到后端Real Server    Real Server: 后端提供服务的服务器    VIP: Director接受用户请求的IP地址    DIP: Director和Real Server联系的IP地址    RIP: Real Server的IP地址    CIP: Client IP, 客户端的IP地址

LVS的架构:

LVS其实由两个组件组成, 在用户空间的ipvsadm和内核空间的ipvs, ipvs工作在INPUT链上, 如果有请求报文被ipvs事先定义,就会将请求报文直接截取下根据其特定的模型修改请求报文, 再转发到POSTROUTING链上送出TCP/IP协议栈

其实ipvs提供了一个API, 即使我们不使用ipvsadm这个命令行工具, 也可以使用其他工具对其规则进行定义.

LVS的实现模型:

LVS为了在不同场景中使用而提供了4种实现模型: 分别为NAT, DR, TUN, FULLNAT. 我们分别对其进行介绍:

NAT实现原理:

NAT模型其实就是一个多路的DNAT, 客户端对VIP进行请求, Director通过事先指定好的调度算法计算出应该转发到哪台RS上, 并修改请求报文的目标地址为RIP,通过DIP送往RS. 当RS响应客户端报文给CIP, 经过Director时, Director又会修改源地址为VIP并将响应报文发给客户端. 这段过程对于用户来说是透明的.

NAT模型工作流程

1、客户端请求VIP 
2、Director接受到请求, 根据调度算法得出该转发的RS, 将请求报文的目标IP地址修改成对应RS的IP地址并转发 
3、RS接收并响应请求给CIP, 经过Director时, 源地址被修改成VIP地址

实现NAT模型有几点需要注意的:        1、RS和Director必须要在同一个IP网段中        2、RS的网关必须指向DIP        3、可以实现端口映射        4、请求报文和响应报文都会经过Director        5、RS可以是任意操作系统        6、DIP和RIP只能是内网IP

DR实现原理:

DR模型是一个较为复杂的模型. DR模型比较诡异, 因为VIP在Director和每一个RS上都存在, 客户端对VIP(Director)请求时, Director接收到请求, 会将请求报文的源MAC地址和目标MAC地址修改为本机DIP所在网卡的MAC地址和指定的RS的RIP所在网卡的MAC地址, RS接收到请求报文后直接对CIP发出响应报文, 而不需要通过Director

DR模型工作流程

1、客户端请求VIP 
2、Director接收到请求报文, 修改请求报文的源MAC地址和目标MAC地址, 使用DIP所在网卡发送给调度算法得出的RIP 
3、RIP接收到DIP发过来的报文后, 发现本机的确有VIP, 遂响应报文给CIP

可能很多朋友还听不明白, 所以我们提供了LVS-DR WORK_FLOW便于大家理解

实现DR模型有一个最为关键的问题, 大家都知道Linux主机配置一个IP地址会向本网络进行广播来通告其他主机或网络设备IP地址对应的MAC地址, 那么VIP分别存在于Director和RS, IP不就冲突了么, 我们该如何解决这个问题?

事实上LVS并不能帮助我们解决这个麻烦的问题:    我们有很多种方法可以解决上面的问题:        1、网络设备中设置VIP地址和DIrector的MAC地址进行绑定        2、Linux系统中有一个软件可以实现对ARP广播进行过滤, arptables        3、可以修改内核参数来实现, arp_ignore, arp_announce

实现DR模型需要注意的:    1、RS和Director可以不在同一IP网段中, 但是一定要在同一物理网络中    2、请求报文必须经过Director, 但是响应报文一定不能通过Director    3、RS的网关不能是Director    4、不能实现端口映射    5、RS可以是大部分操作系统    6、DIP和RIP可以是公网地址

TUN实现原理:

TUN模型通过隧道的方式在公网中实现请求报文的转发, 客户端请求VIP(Director), Director不修改请求报文的源IP和目标IP, 而是在IP首部前附加DIP和对应RIP的地址并转发到RIP上, RS收到请求报文, 本地的接口上也有VIP, 遂直接响应报文给CIP

TUN的工作流程

1、客户端请求VIP 
2、Director接收到请求, 通过调度算法得出转发的RS,将请求报文的IP首部外附加DIP和对应RS的IP地址,发给对应RS 
3、RS接收到请求, 发现本机的确有VIP地址, 遂响应报文给CIP 
实现TUN模型需要注意的: 
1、RIP,DIP,VIP都是公网地址 
2、RS的网关不能指向DIP 
3、请求报文必须通过Director, 响应报文一定不能经过Director 
4、不支持端口映射 
5、RS的操作系统必须支持隧道功能

FULLNAT实现原理:

FULLNAT是近几年才出现的, 客户端请求VIP(Director), Director修改请求报文的源地址(DIP)和目标地址(RIP)并转发给RS, FULLNAT模型一般是Director和RS处在复杂的内网环境中的实现

FULLNAT工作流程

1、客户端请求VIP 
2、Director接受到请求, 通过调度算法得出转发的RS, 将源地址修改为DIP, 目标地址修改为对应RIP, 转发给RS 
3、RS接受到请求后, 响应请求给DIP, DIP将响应报文源地址改为VIP, 目标地址改为CIP, 响应给CIP

实现FULLNAT模型需要注意的:    1、VIP是公网地址, DIP和RIP是内网地址, 但是无需在同一网络中    2、请求报文需要经过Director, 响应报文也要通过Director    3、RIP接收到的请求报文的源地址为DIP,目标地址为RIP    4、支持端口映射    5、RS可以是任意的操作系统

LVS的调度算法

lvs主要功能将用户请求转发到后端的服务器, 但是Director根据什么来转发到哪个RS上呢?事实上LVS支持10种调度算法计算该将用户请求调度到哪一台RS上.

调度算法分为两种: 静态和动态

静态调度算法: 根据算法本身进行调度, 不考虑RS的状态 
动态调度算法: 根据算法和RS的实时负载进行调度

静态调度算法(4种)

RR:Round Robin, 轮询 将用户请求轮询到各个RS上 
WRR: Weighted Round Robin, 加权轮轮询, 根据每一台RS的权重将用户请求轮询分发到各个RS上 
SH: Source Hash, 源地址哈希, 将同一客户端的请求转发到同一个RS上 
DH: Destination Hash, 将同一类型的请求转发到同一个RS上

动态调度算法(6种):

LC:least connections, 最小连接. 公式: Active*256+Inactive 
WLC:Weighted Least Connections, 加权最小连接. 公式: (Active*256+Inactive)/Weighted 
SED:Shortest Expection Delay, 最短延迟预期. 公式: (Active+1)*256/Weighted 
NQ:Never Queue, 永不排队, 对sed算法的改进 
LBLC:Locality-Based Least-Connections, 基于局部的最少链接, 即为动态的dh算法 
LBLCR:locality-based least-connections replication, 带复制功能的lblc

总结

本文算是LVS专题中的第一部分, 稍后还会写LVS各工作模型的实现, 过段时间会写使用Keepalive实现Director高可用等的实现, 敬请期待! 
作者: AnyISalIn QQ:1449472454 
感谢: MageEdu

时间: 2024-12-18 08:36:07

LVS专题: LVS的工作模型和调度算法介绍的相关文章

lvs的工作模型及调度算法

lvs:linux virtual server  基于端口的高并发负载均衡器 工作与tcp层,软件实现方式 工作原理:当数据包经过prerouting进入input链,如果请求的是定义为集群服务的服务时,lvs通过强行改变数据包的走向至postrouting链完成向后端转发,回包经由prerouting->forward->postrouting回送给客户端 对于负载均衡集群,重要的关注点: 1.实现调度的工作原理 2.调度算法 3.后端健康状态监测 lvs优缺点: 优点:由于工作在内核空间

LVS专题: LVS+Keepalived并使用DNS轮询实现Director的高可用和负载均衡

LVS专题: LVS+Keepalived并使用DNS轮询实现Director的高可用和负载均衡 前言 LVS专题写到第三篇了, 前两篇我们对LVS的基础使用也有了一些了解, 这篇我们将做一个比较复杂的实验, 话不多说, 开始吧! 什么是KeepAlived What is Keepalived ? Keepalived is a routing software written in C. The main goal of this project is to provide simple a

LVS专题: NAT和DR模型实现Web负载均衡

前言: 在上篇文章中我们讲了一些LVS的基本概念和相应模型的实验原理和流程,本篇文章我们主要使用lvs为web服务提供负载均衡 NAT实现 实验拓扑 实验环境 主机 IP地址 功用 Director.anyisalin.com 172.16.1.2,172.16.2.2 LVS-Director rs1.anyisalin.com 172.16.2.3 Real Server rs2.anyisalin.com 172.16.2.3 Real Server 注意: 本文实验中所有主机SElinu

(转)详解LVS负载均衡之三种工作模型原理和10种调度算法

前言:最近在为我们的产品在做高可用,一边搭环境,一边了解相关知识,搜到这篇博客,质量不错,表述清晰,于是转载过来学习. 标签:详解LVS负载均衡之三种工作模型原理和10种调度算法 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://linuxnx.blog.51cto.com/6676498/1195379 LVS负载均衡原理和算法详解    Internet的快速增长使多媒体网络服务器面对的访问数量快速增加,服务器需要具备提供大

LVS工作模式与调度算法

LVS三种工作模式.十种调度算法介绍 工作模式介绍: 1.Virtual server via NAT(VS-NAT) 优点:集群中的物理服务器可以使用任何支持TCP/IP操作系统,物理服务器可以分配Internet的保留私有地址,只有负载均衡器需要一个合法的IP地址. 缺点:扩展性有限.当服务器节点(普通PC服务器)数据增长到20个或更多时,负载均衡器将成为整个系统的瓶颈,因为所有的请求包和应答包都需要经过负载 均衡器再生.假使TCP包的平均长度是536字节的话,平均包再生延迟时间大约为60u

LVS概念类型及三种工作模式和十种调度算法介绍

一.LVS概念 LVS(Linux Virtual Server):Linux 虚拟服务器 LVS是个负载均衡设备,它不提供任何服务,用户请求到这里的时候,它是将客户需求转发至后端真正提供服务的服务,所以说后端的服务称作real server.LVS分为两段,前一段称为ipvsadm(管理集群服务的命令行工具),后面一段叫做ipvs(内核模块)[提示:LVS和iptables不能同时使用]. 二.LVS类型 LB(Load Balancing):负载均衡集群 特性:为了增加能力能力 HA(Hig

LVS三种工作模式、十种调度算法介绍

工作模式介绍:1.Virtual server via NAT(VS-NAT)优点:集群中的物理服务器可以使用任何支持TCP/IP操作系统,物理服务器可以分配Internet的保留私有地址,只有负载均衡器需要一个合法的IP地址.缺点:扩展性有限.当服务器节点(普通PC服务器)数据增长到20个或更多时,负载均衡器将成为整个系统的瓶颈,因为所有的请求包和应答包都需要经过负载均衡器再生.假使TCP包的平均长度是536字节的话,平均包再生延迟时间大约为60us(在Pentium处理器上计算的,采用更快的

LVS集群之工作原理

  首先我们要了解LVS的工作机制: LVS里Director本身不响应请求,只是接受转发请求到后方,Realservers才是后台真正响应请求. LVS 工作原理基本类似DNAT,又不完全相像,它是一种四层交换,默认情况下通过用户请求的地址和端口来判断用户的请求,从而转发到后台真正提供服务的主机,而判断这种请求的是通过套接字来实现,所以四层就可以实现. 而且这个转发的过程对用户而言是透明的(简单的讲,就是用户访问DR的IP,而DR转发给RSS,而用户不知道这个过程) LVS的工作模式: 1.D

LVS的四种模式和十种调度算法简介

LVS的四种模型和十种调度算法 LVS简介 LVS:Linux Virtual Server,负载调度器,内核集成,章文嵩(花名 正明) LVS的工作原理 VS根据请求报文的目标IP和目标协议及端口将其调度转发至某RS,根据调度算法来挑选RS LVS集群类型的专业术语 VS:Virtual Server 虚拟的服务器 RS:Real Server(lvs) 真正提供服务的服务器CIP:Client IP 客户端的IP VIP: Virtual serve IP LVS服务器针对互联网的客户端设置