什么是负载均衡(SLB)
SLB(服务器负载均衡):在多个提供相同服务的服务器的情况下,负载均衡设备存在虚拟服务地址,当大量客户端从外部访问虚拟服务IP地址时,负载均衡设备将这些报文请求根据负载均衡算法,将流量均衡的分配给后台服务器以平衡各个服务器的负载压力,避免在还有服务器压力较小情况下其他服务达到性能临界点出现运行缓慢甚至宕机情况,从而提高服务效率和质量,因此对客户端而言,RS(real server 实际服务器)的IP地址即是负载均衡设备VIP(虚拟服务地址IP)地址,真正的RS服务器IP地址对于客户端是不可见的。
SLB的三种传输模式
反向代理模式
当负载均衡设备收到客户端请求后,会记录下此报文( 源IP地址、目的IP地址、协议号、源端口、目的端口,服务类型以及接口索引),将报文目的地址更改为优选后的RS设备的IP地址,目的端口号不变,源地址修改为负载均衡设备下行与对应RS设备接口的IP地址,源端口号随机发送给RS;当RS收到报文后,会以源为RS接口IP地址,目的IP设备地址回复给负载均衡设备,负载均衡设备将源修改为VIP,目的端口号修改为客户端的源端口号,目的IP修改为Client的源IP回复报文。
总结:即SLB(负载均衡服务器)和RS(实际服务器)都会使用本身的IP来替换请求里面的client(客户端)IP
透传模式
当负载均衡设备工作在透传模式中时,RS无法感知到负载均衡设备的存在,对于Client来说,RS的IP地址就是负载均衡设备的VIP地址。在这种模式下,当负载均衡设备收到源为Client的IP,目的IP为本地VIP地址的报文时,会将报文根据负载均衡策略和健康状况发送给最优的RS设备上,继而RS设备会收到目的为本地IP,源为Client实际IP的请求报文;然后RS将会直接回应此请求,报文的目的IP地址为Client的IP地址,当负载均衡设备收到此报文后,将源IP地址修改为VIP地址,然后将报文发送给Client。
总结:即SLB(负载均衡服务器)不会使用自身的IP来替换client(客户端)IP,所以RS拿到的IP是客户端的真实IP,RS返回给SLB之后,SLB会使用自身IP来替换RS的IP,所以客户端拿到的IP并不是RS的真实IP,而是负载均衡的IP
三角模式
在三角模式下,当客户端发送请求到负载设备上时,负载均衡设备会计算出最优RS,然后直接根据MAC地址将报文转发给RS,在RS上配置报文的源IP为VIP地址(一般配置在loopback口上),因此在这种情况下,RS会直接将报文发送给Client,即使回复报文经过负载均衡设备,此设备不做任何处理。由于报文在整个过程中传输途径类似于三角形,因此称之为三角模式。
注意:在三角模式环境中,由于RS的Loopback口和负载均衡设备上存在着相同的VIP地址(个人理解:因为A服务器发送给B,B服务器又转给C,C直接回复A,A是不会认的,所以要C和B一样,A才会认),当负载均衡设备经过负载均衡算法选择出对应的RS后,会根据实际配置的RS的IP地址对应的mac地址,将报文以目的mac为RS,目的IP为VIP的方式建立TCP连接。
总结:与透传模式类似,不同的是RS返回的时候不经过SLB(即使经过SLB也不做任何处理),而是直接返回给Client.所以通讯过程类似于一个三角形。
总结
由于反向代理模式中在RS侧只能收到源为负载均衡设备IP的报文,因此可以使用防火墙增加安全性,只允许源IP为负载均衡设备的IP地址的报文通过,同时增加X-Forwarded-For字段也可以让RS只允许有此字段的报文进行访问,因此安全性相对较高。
转自:https://www.daimajiaoliu.com/daima/479707da29003e0
本文部分内容来自:https://www.zhihu.com/question/20553431