tinydu 2020-02-18
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的应用程序代理。
负载均衡服务器在决定将请求转发到哪台具体真实服务器的时候,是通过负载均衡算法来实现的。负载均衡算法,是一个负载均衡服务器的核心。
负载均衡算法可以分为两类:静态负载均衡算法和动态负载均衡算法。
静态负载均衡算法
包括:轮询,比率,优先权。
动态负载均衡算法
包括: 最少连接数,最快响应速度,观察方法,预测法,动态性能分配,动态服务器补充,服务质量,服务类型,规则模式。
?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需要安装第三方模块才能使用。