LVS简介

1.LVS:(LB集群的一个实现)

Internet的快速增长使多媒体网络服务器面对的访问数量快速增加,服务器需要具备提供大量并法访问的能力,因此对于大负载的服务器来讲,CPU,I/O处理能力很快就会成为瓶颈。由於单台服务器的性能总是有限的,简单的提高硬件性能并不能真正解决这个问题。为此,必须采用多服务器和负载均衡技术才能满足大量访问的需要。Linux虚拟服务器(Linux Virtual Servers,LVS)使用负载均衡技术将多台服务器组成一个虚拟服务器。它为适应快速增长的网络访问需求提供了一个负载能力易于扩展,而且价格低廉的解决方案。

2.LVS结构框架

LVS由前端的负载均衡器(Load Balancer,LB)和后端的真实服务器(Real Server,RS)群组成。RS间可以通过局域网或广域网连接。LVS的这种结构对用是透明的,用户只能看见一台作为LB的虚拟服务器(Virtal Server),而看不到提供服务的RS群。当用户的请求发往虚拟服务器,LB根据设定的包转发策略和负载均衡调度算法将用户的请求转发给RS。RS再将用户请求结果返回给用户。同请求包一样,应答包的返回方式也与包转发策略有关。

3.LVS工作原理:

(1)lvs的控制是由两部份组成的

ipvs(ip virrual server):一段代码(工作在内核中的netfilter input钩子函数上)是真正生效实现调度的代码
ipvsadm(工作在用户空间的命令行工具,负责为ipvs内核框架编写规则,用于管理集群服务)

(2)lvs附着于netfiler五个内置的钩子函数

PREROUTING —> INPUT(流向内部)
PREROUTING----> FORWARD —> POSTROUTING(转发)‘
OUTPUT—> POSTROUTING(流向外部)

(3)lvs工作于INPUT

PREROUTING ---> INPUT(lvs在此强行改变数据流向)--->POSTROUTING

在这里插入图片描述

1.当用户向负载均衡调度器(Director Server)发起请求,调度器将请求发往至内核空间
2.PREROUTING链首先会接收到用户请求,判断目标IP确定是本机IP,将数据包发往INPUT链
3.IPVS是工作在INPUT链上的,当用户请求到达INPUT时,IPVS会将用户请求和自己已定义好的集群服务进行比对,如果用户请求的就是定义的集群服务,那么此时IPVS会强行修改数据包里的目标IP地址及端口,并将新的数据包发往POSTROUTING链
4.POSTROUTING链接收数据包后发现目标IP地址刚好是自己的后端服务器,那么此时通过选路,将数据包最终发送给后端的服务器

4.LVS的包转发策略:

1.NAT (Network Address Translation)模式。LB收到用户请求包后,LB将请求包中虚拟服务器的IP地址转换为某个选定RS的IP地址,转发给RS;RS将应答包发给LB,LB将应答包中RS的IP转为虚拟服务器的IP地址,回送给用户。
2.IP隧道 (IP Tunneling)模式。LB收到用户请求包后,根据IP隧道协议封装该包,然后传给某个选定的RS;RS解出请求信息,直接将应答内容传给用户。此时要求RS和LB都要支持IP隧道协议。
3.DR(Direct Routing)模式。LB收到请求包后,将请求包中目标MAC地址转换为某个选定RS的MAC地址后将包转发出去,RS收到请求包后,可直接将应答内容传给用户。此时要求LB和所有RS都必须在一个物理段内,且LB与RS群共享一个虚拟IP。

三种负载平衡对比

网络地址转换(NAT) 直接路由(DR) IP隧道(IP TUN)
建立难度 有一定难度 有一定难度
可扩展性 很好
带宽
延迟 最大
支持的服务器数量 少(10~20) 多(>100) 多(>100)
IP包修改 修改IP地址和端口 修改IP包的MAD地址 对请求包进行IP包装
后台服务器OS 任何支持NAT的OS 多数 支持IP Tunnel
网络连接 局域网 局域网 本地或远程
缺省路由 负载均衡服务器 不限
实际服务器限制 Lo不响应ARP Tunl设备不响应ARP
服务端口映射 可以 不可以 不可以

5.lvs相关术语

1.DS:Director Server。指的是前端负载均衡器节点。
2.RS:Real Server。后端真实的工作服务器。
3.VIP:向外部直接面向用户请求,作为用户请求的目标的IP地址。
4.DIP:Director Server IP,主要用于和内部主机通讯的IP地址。
5.RIP:Real Server IP,后端服务器的IP地址。
6.CIP:Client IP,访问客户端的IP地址。

6.LVS 的负载调度算法

在内核中的连接调度算法上,IPVS 已实现了以下八种调度算法:

