galera 集群在 hyperV 上慢(在 ESX 上更快)
內聯解決方案
我們遇到了一個奇怪的問題,現在基本上沒有想法:
我們為客戶設置了一個 galera 集群(3 個節點 + MaxScale LB),他報告速度很慢。我們無法確定問題,因此我們設置了一個測試場景以深入探勘:
- 我們將完整的集群 + 應用程序伺服器複製到一個單獨的子網中,以防止目前使用者的任何干擾
- 我們設法重現了緩慢:操作大約 10 秒
- 為了減少變數,我們在其中一個集群節點上安裝了應用程序,以允許我們使用 db 連接到 localhost 進行測試
經過廣泛的測試、調整和研究,我們決定在 VmWare ESX 上嘗試相同的設置。所以我們將集群+應用程序遷移到 ESX 並進行了完全相同的測試 - 結果很奇怪……
從那裡我們做了以下測試:
我們嘗試的結果沒有任何實際變化:
將所有集群節點移動到相同的硬體上
在循環和讀寫拆分之間切換 maxscale
應用各種 mariadb/galera 設置
在 hyperV 中應用了各種設置
以下設置:
- HyperV Windows 伺服器 2019
- Ubuntu 20.04 上的 MariaDb
- 全快閃記憶體高畫質
- 16GB 光纖通道
- 間網卡
- 主機(實際上是虛擬機)上的負載可以忽略不計
我們完全被難住了,因為我們無法解釋為什麼 hyperV 和 ESX 之間的時序差異如此之大。我們認為它一定是網路 IO,但無法確定哪個設置有問題。
從數字/測試中,我們可以斷定哪些部分沒有故障:
- HD/IO:因為每次添加“網路”節點時性能都會急劇下降
- CPU:這些數字是可重現的,我們在沒有任何其他負載的虛擬機上進行了測試
- 慢速數據庫查詢:因為數字會根據我們是直接連接到集群節點之一還是使用本地主機而改變 - 可以排除
任何人都可以給我們指點,我們可以嘗試什麼或如何加速hyperv?還是我們搞砸了一些 galera/maxscale 設置?
編輯:我們檢查了壞段並發現(netstat -s | grep 段):
解決方案
多虧了 Mircea 的投入,我們終於在 hyperV 上獲得了大幅下降的數字。
以下配置更改有幫助:
- 釋放預設 Windows 綁定
- 啟動 SET 團隊
- 在 SET 團隊上啟動:RDMA 和巨型幀
有了這個,hyperV 上的數字基本上等同於 ESX
對於 VM,請確保安裝準虛擬化驅動程序(Hyper-V 來賓集成和 VMWare 工具)。執行網路綜合基準測試。監控路徑上的所有設備(交換機、路由器、管理程序、虛擬機)的 CPU、網路計數器、中斷、上下文切換……
在應用程序基準測試期間擷取流量。檢查幀大小、TCP 視窗大小、TCP 流中丟棄的數據包、SYN、SYN/ACK、ACK TCP 握手之間的延遲,並與 SQL“ping”查詢等應用程序延遲進行比較:SELECT 1 FROM DUAL; 在應用程序基準測試期間監控 CPU、網路、磁碟 I/O。
在虛擬機和裸機上執行基準測試。
其他一些文獻:USE 方法(Utilization Saturation and Errors)和TSA 方法(執行緒狀態分析)
監控工具會影響性能。檢查它們的使用情況(CPU、網路和磁碟 I/O)。負載測試實用程序也在使用資源。確保正在進行負載測試的工作站未飽和。