zllbirdonland 2020-01-11
四层:IP+PORT转发 七层:协议+内容交换
在四层负载设备中,把client发送的报文目标地址(原来是负载均衡设备的IP地址),根据均衡设备设置的选择web服务器的规则选择对应的web服务器IP地址,这样client就可以直接跟此服务器建立TCP连接并发送数据。
七层负载均衡服务器起了一个反向代理服务器的作用,服务器建立一次TCP连接要三次握手,而client要访问webserver要先与七层负载设备进行三次握手后建立TCP连接,把要访问的报文信息发送给七层负载均衡;然后七层负载均衡再根据设置的均衡规则选择特定的webserver,然后通过三次握手与此台webserver建立TCP连接,然后webserver把需要的数据发送给七层负载均衡设备,负载均衡设备再把数据发送给client;所以,七层负载均衡设备起到了代理服务器的作用。
七层:会将请求报文拆开至应用层,分析用户请求的资源,然后haproxy会代替用户请求后端服务器的资源;后端服务器把资源返还给haproxy,haproxy会对资源再次 进行封装,然后返还给客户端;七层代理是由haproxy进行处理的,并且需要建立两次TCP连接,一次是客户端,一次是后端的服务器。 四层:会把请求报文拆开至传输层,根据请求的服务器的IP加端口号进行转发;四层代理是由后端服务器进行处理,包括报文的封装都是后端服务器进行封装;四层代 理相当于是一个路由器。
当用户访问一个网站的域名时,DNS会把域名解析成公网IP,并且会把用户的报文进行封装,因为是跨网络,会把报文的目标地址指为要访问网站的公网IP,源地址为客户端的IP地址,路由器先会对用户请求的IP做与运算,发现不在同一个网段,所以会把报文进行转发,指定路由器的下一跳的地址,请求的过程中会经过多个路由器,最终到达网站的IP(企业防火墙上的公网IP);最终目标的IP地址就为网站的公网IP,访问到防火墙上的公网IP后,会把报文再次转发,源地址就为企业的内网地址,目标地址就为haproxy所对应的IP地址,然后会基于haproxy是四层负载还是七层负载来决定;如果是四层负载,则haproxy会根据调度算法,把用户的请求调度到一台后端的webserver上,报文的源地址就为haproxy的地址,目标地址为webserver的地址(修改源地址和目标地址是为了回复报文准确的返还给haproxy,防止发送给别的服务器);如果haproxy是七层负载,则haproxy会再次通过TCP三次握手,与后端的webserver建立连接,而不是作为转发。
oxy四层负载的区别
LVS:LVS的DR模式,做四层负载时,是不能做端口映射的;因为LVS的DR模式,报文传递过程中,是不会修改用户的源地址和目标地址的(LVS的RD模式是通过一次次的修改mac地址来实现的),用户请求的是80端口,并且回复报文是不会经过LVS的,所以无法把端口映射回80端口;webserver指定的网关是企业内部交换机的网关,而不是LVS的地址,所以不经过LVS,就无法把端口再映射回80端口;回复报文源地址的端口如果不是80端口,报文是不会被接收的;但LVS的压力也因此少了一半,所以LVS的四层负载性能优于haproxy。 haproxy:haproxy的四层负载,回复报文也是要经过haproxy的,所以支持端口映射,但是haproxy的压力也将变大,所以haproxy的四层负载能力低于LVS;haproxy 为了保证数据报文准确的返还,不会乱发给其他服务器,会修改报文的源地址为haproxy的地址,目标地址为webserver的地址;LVS的nat模式是不会修改用户 请求的源地址的,因为后端webserver的网关指定的是LVS的地址,并且在LVS上配置了IPVS规则。 小提示:当访问一个网站时,假设加载一个页面需要发送500个请求,这500个请求会根据haproxy的调度算法,分别调度到不同的后端服务器上,而不是把500个请求都 调度到一台服务器上。
前言:在涉及到对外项目,经手许多小中型网站的架构,F5、LVS及Nginx都比较多,我想一种比较通俗易懂的语气跟大家说明下何谓负载均衡,何谓Linux集群,帮助大家走出这个误区,真正意义上来理解它们。