如何在多服务器环境中检测和诊断本地网络问题?

如何在多服务器环境中检测和诊断本地网络问题?

我是一名软件工程师,两周以来一直在尝试在多服务器托管环境中检测(并尽可能解决)奇怪的本地网络问题。

我们从一家欧洲托管公司购买了 3 个专用盒子,配有 32GB 内存和 8 核 i7 CPU。每个盒子都有两个接口,一个用于外部流量,一个用于本地通信。然后我们聘请了一名系统工程师来设置我们的初始环境。多么美妙的世界。一切都很顺利,直到部署。在服务器上部署应用程序后,问题开始出现:

服务器 1(数据库):32 GB,8 核,2 个接口,仅运行 2 个服务:ubuntu 12.04 LTS 上的 mysql 5.5,带有 memcached 1.4.13-0ubuntu2

服务器 2 (www):32 GB,8 核,2 个接口,在 ubuntu 12.04 LTS 上运行 php5-fpm (v5.5)、nginx 1.4.4 和 crontab

服务器 3(Solr):32 GB,8 核,2 个接口,仅运行一项服务:在 ubuntu 12.04 LTS 上使用带有 Solr 4.5 的 Tomcat7,使用 memcached 1.4.13-0ubuntu2

部署后,我们发现应用程序的批量索引过程非常缓慢。批量索引时,应用程序从数据库(来自 srv1)读取数据(阶段中没有最终用户流量),处理数据并生成更多扩展数据,将新数据作为多个块缓存在 memcached(srv1)上并在 solr 上进行索引。我在应用程序方面花了 5-6 天以上的时间来查找任何可能的瓶颈或与应用程序相关的问题,但一无所获。

在服务器上运行我们的索引 cron 时,应用程序挂起、等待,有时会抛出与 memcached 相关的连接错误(未找到),但有时不会,成功通过读取阶段并抛出与 mysql 连接相关的另一个连接异常。Db 已启动并运行,mysql.log 中没有错误行。Memcached 已启动并运行,没有错误日志事件极其详细(-vvv)日志记录已打开。我一次又一次地检查应用程序,没有循环查询(查询经过充分优化),没有不必要的 memcached 连接 - 循环操作(我们在批量读取和写入时使用 multi_get - multi_set 方法)

然后我尝试切换应用程序配置,使用我们的外部 IP 地址 (120.144.XX),而不是使用本地 IP 地址 (10.10.XX),然后轰!应用程序开始飞速运行。问题和异常都消失了,运行起来像风一样完美。

我们的系统工程师对硬件/接线问题进行了深入研究,与数据中心进行了多次交流,进行了多次测试,但最终的结论是:“您的硬件和接线没有问题,请检查您的网络配置和应用程序。”

Sysengineer 在一次会议上告诉我“本地网络上的 -ipv6 配置是不必要的,所以我们可以完全关闭它”。我不知道为什么。在那次对话之后,我再也没有问任何问题。

几天后,我们公司又雇佣了一位讨厌 ipv6 的系统工程师,这让我很惊讶。我的第一个问题是,为什么这两个系统工程师都讨厌 ipv6?ipv6 的问题是什么?

我们的应用程序目前的主要问题是它使用外部 IP 地址与 memcached 和 mysql 通信,而我们想为此使用本地网络。它在外部 IP 上运行良好,但在本地 IP 上运行不佳。

我不知道问题出在哪里,我不是系统或网络工程师,我不知道他们在系统中做了什么,但我相信存在配置错误问题。两位系统工程师都否认没有问题,但我想进一步挖掘这一点。

我从哪里开始?什么是查找问题的适当工具?这些输出是否正常:

[email protected] ~ # ping6 google.com
PING google.com(fra02s20-in-x04.1e100.net) 56 data bytes
64 bytes from fra02s20-in-x04.1e100.net: icmp_seq=1 ttl=56 time=5.46 ms
64 bytes from fra02s20-in-x04.1e100.net: icmp_seq=2 ttl=56 time=5.43 ms
^C
--- google.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 5.432/5.447/5.462/0.015 ms
[email protected] ~ # ping6 10.10.10.3
unknown host
[email protected] ~ # ping6 10.10.10.1
unknown host
[email protected] ~ # ifconfig
eth0      Link encap:Ethernet  HWaddr d4:3d:7e:ec:f0:11  
          inet addr:144.XX.XX.XX  Bcast:144.XX.XX.XX  Mask:255.255.255.224
          inet6 addr: fe80::d63e:7efe:fedf:f011/64 Scope:Link
          inet6 addr: 2c01:4e8:200:7343::2/64 Scope:Global
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:3523880 errors:0 dropped:0 overruns:0 frame:0
          TX packets:7026713 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:1042946956 (1.0 GB)  TX bytes:9140153208 (9.1 GB)

eth0:1    Link encap:Ethernet  HWaddr d4:3d:7e:ec:f0:11  
          inet addr:144.XX.XX.XXX  Bcast:144.XX.XX.XX  Mask:255.255.255.224
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

eth1      Link encap:Ethernet  HWaddr 68:05:ca:06:68:a2  
          inet addr:10.10.10.4  Bcast:10.10.10.255  Mask:255.255.255.0
          inet6 addr:fde80::6c05:caff:fe26:57a2/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:47434 errors:0 dropped:986 overruns:0 frame:0
          TX packets:364069 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:7188468 (7.1 MB)  TX bytes:527053731 (527.0 MB)
          Interrupt:16 Memory:f7cc0000-f7ce0000 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:4765 errors:0 dropped:0 overruns:0 frame:0
          TX packets:4765 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:540280 (540.2 KB)  TX bytes:540280 (540.2 KB)

我现在应该去哪里查找问题出在哪里?

编辑 我认为这些输出也很有趣:

[email protected] # netstat -s | egrep -i 'loss|retrans|drop'
    1588 segments retransmited
    63 times recovered from packet loss by selective acknowledgements
    TCPLostRetransmit: 4
    9 timeouts in loss state
    375 fast retransmits
    46 forward retransmits
    519 retransmits in slow start
    1 SACK retransmits failed


[email protected] # netstat -s | egrep -i 'loss|retrans|drop'
    32 dropped because of missing route
    2290 segments retransmited
    2 SYNs to LISTEN sockets dropped
    150 times recovered from packet loss by selective acknowledgements
    TCPLostRetransmit: 5
    4 timeouts in loss state
    410 fast retransmits
    85 forward retransmits
    150 retransmits in slow start
    12 SACK retransmits failed

这些输出真的正常吗?

相关内容