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

我是一名软件工程师,他在2周的多服务器托pipe环境中尝试检测(并尽可能解决)奇怪的本地networking问题。

我们从一家欧洲的托pipe公司购买了3个专用的32GB ram 8核心i7 CPU。 每个盒子有两个接口,一个用于外部通信,一个用于本地通信。 然后我们聘请系统工程师来设置我们的初始环境。 世界多么精彩。 一切都很好,直到部署..在下面的服务器上部署应用程序的问题开始:

服务器1(DB):32 GB,8核心,2个接口,仅运行2个服务:ubuntu上的mysql 5.5使用memcached的12.04 LTS 1.4.13-0ubuntu2

服务器2(www):32 GB,8核心,2接口,运行php5-fpm(v5.5),nginx 1.4.4&crontab在Ubuntu 12.04 LTS

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

部署后,我们发现我们的应用程序的批量索引过程非常缓慢。 在批量索引时,应用程序从数据库(从srv1)读取数据(在阶段没有最终用户stream量),处理它并生成更多的扩展数据,在memcached(srv1)上将新数据caching为多个块并在solr上build立索引。 我花了5-6天的时间在应用程序方面find任何可能的瓶颈或应用程序相关的问题,但没有发现。

当在服务器上运行我们的索引cron时,应用程序挂起,等待,有时抛出与memcached(NOT FOUND)有关的连接错误,但有时不成功,传递成功读取阶段并抛出与mysql连接有关的另一个连接exception。 DB正在运行,mysql.log中没有错误行。 Memcached启动并运行,没有错误日志事件非常详细(-vvv)日志logging打开。 我一次又一次地检查应用程序,循环中没有查询(查询已被优化),没有不必要的memcached连接 – 循环操作(我们在批量读取和写入时使用multi_get – multi_set方法)

然后我试图切换我的应用程序configuration使用我们的外部IP地址(120.144.XX),而不是使用本地(10.10.XX)和繁荣! 应用程序开始飞行。 问题和例外消失了,像风一样完美无缺。

我们的系统工程师们越来越多地在硬件和接线方面进行了深入探讨,并与数据中心进行了多次交谈,testing,再次testing,但最后一点是:“您的硬件和接线没问题,请检查您的networkingconfiguration和应用程序。

Sysengineer说,“在本地networking上configuration-ipv6是不必要的,所以我们可以在会议中完全closures”。 我不知道为什么。 对话之后,我不再提出任何问题。

几天后,我们公司又雇佣了另一个不喜欢ipv6的sysengineer,我感到非常惊讶。 我的第一个问题是,为什么两个sysengineers恨ipv6? ipv6的问题是什么?

我们的应用程序的主要问题是现在它与memcached和mysql使用外部IP地址交谈,我们想要使用本地networking。 它完美的外部IP的,但不是本地的。

我不知道问题在哪里,我不是一个系统或networking工程师,我不知道他们在系统中做了什么,但我相信有一个错误的迁移问题。 这两个sysengineers被否认没有错,但我想挖这更多。

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

[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) 

我现在应该去哪里find问题所在?

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

 [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 

这些输出是否正常?