一.
轮叫调度(Round­Robin Scheduling )
轮叫调度(Round Robin Scheduling)算法就是以轮叫的方式依次将请求调度不同的服务器,即每次调度执行 i = (i + 1) mod n,并选出第 i 台服务器。算法的优点是其简洁性,它无需记录当前所有连接的状态,所以它是一种无状态调度。
二.
加权轮叫调度(Weighted Round­Robin Scheduling )
加权轮叫调度 (Weighted Round­Robin Scheduling)算法可以解决服务器间性能不一的情况,它用相应的权值表示服务器的处理性能,服务器的缺省权值为 1。假设服务器 A 的权值为1,B 的 权值为 2,则表示服务器 B 的处理性能是 A 的两倍。加权轮叫调度算法是按权值的高低和轮叫方式分配请求到各服务器。权值高的服务器先收到的连接,权值高的服 务器比权值低的服务器处理更多的连接,相同权值的服务器处理相同数目的连接数。

最小连接调度(Least­Connection Scheduling )
最小连接调度(Least­ Connection Scheduling)算法是把新的连接请求分配到当前连接数最小的服务器。最小连接调度是一种动态调度算法,它通过服务器当前所活跃的连接数来估计服务器的负载情况。调度器需要记录各个服务器已建立连接的数目,当一个请求被调度到某台服务器,其连接数加 1;当连接中止或超时,其连接数减一。

加权最小连接调度(Weighted Least­Connection Scheduling)
加权最小连接调 度(Weighted Least­Connection Scheduling)算法是最小连接调度的超集,各个服务器用相应的权值表示其处理性能。服务器的缺省权值为 1,系统管理员可以动态地设置服务器的权值。加权最小连接调度在调度新连接时尽可能使服务器的已立连接数和其权
值成比例。

基于局部性的最少链接(Locality­Based Least Connections Scheduling )
基 于局部性的最少链接调度(Locality­Based Least Connections Scheduling,以下简称为LBLC)算法是针对请求报文的目标 IP 地址的负载均衡调度,目前主要用于 Cache 集群系统,因为在 Cache 集群中 客户请求报文的目标 IP 地址是变化的。这里假设任何后端服务器都可以处理任一请求,算法的设计目标是在服务器的负载基本平衡情况下,将相同目标 IP 地址的 请求调度到同一台服务器,来提高各台服务器的访问局部性和主存 Cache 命中率,从而整个集
群系统的处理能力。LBLC 调度算法先根据请求的目标 IP 地址 找出该目标 IP 地址最近使用的服务器,若该服务器是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处於其一半的工 作负载,则用 “ 最少链接 ” 的原则选出一个可用的服务器,将请求发送到该服务器。

带复制的基于局部性最少链接(Locality­Based Least Connections with Replication
Scheduling)
带复制的基于局部性最少链接调度(Locality­Based Least Connections with Replication
Scheduling,以下简称为 LBLCR)算法也是针对目标 IP 地址的负载均衡,目前主要用于 Cache集群系统。它与 LBLC 算法的不同之处是它要 维护从一个目标 IP 地址到一组服务器的映射,而 LBLC 算法维护从一个目标 IP 地址到一台服务器的映射。对于一个 “ 热门 ” 站点的服务请求,一台 Cache 服务器可能会忙不过来处理这些请求。这时,LBLC 调度算法会从所有的Cache 服务器中按 “ 最小连接 ” 原则选出一台 Cache 服务器,映射该 “ 热门 ” 站 点到这台Cache 服务器,很快这台 Cache 服务器也会超载,就会重复上述过程选出新的 Cache 服务器。这样,可能会导致该 “ 热门 ” 站点的映像会出现 在所有的 Cache 服务器上,降低了 Cache 服务器的使用
效率。LBLCR 调度算法将 “ 热门 ” 站点映射到一组 Cache 服务器(服务器集合),当该 “ 热门 ” 站点的请求负载增加时,会增加集合里的 Cache 服务器,来处理不断增长的负载;当该 “ 热门 ” 站点的请求负载降低时,会减少集合里的 Cache 服务器 数目。这样,该 “ 热门 ” 站点的映像不太可能出现在所有的 Cache 服务器上,从而提供 Cache 集群系统的使用效率。
LBLCR 算法先根据请求的目标 IP 地址找出该目标 IP 地址对应的服务器组;按 “ 最小连接 ” 原则从该服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器;若服务器超载;则按 “ 最小连接 ” 原则从整个集群中选出一台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服 务器从服务器组中删除,以降低复制的程度。

目标地址散列调度(Destination Hashing Scheduling )
目标地址散列调度 (Destination Hashing Scheduling)算法也是针对目标 IP 地址的负载均衡,但它是一种静态映射算法,通过一个散列(Hash)函数将一个目标 IP 地址映射到一台服务
器。目标地址散列调度算法先根据请求的目标 IP 地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则
返回空。

源地址散列调度(Source Hashing Scheduling)
源地址散列调度(Source Hashing Scheduling)算法正好与目标地址散列调度算法相反,它根据请求的源 IP 地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。它采用的散列函数与目标地址散列调度算法 的相同。它的算法流程与目标地址散列调度算法的基本相似,除了将请求的目标 IP 地址换成请求的源 IP 地址,所以这里不一一叙述。在实际应用中,源地址散列 调度和目标地址散列调度可以结合使用在防火墙集群中,它们可以保证整个系统的唯一出入口。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章