负载均衡原理

负载均衡的三大要素:算法,健康检查和会话保持。


负载均衡算法

一般来说负载均衡设备都会默认支持多种负载均衡分发策略,例如:

Ø  轮询(RoundRobin)将请求顺序循环地发到每个服务器。当其中某个服务器发生故障,AX就把其从顺序循环队列中拿出,不参加下一次的轮询,直到其恢复正常。

Ø  比率(Ratio):给每个服务器分配一个加权值为比例,根椐这个比例,把用户的请求分配到每个服务器。当其中某个服务器发生故障,AX就把其从服务器队列中拿出,不参加下一次的用户请求的分配,直到其恢复正常。

Ø  优先权(Priority):给所有服务器分组,给每个组定义优先权,将用户的请求分配给优先级最高的服务器组(在同一组内,采用预先设定的轮询或比率算法,分配用户的请求);当最高优先级中所有服务器或者指定数量的服务器出现故障,AX将把请求送给次优先级的服务器组。这种方式,实际为用户提供一种热备份的方式。

Ø  最少连接数(LeastConnection):AX会记录当前每台服务器或者服务端口上的连接数,新的连接将传递给连接数最少的服务器。当其中某个服务器发生故障,AX就把其从服务器队列中拿出,不参加下一次的用户请求的分配,直到其恢复正常。

Ø  最快响应时间(Fast Reponse time):新的连接传递给那些响应最快的服务器。当其中某个服务器发生故障,AX就把其从服务器队列中拿出,不参加下一次的用户请求的分配,直到其恢复正常。

以上为通用的负载均衡算法,还有一些算法根据不同的需求也可能会用到,例如:

Ø  哈希算法( hash):  将客户端的源地址,端口进行哈希运算,根据运算的结果转发给一台服务器进行处理,当其中某个服务器发生故障,就把其从服务器队列中拿出,不参加下一次的用户请求的分配,直到其恢复正常。

Ø  基于策略的负载均衡:针对不同的数据流设置导向规则,用户可自行编辑流量分配策略,利用这些策略对通过的数据流实施导向控制。

Ø  基于数据包的内容分发:例如判断HTTPURL,如果URL中带有.jpg的扩展名,就把数据包转发到指定的服务器。

 

继续看图分析,第二个用户207.17.117.21也访问www.a10networks.com,负载均衡设备根据负载均衡算法将第二个用户的请求转发到第二台服务器来处理。

 

 

假设在工作过程中,突然有一台服务器出现问题怎么办? 这就涉及到我们要介绍的第二个Feature:

健康检查

健康检查用于检查服务器开放的各种服务的可用状态。负载均衡设备一般会配置各种健康检查方法,例如Ping,TCP,UDP,HTTP,FTP,DNS等。Ping属于第三层的健康检查,用于检查服务器IP的连通性,而TCP/UDP属于第四层的健康检查,用于检查服务端口的UP/DOWN,如果要检查的更准确,就要用到基于7层的健康检查,例如创建一个HTTP健康检查,Get一个页面回来,并且检查页面内容是否包含一个指定的字符串,如果包含,则服务是UP的,如果不包含或者取不回页面,就认为该服务器的Web服务是不可用(DOWN)的。如下图所示,负载均衡设备检查到172.16.20.3这台服务器的80端口是DOWN的,负载均衡设备将不把后面的连接转发到这台服务器,而是根据算法将数据包转发到别的服务器。创建健康检查时可以设定检查的间隔时间和尝试次数,例如设定间隔时间为5秒,尝试次数为3,那么负载均衡设备每隔5秒发起一次健康检查,如果检查失败,则尝试3次,如果3次都检查失败,则把该服务标记为DOWN,然后服务器仍然会每隔5秒对DOWN的服务器进行检查,当某个时刻发现该服务器健康检查又成功了,则把该服务器重新标记为UP。健康检查的间隔时间和尝试次数要根据综合情况来设置,原则是既不会对业务产生影响,又不会对负载均衡设备造成较大负担。

 

 

 

 

假设是同一个用户继续访问,后续的连接会怎么处理呢? 看下图:

 

 

 

 

用户207.17.117.25之前发起的第一个连接是207.17.117.25:4003-〉199.237.202.127:80,负载均衡设备将该连接转发到了172.16.20.4,接着发起第二个连接207.17.117.25:4004-〉199.237.202.127:80,我们看到该连接还是转发到了服务器172.16.20.4,为什么呢?因为负载均衡设备配置了会话保持。

会话保持

会话保持用于保持会话的连续性和一致性,由于服务器之间很难做到实时同步用户访问信息,这就要求把用户的前后访问会话保持到一台服务器上来处理。举个例子,用户访问一个电子商务网站,如果用户登录时是由第一台服务器来处理的,但用户购买商品的动作却由第二台服务器来处理,第二台服务器由于不知道用户信息,所以本次购买就不会成功。这种情况就需要会话保持,把用户的操作都通过第一台服务器来处理才能成功。当然并不是所有的访问都需要会话保持,例如服务器提供的是静态页面比如网站的新闻频道,各台服务器都有相同的内容,这种访问就不需要会话保持。

负载均衡设备一般会默认配置一些会话保持的选项,例如源地址的会话保持,Cookie会话保持等,基于不同的应用要配置不同的会话保持,否则会引起负载的不均衡甚至访问异常。具体可参考本人的另一篇拙作:《不同应用环境下会话保持方式的选择》。

本文介绍了负载均衡的基本功能和实现原理,看起来并不难,但负载均衡涉及的知识其实非常的广泛,根据各个用户系统的不同,我们要熟悉不同的协议和应用流程,甚至涉及到某些开发语言和软件平台,否则在出现故障的时候,我们可能没有能力做出有效的判断,从这个意义上来说,一个负载均衡设备的工程师要掌握网络,应用和系统等各方面的知识,这些都要当作基础来积累。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值