码迷,mamicode.com
首页 > 编程语言 > 详细

负载均衡调度算法追溯

时间:2017-10-25 23:43:47      阅读:144      评论:0      收藏:0      [点我收藏+]

标签:lvs

标题索引


  • 追溯原因

  • 出口结构

  • 调度算法

  • 问题处理


追溯原因

    根据同事信息反馈:教育云平台服务器对外提供服务请求不均衡,其中一台服务器对外提供服务数量远大于其他服务器,锁定出现问题原因在于出口负载均衡调度器的调度算法,针对此现象组织运维小团队进行再次入学习负载均衡调度算法,解决负载不均衡情况。

出口结构

    出口采用两台深信服应用交付做负载均衡,下联DP8000安全防火墙做透明传输,核心采用两台h3c10508做交换,出口网络拓扑结构如下图:

技术分享

图1-1 出口网络拓扑图

    两台负载均衡做主被模式,防火墙和核心交换机采用虚拟机技术分别虚拟为1台逻辑防火墙和1台逻辑交换机,且为双主模式,以备出口负载均衡随时业务切换。

调度算法

    考虑到国内多数产品基于开源软件进行二次开发,因此决定追根溯源从开源产品LVS的调度算法为基础进行深度学习,并将学习方法及解决问题案例记录知识库。

    从动静角度划分,LVS的调度算法主要分为4种静态调度算法和6种动态调度算法,静态调度算法相对较为简单,不依赖服务器的性能及连接数进行调度,动态算法根据在线访提供服务连接数及性能等进行动态调度,只要指标参数为通过对应的调度算法公式计算出Overhead=value的值,value值越小说明服务器负载越小,因此会优先调度。

    静态调度算法如下:

    1.轮询调度算法

    轮询调度算法不考虑服务器性能和在线连接数,傻瓜式的进行轮询调度。

    2.权重轮询算法

    基于权重进行轮询调度,性能好的服务器可以基于权重进行加权轮询调度。

    3.源IP hash算法

    根据源IP地址进行hash计算,对于相同源IP地址的请求或已建立的连接调度到同一台服务器,可实现会话绑定,但基于国内网络现状,N多用户共用同一公网IP地址上网请求调度到同一服务器,有可能导致服务器负载严重不均衡。

    4.目的IP hash算法

    基于目的IP地进行hash计算,对于同一目的IP地址的请求或已建立的连接调度到同一目的服务器,考虑到国内网络现状,多数用户运营商或CDN内容发布商,利用缓存机制,为用户请求加速提供服务。

    动态调度算法如下:

    在动态调度算法中,提前知晓几个概念:

    Activeconns:指活动连接数,即处于ESTABLISH状态已经建立的连接。

    Inactiveconns:指非活跃连接数,即处于TCP ESTABLISH 状态以外的连接,如SYN_RECV、TIME_WAIT 等。

    5.最少连接调度算法

    最少连接调度算法,简称LC,Least Connections,其计算公式为:Overhead=Activeconns*256+Inactiveconnns,由计算公式可知,在服务器集群节点数中已建立连接数较少的Overhead值也较小,因此会被优先调度。由此可知调度算可以被理解为“不考虑集群服务器的节点性能,仅根据服务器连接数进行提供服务,连接数越少,优先会被调度”。

    6.加权最少连接调度算法

    简称:WLC,Weighted Least Connections,在LVS中为默认策略,其具体调度算法和调度含义如下解释:

    在最少连接调度算法的基础之上加权重,其计算公式为:Overhead=(Activeconns*256+Inactiveconnns)/weight,由公式可知,在服务器集群节点数中权重越大Overhead的值越小。由此可知调度算法可以被理解为“考虑服务器的节点性能,根据服务器连接数进行提供服务,连接数越少,权重越大,优先会被调度”。

    7.初始连接高权重优先

    简称:SED,Shortest Expection Delay,其计算公式为:Overhead=(activeconns+1)*256/weight,由公式可知在负载均衡调度时,权重优先级越高Overhead值越小,越是优先被调用。问题是当连接数量规模相对较小的情况下,有可能出现仅有高权重服务器对外提供服务,其他服务器空闲。

    8.无队列调度算法

    简称:NQ,Never Queue,在第一轮调度时均衡调度,后续采用SED调度算法,防止仅有一台高性能服务器提供服务,而其他服务器处于空闲状态。

    9.动态DH算法

    简称:LBLC:Locality-Based LC,动态基于目的IP进行负载均衡,可用于根据负载状态实现正向代理,目前大多用在cache集群,当LVS接收到请求时,该算法根据最近调动情况调动到就近服务器,若该服务器是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用“最少链接”的原则选出一个可用的服务器,将请求发送到该服务器

    10.动态DH算法+复制功能

    简称:LBLCR:LBLC with Replication,在动态DH算法的基础之上,它与LBLC算法的不同之处是它要维护从一个目标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射该算法根据请求的目标IP地址找出该目标IP地址对应的服务器组,按”最小连接”原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器;若服务器超载,则按“最小连接”原则从这个集群中选出一台服务器,将该服务器加入到服务器组中,将请求发送到该服务器同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度。

问题处理

    综合调动算法原理和会话管理的因素,估计当时实施工程师考虑到会话绑定的问题,因此将调度算法策略设定位静态源IP hash算法,而平台访问量多数来自几个固定的源IP地址,所以导致服务器对外提供服务不均衡。

    沟通联系云平台开发商,云平台早已支持会话同步(会话同步:会话绑定、会话同步、会话统一管理),因此只需将负载均衡调度算法更改为默认wlc策略即可实现服务器负载均衡。


本文出自 “一步一印,有印为证” 博客,谢绝转载!

负载均衡调度算法追溯

标签:lvs

原文地址:http://weiboxue.blog.51cto.com/6506379/1975824

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!