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 模块
来源: http://www.bubuko.com/infodetail-2552621.html