在针对我使用基于 Linux 的软件来平衡两台服务器之间的流量所遇到的问题获得一些建议后。
基本上,我们有我们的生产网站和备份系统(在远程站点)。生产被不断地镜像到备份以保持它们同步。我们的域名指向 Linux Ubuntu 9.04 服务器(全新安装,除负载平衡软件外没有任何其他内容)。它运行的是最新版本的 Crossroads(又名 XR)。
XR 设置为将所有连接转交给实时网络服务器,直到它与该服务器失去“心跳”连接,一旦发生这种情况,它就会将连接反弹到我们的备份系统。
我遇到的问题表现为我们的 Web 服务器缺乏响应,基本上,客户端将正确格式的 XML 消息传递给 .NET Web 服务,该服务对数据进行一些计算和更改,然后使用 XML 响应进行回复,但是客户端似乎从未收到响应。
我一直在使用 wireshark 来调查这个问题,似乎在响应过程中连接被切断或丢失(由于我缺乏使用 wireshark 的经验,所以不太确定)。
我一直在与 XR 软件的作者交谈,他们无法在软件本身中找到任何可以解释这种行为的原因或问题,并且相信这可能与我正在使用的 Linux 发行版或内核问题有关。
有人能帮助我解决这个问题吗,因为我们将在接下来的几周内上线这个系统,但这个问题阻碍了我们的进展。
我现在已经从 Ubuntu 转到 CentOS 4 并再次尝试,现在当我使用 wireshark 时我会从系统获得随机回复。有时我会从服务器获得完整的 XMl 回复,而下一次尝试时我可能只会在 Linux 机器发送 RST 数据包之前收到部分回复。
答案1
可能不是最有用的答案,但你试过其他负载均衡器吗?我只能建议你这么做,因为你已经 6 天多没有收到回复了 :-)
类似 HAproxy(http://haproxy.1wt.eu)非常好,并且不需要大量设置即可执行大多数任务,这是一个示例站点配置:
listen corporate_web_live
bind 1.2.3.4:80 # www.site.com
bind 1.2.3.5:80 # www.site.net
option httpchk HEAD /server.txt HTTP/1.0
cookie HAPSRV insert postonly indirect
server webapp-corp-1 10.0.0.1:80 weight 50 maxconn 150 slowstart 30s cookie WAC1 check
server webapp-corp-2 10.0.0.2:80 weight 50 maxconn 150 slowstart 30s cookie WAC2 check
它是由 Willy Tarreau 编写的,他维护着 Linux 2.4 内核树,并且一直在基准测试中处理相对常见的硬件上 10Gbps 以上的吞吐量。使用 Apache + mod_ssl 处理 SSL 终止或者stunnel 也很有可能。
在处理 HTTP 流量时,它还可以执行一些非常时髦的 Layer7 操作,并且它还支持平衡其他协议,SMTP 支持对我来说非常有用!
答案2
好的,事实证明这与操作系统完全无关,而是我使用的软件(xr 又名 Crossroads)的问题。在配置 xml 文件中输入一些超时值(感谢软件作者的建议),这似乎解决了这个问题。
这是您需要在 # 符号之间添加到配置文件中的条目的示例,给出的超时时间有点过长( 1 分钟)
<service>
<name>web_http</name>
<server>
<address>x.x.x.x:80</address>
<type>tcp</type>
<dispatchmode>first-available</dispatchmode>
#
<clienttimeout>60:60</clienttimeout>
<backendtimeout>60:60</backendtimeout>
#
</server>
<backend>
<address>x.x.x.x:80</address>
</backend>
<backend>
<address>x.x.x.x:80</address>
</backend>
<backend>
<address>x.x.x.x:80</address>
</backend>
</service>