LVS与Nginx负载均衡调度算法
第1章 LVS的10种调度算法
1.1 静态算法:
1.1.1 rr(round robin):轮询调度算法:
轮询调度算法的原理就是依次将用户的访问请求,平均的分配到每一台web服务节点上,从1开始,到最后一台服务器节点结束,然后在开始新一轮的循环,这种算法简单,但是没有考虑到每台节点服务器的具体性能
1.1.2 wrr(weight):权重调度算法
由于每台服务器的性能会高低不同,wrr将会根据管理员设定的权重值来分配访问请求,权重值越大的,被分到的请求数也就越多,此种算法有效的解决了rr轮询算法的缺点
1.1.3 sh(source hashing)源地址散列:
主要实现会话绑定,解决session会话共享问题,源地址散列会根据请求的源ip地址,作为关键字,在静态分配的hash表中找出对应的服务器,若该服务器没有超过负荷,就将请求分配到该服务器
1.1.4 dh(destination hashing)目标地址散列,把同一个ip地址的请求,发送给同一个server
目标地址散列调度算法是针对目标ip地址的负载均衡,是一种静态映射算法,把目标ip地址作为关键字,在静态分配的hash表中找到对应的服务器,若该服务器可用并没有超过负荷,则将请求发送到该服务器
1.2 动态调度算法:
1.2.1 LC(least connection)最少连接:
当有用户发起访问请求时,lc算法将会把请求分配到集群中连接数最少的服务器上
1.2.2 wlc(weight least connection scheduling)加权最少连接:
加权最少连接算法是最少连接的升级版,各个服务器用想应的权重值表示其处理连接的性能,默认权重值为1,加权最少连接调度在调度访问请求时,会尽量使服务器的已建立连接和权重值成比例
也就是活动的连接数除以权重,谁小,挑谁
1.2.3 sed(shortest expected)最短延迟调度:
在wlc基础上进行改进,不在考虑非活动状态,把当前处于活动状态的数目+1,数目最小的,则接受下次访问请求,+1的目的是为了考虑加权的时候,非活动链接过多,当权限过大,会导致非空闲的节点一直处于无连接状态
1.2.4 nq(nerver queue)永不排队,改进的sed
无需队列,如果有rs节点的连接数为0,那么直接将访问请求分配过去,不需要进行sed运算
1.2.5 LBLC(locality based leastconnection)基于局部性的最少连接
此算法是根据请求报文的目标ip地址的负载均衡调度,目前主要用于cache集群系统,因为cache集群中的客户请求报文的目标ip地址是变化的,这里假设任何后端服务器都可以处理任何请求,算法的设计目标在服务器的负载剧本平衡的请求下,将相同的目标ip地址的请求调度到同一个服务器,来提高整个web服务的访问局部性和主存cache的命中率,从而调整整个集群系统的处理能力
基于局部性的最少连接调度算法根据请求的目标ip地址找出该目标地址最近使用的rs,若该rs可用,将发送请求,若该服务器不可用,则用最少连接的原则选出一台可用服务器来进行匹配
1.2.6 LBLCR(Locality-Based Least Connections withReplication)带复制的基于局部性最少连接
此种算法是针对目标ip地址的负载均衡,该算法根据请求的目标地址ip找出该地址对应的服务组,按最少连接的原则从服务组中选出一台服务器,若服务器没有超载,则发送请求到该服务器,若该服务器超载或者不可用,则按照最小连接的原则从这个集群中选出一台服务器,将该服务器添加到服务组中,在将请求发送到该服务器,同时当该服务器组中有一段时间没有被修改,将最忙的服务器从组中剔除,以降低复制的程度
第2章 Nginx的五种调度算法
2.1 rr轮询算法:
依次将用户的访问请求,平均的分配到后端的web集群中每个节点,此种算法不会考虑每个节点的性能,所以比较适用于所有节点的性能一致的情况
2.2 wrr权重算法:
根据设定的权重值,权重值越大,被配到的请求次数也就越多,有效的解决了rr算法的缺点
2.3 ip_hash算法:
根据用户访问的真实ip生成一个hash表,此后,同一个ip地址的访问请求都将会分配到这个节点上,可以解决session会话共享的问题
2.4 url_hash:
根据用户访问的url的hash结果,使每个url定向到同一个后端服务器上
2.5 fair:
fair是更加智能的负载均衡算法,此种算法可以根据页面大小的和加载时间长短智能的进行负载均衡,也就是根据后端节点的响应时间来分配请求,响应时间短的则优先分配,Nginx本身不支持fair,如果需要则必须下载nginx的upstream_fair模块