我最近问了一个关于多台服务器负载平衡选项的问题(TCP 非 http 流量,非常长时间运行的连接和非常一致的带宽速率):负载平衡长时间运行的 TCP 连接
在这篇文章中,我被引导到 LVS,并尝试了一下。设置很简单,而且几乎立即就能工作,唯一的问题是我只能使用 LVS-NAT(realservers 是 windows,我不想更改它们的配置)。问题是它会重写源 IP,因此如果客户端登录,我只会看到 NAT 后的 IP,而不是他的原始源 IP。这给我们带来了监管要求方面的问题,因为我需要为每个登录的客户端记录真实的源 IP。
其他人如何处理这个问题?
谢谢,
汤姆
答案1
您可能需要重新考虑您的 Windows 配置。我已在 Windows 中成功使用 LVS 进行直接路由。根据文档我的团队成员写道:
First install the Windows Loopback Adapter. Start > hdwwiz.exe Click Next then "Install the hardware that I manually select from a
列表(高级)
Scroll Down and click "Network Adapters" Choose Microsoft, then Microsoft Loopback Adapter Finish the Wizzard Go to Control Panel\Network and Internet\Network Connections. Rename
将适配器重命名为其描述性名称。右键单击环回适配器并手动为其分配 LVS VIP。
Go to Start > cmd.exe (right click and choose run as administrator) Run these Commands. netsh interface ipv4 set interface "Name of Adapter that holds the real
主机 IP”weakhostreceive=enabled netsh 接口 ipv4 设置接口“loopback”weakhostreceive=enabled netsh 接口 ipv4 设置接口“loopback”weakhostsend=enabled
这是一台 Windows 2008 服务器,最初使用此配置网站寻求指导。
就日志记录而言,通常唯一的解决方案是在客户端的真实 IP 仍然在路由中时利用日志记录。
对于 Web 流量, X_FORWARDED_FOR
可以使用环境变量。重点是,在某个点之后,网络层不能再依赖此信息。在这种情况下,您必须进一步向上移动堆栈以寻找潜在解决方案。
答案2
是的,直接路由是一个很好的解决方案,但为什么 NAT 模式会出现问题?默认情况下,具有内部和外部子网的 NAT 模式下的 LVS 是透明的,即服务器可以看到客户端源 IP,就像它是直接连接一样(就像防火墙一样)。我们的网站上有 NAT 模式下 LVS 的简短描述: 负载均衡方法(NAT模式)。顺便说一句,如果您摆弄 Windows 路由表,您甚至可以在单臂配置中进行 NAT.....
答案3
当 LVS 处于 NAT 模式时,LVS 盒必须是来自真实服务器的流量的默认网关,因为流量具有客户端的真实源 IP。我不知道如何让 LVS 在 NAT 模式下更改源 IP。您应该有一个带有两个网卡(双臂配置)的 LVS 盒,VIP 位于外部子网上,真实服务器的默认网关位于内部子网上。默认情况下,流量是透明 NAT 的,即当它出现在真实服务器上时,它看起来就像直接来自客户端源 IP 地址。您能给我看一下“ipvsadm -Ln”的转储吗?此外,在您连接到 VIP 转储“ipvsadm -Lnc”后,您可以准确地看到正在发生的事情。您确定您不是只在日志中看到“健康检查”条目吗?如果您使用 ldirectord 或 keepalive 进行健康检查,这些将来自负载平衡器 IP?