![我的 CentOS VM 中某些东西正在关闭连接 - 如何最好地进行故障排除?](https://linux22.com/image/769228/%E6%88%91%E7%9A%84%20CentOS%20VM%20%E4%B8%AD%E6%9F%90%E4%BA%9B%E4%B8%9C%E8%A5%BF%E6%AD%A3%E5%9C%A8%E5%85%B3%E9%97%AD%E8%BF%9E%E6%8E%A5%20-%20%E5%A6%82%E4%BD%95%E6%9C%80%E5%A5%BD%E5%9C%B0%E8%BF%9B%E8%A1%8C%E6%95%85%E9%9A%9C%E6%8E%92%E9%99%A4%EF%BC%9F.png)
我有一个包含 3 个虚拟机的设置(1 个 CentOS6 上的应用程序服务器和 2 个 CentOS7 上的数据库服务器)。最近 1-2 周,我们在连接数据库服务器(以及集群中的两台服务器之间)时遇到了超时问题。
数据库提供商(Couchbase)可以从日志中看到连接被强制关闭:
WARN com.couchbase.endpoint - [com.couchbase.endpoint][UnexpectedEndpointDisconnectedEvent] The remote side disconnected the endpoint unexpectedly
日志还显示包被丢弃,例如:
[warn] Interface ‘ens32’ (removedip) failures: RX:2863 / TX:0 - Details:
- RX packets:308,593,167 errors:0
dropped:2,863 overruns:0 frame:0
这些虚拟机托管在同一台主机上,即 VMware ESXi(版本 6.5)。因此它们应该能够彼此建立良好的联系。
过去几周发生了什么变化?虚拟机操作系统和数据库服务器版本的安全更新(从 6.6.0 到 7.0.0)。数据库升级不应该改变网络中的任何内容,但显然这是我首先联系数据库提供商的原因......
如果您能提供任何有助于找到罪魁祸首的想法,我们将不胜感激:-)
编辑:
根据 Camerons 的建议,我只是运行了一个简短的网络跟踪,并将其加载到本地计算机上的 Wireshark 中。然后我打开“专家信息”,得到了以下内容:
我需要说明的是,在应用服务器前面有一个 Nginx 代理服务器。它处理 SSL 并在到达应用服务器之前“将其解除”。仅查看信息,我预计两个“红色”块与来自外部的请求有关 - 而不是从应用服务器到数据库服务器的请求。
但我真的不确定在结果中要寻找什么? - 我想我需要让它运行更长时间 - 但也许没有来自外部的信息?
编辑2
当我坐下来看着它时,问题确实出现了...... - 所以我很快再次启动了 tcpdump。因此结果可能不包含根本原因 - 但应该比第一个更相关:
我扩展的块似乎与与其中一个数据库服务器的通信有关......:-)
但是这些结果意味着什么以及我如何才能更接近找到原因?
答案1
欢迎来到 Server Fault。
考虑到 CentOS 6 的年限,现在已不再受支持,您很可能遇到了 SSL/TLS 不兼容问题;当然,前提是您通过它进行连接。在使用 RHEL6 期间,我们确实经历过很多这样的事件,因为 SSL2 等在默认情况下逐渐被禁用。Java 的各种版本也存在类似问题(1.7 系列中的某些版本特别难以驾驭)
另一个可能的原因是,由于您正在 ESXi 上运行 CentOS 工作负载,因此您可能在熵不足的情况下运行,这会导致阻塞行为,从而导致超时和集群问题,从而导致连接中止。在 Java 8 的某个版本中,Java 特别容易受到此影响。您可以通过查看 /proc/sys/kernel/random/entropy_avail 随时间的变化来判断这是否是您的一大问题;如果它低于 128 左右并且没有反弹,则说明您存在熵不足。在没有键盘鼠标活动的虚拟机上很常见;如果是这种情况,您可以尝试运行熵收集守护进程。
顺便说一句,我不会从这些日志中得出结论说有其他东西正在主动强制关闭这些连接;只是连接在一方没有预料到的时候关闭了。这可能是由于超时、异常、进程崩溃等原因造成的。
您说数据库服务器已升级……是从 CentOS 6 升级的操作系统吗?应用程序是否也升级了,还是直接迁移了?
干杯,卡梅伦