我設定了 3 個虛擬機器(CentOS6 上有 1 個應用程式伺服器,CentOS7 上有 2 個資料庫伺服器)。過去 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)。所以他們應該能夠彼此建立良好的連結。
過去幾週發生了什麼變化? VM 作業系統和資料庫伺服器版本的安全性更新(從 6.6.0 到 7.0.0)。資料庫升級不應該更改網路中的任何內容,但這顯然是我第一次聯繫資料庫提供者的原因...
任何找到罪魁禍首的想法都非常感激:-)
編輯:
根據 Camerons 的建議,我只是運行了一個簡短的網路追蹤並將其加載到本地電腦上的 Wireshark 中。然後我打開“專家資訊”,得到了這個: 需要說的是,應用程式伺服器前面有一個Nginx代理伺服器。它會處理 SSL 並在點擊應用程式之前「將其解除」。伺服器.只需查看訊息,我預計這兩個“紅色”區塊與來自外部的請求相關,而不是來自應用程式。伺服器到資料庫伺服器。
但我不太確定在結果中尋找什麼? - 我想我需要讓它運行更長時間 - 但也許沒有來自外部的信息?
編輯2
當坐下來看著它時,問題實際上出現了...... - 所以我很快就再次啟動了 tcpdump。因此結果可能不包含根本原因 - 但應該比第一個更相關: 我擴展的區塊似乎與與其中一台資料庫伺服器的通訊有關...:-)
但這些結果意味著什麼以及我如何更接近找到原因?
答案1
歡迎來到伺服器故障。
鑑於年齡; CentOS 6 現在不再支持,您很可能會遇到 SSL/TLS 不相容的問題;當然假設您正在透過它進行連接。在使用 RHEL6 的過程中,我們確實經歷過許多此類事件,因為 SSL2 等在預設情況下逐漸被停用。與 Java 的各種單點版本類似(1.7 系列中的某些單點版本特別難以控制)
另一個可能的原因是,當您在 ESXi 上執行 CentOS 工作負載時,您可能會缺少熵,這會導致阻塞行為,從而導致逾時和叢集問題,從而導致連線中止。直到 Java 8 中的某個地方,Java 特別容易受到這種影響。您可以透過查看 /proc/sys/kernel/random/entropy_avail 隨著時間的推移來判斷這對您來說是否是一個問題;如果它低於 128 左右並且沒有反彈,那麼就出現了熵飢餓。在沒有鍵盤滑鼠活動的虛擬機器上很常見;如果是這種情況,您可以嘗試執行熵收集守護程式。
順便說一句,我不會從這些日誌中得出結論,認為其他東西正在主動強制關閉這些連接;只是連接在一方沒有預料到的時候關閉了。這可能是由於逾時、異常、進程崩潰等原因造成的。
你說資料庫伺服器升級了…是CentOS 6的作業系統升級嗎?應用程式是否也升級了,或者被提升和轉移了?
乾杯,卡梅倫