#yyds干货盘点#Nginx/HAProxy负载均衡原理及应用场景
Posted key_3_feng
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了#yyds干货盘点#Nginx/HAProxy负载均衡原理及应用场景相关的知识,希望对你有一定的参考价值。
nginx/HAProxy的四层负载均衡
访问原理
四层负载均衡Nginx/HAProxy数据包走向原理
①客户端请求数据包报文的源地址是CIP,访问目标地址是DIP+IP端口。
②负载均衡和后端服务器发起新的TCP三次握手,建立新的TCP连接。报文的源地址是DIP,目标地址是RIP。
③报文发送到后端服务器后,服务器响应该请求,并将响应数据包报文返还给负载均衡。
④然后负载均衡将此数据包报文的响应内容进行重新打包并返回给客户端。
Nginx/HAProxy四层三次握手数据包走向
客户端在向负载均衡进行TCP三次握手后,负载均衡会马上发起新的TCP连接,即为“二次连接”。
应用场景
Nginx/HAProxy的七层负载均衡
访问原理
七层负载均衡Nginx/HAProxy数据包走向原理
①客户端请求数据包报文的源地址是CIP,访问目标地址是DIP+IP端口+URL。
②负载均衡和后端服务器发起新的TCP三次握手,建立新的TCP连接。报文的源地址是DIP,目标地址是RIP,并且还有客户端请求的目标URL。
③报文发送到后端服务器后,服务器响应该请求,并将响应数据包报文返还给负载均衡。
④然后负载均衡将此数据包报文的响应内容进行重新打包并返回给客户端。
Nginx/HAProxy七层三次握手数据包走向
Nginx/HAProxy七层的二次连接,在客户端和负载均衡进行TCP三次握手后,还需要等客户端Pushdata传输数据,之后负载均衡和后端服务器才会建立新的TCP三次握手。
应用场景
七层作用在HTTP应用层,所以七层的负载均衡只能跟Tomcat、PHP等Web服务做负载均衡。
可以根据请求的域名来做转发。比如请求者访问A域名,转发到后端A服务器;请求访问B域名,转发到后端B服务器。
可以根据请求的URL来做转发。比如请求者访问的URL包含A目录,就转发到A服务器;请求访问的URL包含B目录,就转发到B服务器。
可以根据请求的浏览器类型来做转发。比如请求者使用的浏览器类型是Chrome,就转发到A服务器;请求者使用的浏览器类型是Firefox,就转发到B服务器。
云端负载均衡选择
在云端实践中,对负载均衡的选择肯定优先采用云厂商提供的SLB或者主流硬件负载均衡厂商在云中提供的软负载均衡产品(性能会更出色功能更丰富)。
在具体实际应用中,若对七层有Rewrite的需求,或者对四层有更多调度算法等的需求,这时候SLB的功能暂时达不到要求,可能需要在ECS上搭建Nginx/HAProxy四层/七层负载均衡。
但在云端实践中,SLB的四层/七层基本上满足日常80%的需求。所以云端负载均衡的选型,基本上也就是云端负载均衡SLB的选型。
在TCP类服务中,对于负载均衡,我们只能选择四层负载均衡。
在HTTP类的Web服务中,既能选择四层也能选择七层。这事实上,在80%的企业级HTTP负载均衡应用中,只有单纯转发的功能,没有对虚拟主机的转发需求。所以这里优先选四层因为四层在性能方面更加强悍,在应用入口采用四层负载均衡进行分流是标准且成熟的企业级架构。
如果需要前端SLB挂证书SSL,也就是HTTPS,那么只能选择七层负载均衡。若有高流量高并发的场景还是建议前端采用四层负载均衡,证书放在后端ECS中的Nginx进行配置,这样可以保证性能。
以上是关于#yyds干货盘点#Nginx/HAProxy负载均衡原理及应用场景的主要内容,如果未能解决你的问题,请参考以下文章
#yyds干货盘点# springcloud整合ribbon实现服务负载均衡