• 三角指的是哪三个东西?
    1.客户端     2.AD负载均衡    3.服务器
  • 应用场景:
     客户端需要在服务器看到真实IP且服务器网关不能指向负载均衡设备
  • 以下是正常环境下的数据流向示范,以单臂旁路方式进行举例,:

交换机做负载均衡 三层交换机 负载均衡_客户端

假设客户端的IP和端口为 172.16.0.1:8000,负载均衡设备的虚拟IP(VIP)为 10.0.0.1:80,设备自身的NSIP为10.0.0.100,服务器 10.0.0.2:80的默认网关指向3层交换机的接口地址10.0.0.254。

由上图可以看出,当客户端请求通过三层交换机到达负载均衡设备虚IP 10.0.0.1:80时,负载均衡设备将会对请求中的目标IP 10.0.0.1:80转换为 10.0.0.2:80,并将请求发送给服务器。此时请求中的IP仍然为客户端IP 172.16.0.1:8000,这样服务器收到请求后查看到请求中的源IP为客户端,这样将会应答直接从默认网关10.0.0.254发出,发回客户端。

至此会发生什么问题呢?
客户端发送的请求中源IP为自身,目的IP为负载均衡器上的虚拟IP

但是客户端通过三层交换机默认网关接收到的应答中,源IP为真实服务器IP,目标IP为客户端,这样客户端与服务器是无法建立通信的。

为了解决这个问题,此时有两种方法:

  1. 将服务器的默认网关配置为负载均衡器的接口地址
  2. 在负载均衡器分发请求的过程中改变请求包中的源IP,此方法也成为SNAT(Source Network Address Translation,源网络地址转换)

以上两种方法互斥,两者选其一

以下按照第2种方法进行举例,如图所示:

交换机做负载均衡 三层交换机 负载均衡_IP_02

由于负载均衡器配置了SNAT,在接收到请求包时,会将源IP改为自己的NSIP  10.0.0.100,这样在客户端接收到请求包后,会将应答包返回给负载均衡器,然后负载均衡器再次对应答包中的源IP进行修改,修改为自身的虚拟IP(VIP)10.0.0.1,再将应答包返回给客户端。这个过程最后就是:

客户端发出的请求中:源IP为172.16.0.1,目标IP为10.0.0.1(负载均衡设备上的虚拟VIP)

客户端接收到的应答中:源IP为虚拟VIP 10.0.0.1,目标IP为172.16.0.1

这样双方就可以建立通信

但是我们会发现请求包与应答包都需要从负载均衡器进行转发,有什么办法可以提高传输效率呢?会不会有一种让请求经过负载均衡器,而服务的响应无须从负载均衡器原路返回的工作模式呢?有啊,上面的第一张图,如图!

交换机做负载均衡 三层交换机 负载均衡_网络_03

整个请求、转发、响应的链路形成一个“三角关系”

不对,上面不是已经分析过了吗,这种模式由于请求包与应答包中的源IP和目的IP对不上号,所以无法建立通信,为什么这里又要搬出来呢?

唯一的区别在于,服务器在发送响应客户端的请求的应答的时候,源IP采用的是10.0.0.1,而非第一张图中的自己的接口ip10.0.0.2。这个时候,客户端收到的应答,源ip就成了10.0.0.1:80,目标IP为172.16.0.1:8000,所以连接成功建立。这种成功建立的方式,像一个三角形,所以称为三角传输。

总结一下,就是在服务器上配置Loopback的IP为负载均衡器上的虚拟IP(VIP)同时负载均衡设备在转发请求的时候不改变请求的源和目标IP,这样应答包中的源IP就是请求包中的目的IP