负载均衡概念及相关策略了解
一、负载均衡
概念:
Load balancing,即负载均衡,是一种计算机技术,用来在多个计算机(计算机集群)、网络连接、CPU、磁盘驱动器或其他资源中分配负载,以达到最优化资源使用、最大化吞吐率、最小化响应时间、同时避免过载的目的。
意思是将负载(工作任务,访问请求)进行平衡、分摊到多个操作单元(服务器,组件)上进行执行。是解决高性能,单点故障(高可用),扩展性(水平伸缩)的终极解决方案。
负载均衡是指将请求分摊到多个操作单元也就是分开部署的服务器上,nginx是常用的反向代理服务器,可以用来做负载均衡。
反向代理是负载均衡实现的前提,正因为代理服务器有了解析请求,分发请求的能力才能实现负载均衡降低每一台服务器的负荷。
负载均衡的核心就是“分摊压力”。
作用:
1.解决并发压力,提高应用处理性能(增加吞吐量,加强网络处理能力)。
2.提供故障转移,实现高可用。
3.通过添加或减少服务器数量,提供网站伸缩性(扩展性)。
4.安全防护,在负载均衡设备上做一些过滤,黑白名单等处理。
负载均衡分类
?常见的实现方式中,主要可以在应用层、传输层、网络层和数据传输层这四层做文章。所以,工作在应用层的负载均衡,我们通常称之为七层负载均衡、工作在传输层的我们称之为四层负载均衡。
四层负载均衡
?四层负载均衡工作在OSI模型的传输层,由于在传输层,只有TCP/UDP协议,这两种协议中除了包含源IP、目标IP以外,还包含源端口号及目的端口号。四层负载均衡服务器在接受到客户端请求后,以后通过修改数据包的地址信息(IP+端口号)将流量转发到应用服务器。
七层负载均衡
七层负载均衡工作在OSI模型的应用层,应用层协议较多,常用http、radius、dns等。七层负载就可以基于这些协议来负载。这些应用层协议中会包含很多有意义的内容。比如同一个Web服务器的负载均衡,除了根据IP加端口进行负载外,还可根据七层的URL、浏览器类别、语言来决定是否要进行负载均衡。
根据实现技术不同,可分为DNS负载均衡,HTTP负载均衡,IP负载均衡,反向代理负载均衡、链路层负载均衡等
负载均衡实现
?市面上有很多开源的负载均衡的工具或软件,基本都是基于前面提到的方案实现的,大多数是工作在第七层和第四层的。Nginx/LVS/HAProxy是目前使用最广泛的三种负载均衡软件。
LVS :LVS主要用来做四层负载均衡。
LVS(Linux Virtual Server),也就是Linux虚拟服务器, 是一个由章文嵩博士发起的自由软件项目。使用LVS技术要达到的目标是:通过LVS提供的负载均衡技术和Linux操作系统实现一个高性能、高可用的服务器集群,它具有良好可靠性、可扩展性和可操作性,从而以低廉的成本实现最优的服务性能。
Nginx :Nginx主要用来做七层负载均衡。
Nginx(发音同engine x)是一个网页服务器,它能反向代理HTTP, HTTPS, SMTP, POP3, IMAP的协议链接,以及一个负载均衡器和一个HTTP缓存。
HAProxy :HAProxy主要用来做七层负载均衡。
HAProxy是一个使用C语言编写的自由及开放源代码软件,其提供高可用性、负载均衡,以及基于TCP和HTTP的应用程序代理。
负载均衡算法:
负载均衡服务器在决定将请求转发到哪台具体真实服务器的时候,是通过负载均衡算法来实现的。负载均衡算法,是一个负载均衡服务器的核心。
负载均衡算法可以分为两类:静态负载均衡算法和动态负载均衡算法。
静态负载均衡算法
包括:轮询,比率,优先权。
- 轮询(Round Robin):将请求一次顺序循环地连接每个服务器。当其中某个服务器发生第二到第7层的故障,BIG-IP(BIG-IP 是 F5 最原始的负载均衡器)就把其从顺序循环队列中拿出,不参加下一次的轮询,直到其恢复正常。
- 比率(Ratio)加权:给每个服务器分配一个加权值为比例,根椐这个比例,把用户的请求分配到每个服务器。当其中某个服务器发生第二到第7层的故障,BIG-IP就把其从服务器队列中拿出,不参加下一次的用户请求的分配, 直到其恢复正常。
- 优先权(Priority):给所有服务器分组,给每个组定义优先权,BIG-IP用户的请求,分配给优先级最高的服务器组(在同一组内,采用轮询或比率算法,分配用户的请求);当最高优先级中所有服务器出现故障,BIG-IP 才将请求送给次优先级的服务器组。这种方式,实际为用户提供一种热备份的方式。
动态负载均衡算法
包括: 最少连接数,最快响应速度,观察方法,预测法,动态性能分配,动态服务器补充,服务质量,服务类型,规则模式。
- 最少的连接方式(Least Connection):传递新的连接给那些进行最少连接处理的服务器。当其中某个服务器发生第二到第7 层的故障,BIG-IP 就将其从服务器队列中剔除,不参加下一次的用户请求的分配, 直到其恢复正常。
- 最快模式(Fastest):传递连接给那些响应最快的服务器。当其中某个服务器发生第二到第7 层的故障,BIG-IP 就将其从服务器队列中剔除,不参加下一次的用户请求的分配,直到其恢复正常。
- 观察模式(Observed):连接数目和响应时间以这两项的最佳平衡为依据为新的请求选择服务器。当其中某个服务器发生第二到第7 层的故障,BIG-IP就将其从服务器队列中剔除,不参加下一次的用户请求的分配,直到其恢复正常。
- 预测模式(Predictive):BIG-IP利用收集到的服务器当前的性能指标,进行预测分析,选择一台服务器在下一个时间片内,其性能将达到最佳的服务器响应用户的请求。(被BIG-IP 进行检测)
- 动态性能分配(Dynamic Ratio-APM):BIG-IP 收集到的应用程序和应用服务器的各项性能参数,动态调整流量分配。
- 动态服务器补充(Dynamic Server Act.):当主服务器群中因故障导致数量减少时,动态地将备份服务器补充至主服务器群。
- 服务质量(QoS):按不同的优先级对数据流进行分配。
- 服务类型(ToS):按不同的服务类型(在Type of Field中标识)负载均衡对数据流进行分配。
- 规则模式:针对不同的数据流设置导向规则,用户可自行设置。
Nginx负载均衡策略
?Nginx目前支持自带3种负载均衡策略,还有2种常用的第三方策略。
一、RR(轮询)策略:Nginx默认是RR策略
二、权重:指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
三、ip_hash:很多时候我们需要一个客户只访问一个服务器,那么就需要用iphash了,iphash的每个请求按访问ip的hash结果进行分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
四、fair(第三方):按后端服务器的响应时间来分配请求,响应时间短的优先分配。
五、url_hash(第三方):按访问url地址的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。在upstream中加入hash语句,server语句中不能写入weight等其他的参数,hash_method是使用的hash算法。
以上5种负载均衡策略各自适用不同的情况,所以可以根据实际情况选择使用哪种策略模式。fair和url_hash需要安装第三方模块才能使用。