原文地址:Group Replication and Percona XtraDB Cluster: Overview of Common Operations
在這篇博文中,我將概述使用 MySQL Group Replication 8.0.19(又稱 GR)和 Percona XtraDB Cluster 8 (PXC)(基于 Galera)時最常見的故障轉移場景和操作,并解釋每種技術如何處理每種情況。我使用單個主節點和三節點 PXC(均為默認設置)創建了一個具有群復制功能的三節點集群。我還將使用 ProxySQL 來連接這兩個集群。
在這兩個集群中,節點的名稱都是 mysql1、mysql2 和 mysql3。在組復制中,如果我們使用單主配置,主節點就是寫入的位置。在 PXC 中,我也將使用相同的術語,并將發送寫入內容的節點稱為 Primary 節點。但是,在 PXC 中實際沒有主節點的概念,所有節點都是平等的。
這是兩種解決方案的大致設置情況。
主服務器崩潰
組復制 - 寫
在此測試中,我只向群集發送寫查詢。當我殺死 GR 上的主服務器時,需要 5-15 秒來重組拓撲結構,ProxySQL 也需要 5-15 秒才能將寫入發送到新的主服務器。啟動舊的主服務器并將其添加回群集不會導致任何中斷。
組復制 - 讀取
如果我只向群集發送讀取查詢,主服務器崩潰會導致讀取中斷嗎?ProxySQL 會簡單地將流量重定向到其他節點。在重組期間,群集不會被阻塞。
Percona XtraDB 集群 - 寫入/讀取
在 PXC 中,讀取和寫入沒有區別,一旦某個節點崩潰/消失/分離,集群就必須重新創建集群視圖并檢查法定節點數。在此過程中,它不接受任何讀取或寫入。通常,這需要 3-10 秒的時間,在這段時間內,應用程序會受到影響。
刪除/添加節點
如果我們刪除或添加一個新節點,群集會如何運行?
組復制
在 GR 中,添加或刪除節點不會影響或導致應用程序中斷。如果我們使用克隆插件添加新節點,群集會將數據傳播到新節點。
Percona XtraDB 集群
刪除或添加節點不會導致任何中斷。同樣,就像在 GR 中一樣,當我們添加一個新節點時,它會執行 SST(狀態快照傳輸),從另一個節點獲取所有數據。
部分網絡故障
如果讀節點與主節點分離,但仍能看到其他節點,群集會發生什么情況?
在這種情況下,mysql2(主服務器)和 mysql3 之間出現了網絡中斷。
組復制
在上一篇博文《MySQL 組復制 - 部分網絡故障對性能的影響》中,我詳細解釋了這種特殊情況。基本上,部分網絡中斷會嚴重影響集群的寫入性能,從而導致應用程序問題或停機。
Percona XtraDB 集群
在 PXC 中,當集群重新創建集群視圖并開始將流量轉發到可以看到該服務器的節點時,會出現 3-5 秒的中斷。之后,它將繼續像以前一樣工作,不會對性能造成任何嚴重影響。
全面網絡隔離
現在,mysql3 與所有其他節點完全分離。
組復制
集群可以接受讀取和寫入,不會出現任何中斷,ProxySQL 會將讀取重定向到其他節點。
Percona XtraDB 集群
在 PXC 上,當集群意識到某個節點不可用時,會有 3-5 秒鐘的中斷,并會如上所述重新創建集群視圖。之后,它就可以處理讀取和寫入了。
應用未通過Proxysql訪問數據庫集群,直連數據庫節點
如果一個節點或部分節點分離,沒有法定節點數,但它們在同一網段中擁有應用服務器,仍可連接到數據庫服務器,會發生什么情況?
組復制
分離的節點仍將接受讀取流量,因此應用程序可以根據過時的數據做出決策。這是默認設置,但你可以使用名為 group_replication_exit_state_action 的變量進行配置。
Percona XtraDB 集群
在 PXC 中,如果一個節點被分離,它將不會接受任何讀取或寫入。優先級是數據一致性,只有擁有法定節點數的部分才會接受任何讀寫。
更改主服務器
組復制
如果要使用新的主節點,必須將一個讀節點提升為新的主節點:
MySQL mysql2:3306 ssl JS > cluster.setPrimaryInstance("mysql2:3306")
ProxySQL 會跟隨更改,但在集群重組時會造成幾秒鐘的中斷。
Percona XtraDB 集群
PXC 上沒有 Primary 的概念,任何節點都可以隨時寫入,因此我們只需將流量重定向到負載平衡器中的另一個節點(即:ProxySQL)。PXC 中還有一個 pxc_maint_mode
變量。將其更改為 MAINTENANCE
會軟移除節點上的連接,即使該節點是主節點,但 ProxySQL Native Galera 支持較差。我建議使用尊重該變量的 1.4 調度器。
總結
Group Replication | Percona XtraDB Cluster | |
---|---|---|
主服務器崩潰 | 中斷5-15s | 中斷5-10s |
讀服務器崩潰 | 無影響 | 中斷3-5s |
添加節點 | 無影響 | 無影響 |
刪除節點 | 無影響 | 無影響 |
部分網絡故障 | 影響性能較多 | 中斷 3-5 秒,性能低于正常水平 |
全面網絡隔離 | 無影響 | 中斷3-5s |
更改主 | 中斷1-3s | 對集群沒影響 |
如果讀節點宕機或分離,組復制的影響較小。在 PXC 中,由于所有節點都是相同的,因此沒有專用的主節點;如果任何節點發生任何情況,集群都必須投票并重新創建集群視圖,這可能會對應用程序造成一定影響。不過,PXC 能更好地處理主節點晉升和網絡故障。
我們可以看到,兩種集群解決方案各有利弊。我希望這份總結能幫助您更多地了解它們,從而更容易地決定使用哪種技術。