我们最近实现了HAProxy for stackoverflow.com。 我们决定使用TProxy来维护连接客户端的源地址,所以我们的日志和依赖于客户端IP地址的其他IIS模块不需要修改。 因此,数据包仿冒来自外部互联网IP地址,实际上它们来自本地networking上的本地192.168.xx HAProxy IP。
我们的两台networking服务器都有两个网卡 – 公共互联网上的一个具有静态IP,DNS和默认网关的可路由B类地址,以及一个configuration了默认网关的私有不可路由C类地址,指向HAProxy的专用IP。 HAProxy有两个接口 – 一个公共接口和一个私有接口,负责在接口之间透明地路由数据包,并将stream量引导至相应的Web服务器。
以太网适配器Internet: 说明。 。 。 。 。 。 。 。 。 。 。 :网卡#1 DHCP已启用。 。 。 。 。 。 。 。 。 。 。 :没有 自动configuration已启用。 。 。 。 :是的 IPv4地址。 。 。 。 。 。 。 。 。 。 。 :69.59.196.217(优选) 子网掩码 。 。 。 。 。 。 。 。 。 。 。 :255.255.255.240 默认网关 。 。 。 。 。 。 。 。 。 :69.59.196.209 DNS服务器。 。 。 。 。 。 。 。 。 。 。 :208.67.222.222 208.67.220.220 NetBIOS over Tcpip。 。 。 。 。 。 。 。 :启用 以太网适配器专用本地 说明。 。 。 。 。 。 。 。 。 。 。 :网卡#2 DHCP已启用。 。 。 。 。 。 。 。 。 。 。 :没有 自动configuration已启用。 。 。 。 :是的 IPv4地址。 。 。 。 。 。 。 。 。 。 。 :192.168.0.2(首选) 子网掩码 。 。 。 。 。 。 。 。 。 。 。 :255.255.255.0 默认网关 。 。 。 。 。 。 。 。 。 :192.168.0.50 NetBIOS over Tcpip。 。 。 。 。 。 。 。 :启用
我们禁用了每个Web服务器上的自动度量标准,并为可路由的公共类B分配了10的度量标准,我们的私有接口的度量标准为20。
我们还设置了这两个registry项:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters] "DeadGWDetectDefault"=dword:00000000 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters] "EnableDeadGWDetect"=dword:00000000
大约每天两次,我们看到一个问题,其中一个networking服务器无法联系DNS或连接到公共互联网上的任何其他服务器。
我们怀疑死亡网关检测是错误地检测到公共网关中断,并将所有stream量切换到此时没有DNS访问的专用网关,但无法validation这一点。
有没有办法知道死亡网关检测是否运行,甚至在Windows 2008服务器的选项?
如果是这样,有没有办法在Windows 2008服务器中禁用死亡网关检测?
如果没有,还有其他原因,我们失去了解决DNS或短时间连接的能力?
那些死网关检测DWORD在Windows Server 2008上是无用的。它们存在的唯一原因是出于兼容性原因。 TCP / IP驱动程序和Windows路由器组件不再查找这些值。
我怀疑这个function是在Windows Vista中推出的Auto-Tuning。 尝试在提升的命令提示符下执行以下操作(并重新启动):
netsh int tcp set global autotuninglevel = disabled
更新( 2009年9月13日美国东部时间7:58PM增加 )
如果这不起作用,我们将需要更多的诊断输出。 使用NetConnection或LANscheme启动(循环)跟踪,让它继续运行,直到问题发生。
netsh trace start scenario = NetConnection maxSize = 512
(例如:启动NetConnection跟踪scheme,最大跟踪日志大小为512MB)
您可以在networking监视器3.3中打开生成的跟踪,只要确保安装了最新的parsing器 。
我们无法得出确切的结果,为什么我们无法控制死网关检测的行为。
我们没有花费大量的时间解决这个问题,而是select使HAProxy实例将stream量路由到出站网关,并将两个Web服务器默认网关设置为haproxy的IP,并删除内部网关地址。
[ soweb1 ] 69.59.196.220, GW=69.59.196.211 [haproxy] | +---- [haproxy] 69.59.196.211, GW 69.59.196.209 | [ gw ] 69.59.196.209
现在只有一个默认网关可以消除我们的问题,因为不再使用缺省网关检测。
我会质疑为什么你甚至需要将默认网关改为HAproxy。 一般来说,除非您指向高度可用的N + 1设置,否则网关IP可能会在发生故障时将故障切换到另一台路由器/机器,因此一般不应该更改默认网关。 如果您的HAproxy机器发生了问题,并且您没有任何带外访问,那么Web服务器将会从互联网上下载。
因为我相信你可能会这样做的原因是因为你在你的设置中使用Tproxy来使客户IP地址出现在你的日志而不是代理服务器的IP,我build议你这样做
我没有一个Windows机器来testing这个,但我相信它应该会导致所需的效果,而不会造成不必要的连接性损失。
当涉及到互联网访问(通常)时,默认网关应该只被用来表示到INTERNET的path。 如果定义了多个默认网关,则OS路由器不能决定使用哪一个,如果一个默认网关指向一个通路(例如,您的多网段LAN),那么在那里转发到Internet的数据包是不打算做。