HAProxy - 2 節點設置中的負載平衡 - 性能增益可能嗎?
我正在和我的老闆談論負載平衡 2 節點 Galera 集群,我們不確定是否有任何原因。
對於寫入,他的論點是,即使我們平衡寫入,它也必須寫入每個伺服器來進行複制。
對於讀取,我們可以平衡伺服器之間的讀取,但是如果現在一切都通過另一台伺服器上的單個 VM 進行,這真的會節省時間嗎?
我們有兩個專用的 SQL Server,它們處於 Active-Active Galera 設置中。
我能想到做一個 HA-Proxy 的唯一方法是在另一台伺服器上安裝第三台虛擬機,這真的值得通過這台虛擬機進行性能提升嗎?
是否有可能/將 HA-Proxy 放在 SQL Server 上並對讀取進行負載平衡是否有意義,但它仍然會通過帶 HA-Proxy 的主伺服器到達伺服器 B。
只是為這個簡單的設置尋找一些一般的想法和建議。
根據您的特定工作負載和體系結構,您對問題的評論有幾個不同的主題,並且有許多“IF”。讓我們從你是對的事情開始:
- 的確,Galera 本身不應該給你更好的寫入工作負載——它是一個無共享、非分片的集群,這意味著你將不得不在任何地方寫入。顯著提高寫入性能的唯一方法是您可以在多個節點之間共享寫入負載,而在您的情況下,您正在複製它們。事實上,由於它是無共享架構,您添加的伺服器越多,整體通常會越慢,因為最慢或更遠的伺服器將成為您複製的瓶頸。如果您需要寫入性能,galera 不適合您(它的吞吐量通常低於單個伺服器)。您通常設置 galera 以獲得高可用性(如果節點出現故障,數據和服務的生存能力),而不是更好的寫入性能。
有一些問題: * 我有一些客戶端聲稱寫入性能更好,可能是因為可怕的 SQL 查詢 + Galera 需要基於行的複制,在某些特殊情況下,您可以獲得一些收益(如果您執行 30 秒寫入但你只寫了幾條記錄,你會得到一些額外的可擴展性)。這通常非常罕見:您應該首先修復您的查詢,但我只是指出一個(非常)特定的異常。
您的問題的實質是,如果您在中間添加代理這一事實不值得您從負載平衡查詢中獲得改進。要回答這個問題,你需要說 6 件事:
- 您目前在客戶端和伺服器之間的平均往返時間是多少
- 客戶端和代理之間的平均往返時間是多少
- 代理和伺服器之間的平均往返時間是多少
- 代理處理時間的成本是多少
- 實際mysql查詢時間的本地延遲是多少
- 您的平均客戶負載如何?
這將告訴您是否出於性能原因對使用代理感興趣。
您可以使用 ping找出前 3個,通過分析操作可以找出後 3 個。通常,查詢時間比數據中心內的循環時間長得多,但這取決於您正在執行哪些查詢以及這些虛擬機的位置(物理上)有多遠。為了取消其中一些時間,人們將代理安裝在與客戶端相同的機器上,因此大部分成本都被取消了。此外,HAproxy 主要是一個 IP 代理,成本非常低。
現在,如果您的伺服器負載不是很大,您可能不會在延遲方面獲得任何優勢——查詢伺服器將使您的吞吐量翻倍——這是否對延遲有影響取決於您目前的負載。
使用代理通常有一個更重要的原因,即高可用性 - 使用 HAProxy 將允許您切換到輔助 galera 節點,以防活動節點自動關閉。它還將簡化手動切換。當然,代理本身也可能是單點故障。
我希望這可以幫助您做出決定——但最重要的建議是自己嘗試並衡量!
編輯:順便說一句,只有 2 個節點,我希望你使用 galera 作為複制解決方案,而不是作為集群(需要特殊配置)或使用 garbd,因為如果你不這樣做,並且一個節點宕機,第二個節點也會宕機也為了避免裂腦(沒有節點有 50%+ quorum)。