Cra*_*ide 1 networking linux centos
奇怪的问题。我在达拉斯有服务器“ALPHA”和在香港有服务器“BETA”,彼此相距大约 195 毫秒的 ping 时间。ALPHA 以 1gbps 满载连接,BETA 以 10mbps 满载连接。有时,当它们通过 TCP 相互通信时,连接会挂起。最终 ALPHA 放弃并关闭连接,但 BETA 仍将连接视为已建立并等待很长时间,直到最终超时。
例子。
在测试版中, wget -O /dev/null ALPHA:50001/1mb.test
--2013-05-19 02:45:54-- http://ALPHA:50001/1mb.test Resolving dfw... ip.address.redacted Connecting to ALPHA|ip.address.redacted|:50001... connected. HTTP request sent, awaiting response... 200 OK Length: 1000000 (977K)
[application/octet-stream] Saving to: `/dev/null'
Run Code Online (Sandbox Code Playgroud)
它在收到 0 字节时冻结。请注意,它确实从服务器获得了 200 OK,因此它们似乎确实成功握手。为了消除 wget 作为问题的一部分,我做了一个 telnet:
telnet ALPHA 50001
Trying ip.address.redacted...
Connected to ALPHA.
Escape character is '^]'.
GET /1mb.test HTTP/1.0
HTTP/1.1 200 OK
Server: nginx
Date: Sun, 19 May 2013 22:43:48 GMT
Content-Type: application/octet-stream
Content-Length: 1000000
Last-Modified: Sat, 21 Jan 2012 21:47:29 GMT
Connection: close
ETag: "4f1b3271-f4240"
Accept-Ranges: bytes
Run Code Online (Sandbox Code Playgroud)
在这一点上它也冻结了。
两台服务器都有 iptables 规则 -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
这是在上述 wget 冻结期间在 ALPHA 上运行的 tcpdump。 http://pastebin.com/axX7ap6T
这个问题只是偶尔发生。有时它工作得很好。实际上,如果我运行大约 3-5 个 wget,通常在第四次或第五次尝试时一切都会开始工作。
BETA 可以毫无问题地与 GAMMA、DELTA 和我的其他服务器通信。似乎只有在与 ALPHA 交谈时才会发生。ICMP ping 显示没有数据包丢失,但即使有数据包丢失,它也会减慢速度,而不是断开连接。两台机器都有相同的 CentOS 6.4 64 位操作系统,内核 2.6.32-358.6.2.el6.x86_64。没有任何有用的登录 /var/log 文件。ALPHA 正在使用 nginx-1.4.1-1.el6.ngx.x86_64 监听 50001。nginx 访问日志文件显示在冻结连接期间传送了 200(请求正常)43440 字节。
问题似乎与 nginx 无关,因为我有一个 ssh 连接也在同一天的通信中间冻结。其他服务器连接到该 nginx 并且从未出现任何问题。
总之,这似乎是这个特定通信中发生的事情:
BETA -> ALPHA "SYN!"
ALPHA -> BETA "SYN Acknowledgement"
BETA -> ALPHA "ACK"
ALPHA -> BETA "Established"
BETA -> ALPHA "GET /file HTTP/1.0"
ALPHA -> BETA "200 OK, here's a bunch of data"
BETA freezes, gets no data.
Run Code Online (Sandbox Code Playgroud)
有人见过这样的情况吗?
| 归档时间: |
|
| 查看次数: |
5681 次 |
| 最近记录: |