LVS负载均衡—理论学习
LVS:Linux Virtual Server,从Linux内核2.6开始作为linux内核的模块
LVS工作原理
终端互联网用户从外部访问公司的外部负载均衡服务器,终端用户的Web请求会发送给LVS调 度器,调度器根据自己预设的算法决定将该请求发送给后端的某台Web服务器,比如,轮询算法可 以将外部的请求平均分发给后端的所有服务器,终端用户访问LVS调度器虽然会被转发到后端真实的 服务器,但如果真实服务器连接的是相同的存储,提供的服务也是相同的服务,最终用户不管是访问 哪台真实服务器,得到的服务内容都是一样的,整个集群对用户而言都是透明的。最后根据LVS工作 模式的不同,真实服务器会选择不同的方式将用户需要的数据发送到终端用户,
负载调度层:由一台或多台调度器组成,将ipvs模块加载到作为调度器的这太主机,将会在调度器上生成虚拟 IP(VIP)以及虚拟端口,客户端通过VIP将请求交给调度器,调度器根据所配置的调度算法将该请求交给合适的后端节点 服务器节点:处理调度器转发来的客户端的请求并作出响应 共享存储层:保证服务器节点之间的数据同步
LVS基于IP进行负载调度,有三种调度模式:NAT、DR、TUN
NAT:网络地址转换,客户端通过VIP(源ip:CIP 目的ip:VIP)将请求包交给调度器,调度器根据调度算法选择一台合适的后 端服务器节点来处理该请求,调度器将客户端发来的请求包的目的IP改为该后端服务器节点的IP地址后请求包交给该节点, 该节点处理完请求后将响应包(源ip:RIP 目的ip:CIP)交给调度器,调度器将响应包的源ip转换为VIP后发送给客户端 DR:直接路由,调度器与后端节点都配置VIP,调度器通过VIP接收客户端的请求,通过调度算法选择一台合适的后端节点,将 客户端发来的请求包的目的mac地址改为后端节点的mac地址之后,将请求交给该节点,服务节点处理完请求直接将响应包交 给客户端,不再经过调度器,相较于NAT模式,环节了调度器的压力 在该模式下需要注意两个问题: 1、最好将后端节点的VIP配置在lo网卡上,并且禁用虚拟IP所在网卡的arp响应功能, 2、由服务器节点的物理网卡来发送arp请求包 TUN:IP隧道,调度器通过虚拟IP接收客户端的请求,然后对该请求包进行二次封装,源IP为DIP(调度器自己 的IP),目的IP为RIP(后端节点的IP),后端节点接收到这个包之后进行解封装,对客户端发来的请求包进行处理,并 将响应包通过IP隧道直接交给客户端,成本高
LVS调度算法分为两种:
1、静态调度算法 RR:轮询调度(Round Robin)算法就是按依次循环的方式将请求调度到不同的服务器上,该算法最大的 特点就是实现简单,轮询算法假设所有的服务器处理请求的能力都一样的,调度器会将所有的请求平均分配给每个真实 服务器 WRR:加权轮询(Weight Round Robin )算法主要是对轮询算法的一种优化与补充,LVS会考虑每台服务器的性能,并给每台服务器添加一个权值,如果服务器A的权值为1,服务器B的权值为2,则调度器调度到服务器B的请求会是服务器A的 两倍。权值越 SH:源地址散列调度(Source Hashing)算法先根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散 列表找出对应的服务器,若该服务器是可用的且并未超载,将请求发送到该服务器,否则返回空。它采用的散列函数与目 标地址散列调度算法的相同,它的算法流程与目标地址散列调度算法的基本相似 DH:目标地址散列调度(Destination Hashing)算法先根据请求的目标IP地址,作为散列键(Hash Key)从静态分 配的散列表找出对应的服务器,若该服务器是可用的且并未超载,将请求发送到该服务器,否则返回空 2、动态调度算法 LC:最小连接调度(Least Connections)算法是把新的连接请求分配到当前连接数最小的服务器,最小连接调 度是一种动态的调度算法,它通过服务器当前活跃的连接数来估计服务器的情况,调度器需要记录各个服务器已建立连接 的数目,当一个请求被调度到某台服务器,其连接数加1;当连接中断或者超时,其连接数减1。 (集群系统的真实服务器具有相近的系统性能,采用最小连接调度算法可以比较好地均衡负载。) WLC:加权最少连接(Weight Least Connections)算法是最小连接调度的超集,各个服务器相应的权值表示其处 理性能。服务器的缺省权值为1,系统管理员可以动态地设置服务器的权值。加权最小连接调度在调度新连接时尽可能使 服务器的已建立连接数和其权值成比例。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。 LBLC:基于局部的最少连接调度(Locality-Based Least Connections )算法是针对请求报文的目标IP地址的 负载均衡调度,目前主要用于Cache集群系统,因为在Cache集群客户请求报文的目标IP地址是变化的。这里假设任何后端服 务器都可以处理任一请求,算法的设计目标是在服务器的负载基本平衡情况下,将相同目标IP地址的请求调度到同一台服务 器,来提高各台服务器的访问局部性和Cache命中率,从而提升整个集群系统的处理能力。LBLC调度算法先根据请求的目标I P地址找出该目标IP地址最近使用的服务器,若该服务器是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或 者该服务器超载且有服务器处于一半的工作负载,则使用‘最少连接‘的原则选出一个可用的服务器,将请求发送到服务器。 LBLCR:带复制的基于局部性的最少连接(Locality-Based Least Connections with Replication)算法也是针对 目标IP地址的负载均衡,目前主要用于Cache集群系统,它与LBLC算法不同之处是它要维护从一个目标IP地址到一组服务器 的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。按‘最小连接‘原则从该服务器组中选出一一台服务器,若 服务器没有超载,将请求发送到该服务器;若服务器超载,则按‘最小连接‘原则从整个集群中选出一台服务器,将该服务器 加入到这个服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组 中删除,以降低复制的程度
?