LVS概述
LVS简介
-
LVS项目介绍
- Linux虚拟服务器(LVS)是章文嵩在国防科技大学就读博士期间创建的
- LVS可以实现高可用的、可伸缩的Web、Mail、Cache和Media等网络服务
- 最终目标是利用LInux操作系统和LVS集群软件实现一个高可用、高性能、低成本的服务器应用集群
-
LVS集群组成
- 前端 : 负载均衡层
- 由一台或多台负载调度器构成
- 中间 : 服务器群组层
- 由一组实际运行应用服务的服务器组成
- 底端 : 数据共享存储层
- 提供共享存储空间的存储区域
- 前端 : 负载均衡层
-
LVS术语
- Director Server : 调度服务器
- 将负载分布到Real Server的服务器
- Real Server : 真实服务器
- 真正提供应用服务的服务器
- VIP : 虚拟IP地址
- 公布给用户访问的虚拟IP地址
- RIP : 真实IP地址
- 集群节点上使用的IP地址
- DIP : 调度器连接节点服务器的IP地址
- Director Server : 调度服务器
LVS工作模式
VS-NAT模式
-
简介
- NAT(NetWork Address Translation)即网络地址转换
- 通过修改请求报文中的目标地址和目标端口来实现转发
-
工作过程
- 客户端访问域名发送访问请求, 请求首先经过DNS服务器域名解析到负载均衡代理服务器的外网地址(即VIP), 然后请求数据包被发往调度器
- 调度器根据调度算法修改数据报文中的目标地址和目标端口为对应的真实提供服务的IP(RIP)和端口
- 真实服务器将响应数据包返回给LVS调度器, 调度器在得到响应数据包后, 将源地址和端口修改为VIP及调度器相应端口, 然后转发给客户端
-
注意事项
- RIP和DIP应在同一个IP网络, 且应使用私网地址
- 真实服务器的网关要指向DIP(真实服务器返回数据包是跨网段发送给CIP, 因此先要转发给网关, 将网关设置为DIP则实现了真实服务器将返回数据包转发给调度器)
- 由于请求报文和响应报文都要经过调度器转发, 因此调度器容易成为瓶颈
- NAT模式支持端口映射, 可以修改请求报文的目标port
- 调度器必须是Linux系统, 真实服务器可以是任意操作系统
-
优点
- 真实服务器可以使用任何支持TCP/IP操作系统
- 真实服务器可以分配私有地址, 只有调度器需要一个合法的IP地址
-
缺点
- 扩展性有限 : 当服务器节点增长到20个或更多的时候, 调度器将成为整个系统的瓶颈
VS-TUN模式
-
简介
- IP隧道(IP Tunneling)模式
- 一般来说, 许多Internet服务的请求包都很短小, 而应答包通常很大
- 为了避免如NAT模式的瓶颈问题, TUN的思路是将请求与响应数据分离, 调度器只负责转发请求包, 响应数据包由真实服务器直接转给客户端
- 一般来说, VS/TUN模式会用来负载调度缓存服务器组, 这些缓存服务器一般放置在不同网络环境, 可以就近返回数据给客户端。
-
工作过程
- 调度器接到用户接收到用户请求包后, 根据根据调度算法使用IP隧道协议封装该包
- 然后传给某个真实服务器
- 真实服务器收到数据包后响应请求信息, 首先解开报文得到源IP CIP和目标IP VIP , 真实服务器发现自身的tun接口配置了VIP, 因此接收该数据包
- 随后响应请求信息, 然后直接将应答内容传给用户.(此时需要一条特殊的路由条目, 明确指定路由的源地址是VIP)
-
IP隧道简介
- IP 隧道是一种数据包封装技术
- 它可以将原始数据包封装并添加新的报头(内容包括新的源地址及端口、目标地址及端口)
-
注意事项
- 调度器与真实服务器都需要支持IP隧道协议
- RIP和DIP不用处于同一物理网络中
- RIP必须可以与公网通信, 即集群节点可以跨互联网实现
- RS的 tun 接口上需要配置VIP地址 以便接收director转发过来的数据包,以及作为响应报文的源IP。
- 需要添加一条特殊的路由条目,使得后端服务器返回响应给客户端时的源IP为VIP
-
优点
- 负载均衡器只负责将请求包分发给物理服务器,而物理服务器将应答包直接发给用户。所以,负载均衡器能处理很巨大的请求量,这种方式,一台负载均衡能为超过100台的物理服务器服务,负载均衡器不再是系统的瓶颈。
-
缺点
- 要求所有服务器都支持IP Tunneling协议
VS-DR模式
-
简介
- DR(Direct Routing) 直接路由模式
- 通过修改数据包中的目标MAC地址实现调度转发
-
工作过程
- 调度器收到客户端的请求数据包后, 调度器根据算法选出真实服务器
- 调度器在不修改数据报文的情况下, 将数据帧的MAC地址修改为选出的真实服务器的MAC地址, 通过交换机将该数据帧发给真实服务器
- 真实服务器处理完请求数据后, 将响应数据包直接发给客户端
-
注意实现
- 要求调度器与真实服务器组必须在物理上有一个网卡在同一个局域网下(中间不隔有路由器)- VIP地址为调度器和真实服务器组共享
- 调度器配置的VIP地址是对外可见的,用于接收虚拟服务的请求报文
- 所有的服务器把VIP地址配置在各自的Non-ARP网络设备上,它对外面是不可见的,只是用于处理目标地址为VIP的网络请求
-
优点
- 同TUN一样, 调度器只处理请求数据包
- 不需要隧道结构, 因此大多数操作系统都可以作为真实服务器
-
缺点
- 要求调度器与真实服务器组必须在物理上有一个网卡在同一个局域网下
LVS调度算法
静态算法
四种 : 只根据算法进行调度, 不考虑后端服务器的实际连接情况和负载情况
- 轮询( Round Robin )
- 将客户端请求平均分发到Real Server
- 加权轮询( Weighted Round Robin )
- 根据Real Server权重值进行轮询调度
- 目标地址散列调度( Destination Hash )
- 根据请求的目标IP地址, 作为散列键(Hash Key)从静态分配的散列表找出对应的服务器, 若该服务器是可用的且未超负载, 将请求发送到该服务器, 否则返回空
- 源地址 ( Source Hash )
- 调度算法根据请求的源IP地址, 作为散列键( Hash Key )从静态分配的散列表找出对应的服务器, 若该服务器是可用且未超载, 将请求发送到该服务器, 否则为空
动态算法
六种 : 前端的调度器会根据后端真实服务器的实际连接情况来分配请求
- 最少连接(Least Connections)
- 选择连接最少的服务器
- 加权最少连接(Weighted Least Connections)
- 根据Real Server权重值, 选择连接数最少的服务器
- 基于局部性的最少连接(Locality-Based Least Connections)
- 针对目标IP地址的负载均衡,目前主要用于Cache集群系统。该算法根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用“最少链接”的原则选出一个可用的服务器,将请求发送到该服务器。
- 带复制的基于局部性的最少连接
- 也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。它与LBLC算法的不同之处是它要维护从一个目标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。该算法根据请求的目标IP地址找出该目标IP地址对应的服务器组,按”最小连接”原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器;若服务器超载,则按“最小连接”原则从这个集群中选出一台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度。
- 最短延迟调度( Shortest Expected Delay )
- 在WLC基础上改进,Overhead = (ACTIVE+1)*256/加权,不再考虑非活动状态,把当前处于活动状态的数目+1来实现,数目最小的,接受下次请求,+1的目的是为了考虑加权的时候,非活动连接过多缺陷:当权限过大的时候,会倒置空闲服务器一直处于无连接状态
- 永不排队/最少队列调度
- 无需队列。如果有台realserver的连接数=0就直接分配过去,不需要在进行sed运算。