位于同一子网的服务器上托管的应用程序不能引用该子网的负载均衡器上托管的域名 (VIP)。
假设:服务器 A 和服务器 B 托管在同一个子网中。
托管在服务器 A 上的应用程序正在连接到 VIP(引用托管在服务器 B 上的应用程序)。
连接发起将从服务器 A 经由 VIP 到达服务器 B;然而,响应直接从服务器 B 返回到服务器 A。
服务器 A 将不会接受响应,因为它仅将原始请求发送给了 VIP。
问题:这是网络设置中的正常现象吗?建议的解决方案是为服务器 A 创建一个特殊的内部到子网 IP,以调用服务器 B 上的应用程序:我不喜欢这个解决方案,因为它会导致内部 IP 激增,管理起来很麻烦。
另一种选择是建立子网....
有什么想法或建议吗?
答案1
您正在执行 DSR(直接服务器返回)。为了使其正常工作,负载均衡器需要知道这一点,以便它只修改目标 MAC 地址,但保留数据包中的两个 IP 地址不变。此外,需要在负载均衡器后面的所有服务器的环回接口上配置 VIP,以便接受目标字段中带有 VIP 的传入数据包。除非绑定到 0.0.0.0,否则任何服务都需要配置为使用 VIP。一旦您准备好这些部分,一切都会正常工作,如下所示:
A 发送一个数据包,源端有自己的 IP 和 MAC,目标端有 VIP 和 LB 的 MAC。
LB 收到数据包后,将目标 MAC 地址从自己的 MAC 地址重写为某个平衡服务器的 MAC 地址,然后将其发送给 B。
B 收到数据包,看到有效的目标 IP(因为它是 VIP,并且在环回上有 VIP),将其交给服务处理。
服务发送答复,其中 VIP 和服务器 MAC 现在作为源,A 的 IP 和 MAC 作为目标。
数据包到达 A,A 将其识别为对原始请求的有效响应。
顺便说一句,你的标签完全错误,因为没有涉及路由。这主要是第 2 层技巧,第 3 层有一些配置修改。
参考:LB维基