Mysql

連接兩個數據中心的兩個 Percona XtraDB 集群

  • April 11, 2022

在過去的幾周里,我一直試圖弄清楚這一點。我們曾經在不同的供應商處有一個五台主機的 Percona 集群。當它開始起作用時,我讀到跨數據中心進行同步複製是個壞主意。現在我們在一個數據中心有一個三節點的集群,並且它是穩定的。

我正在嘗試找出實現數據中心冗餘的最佳方法。

我讀到你可以有兩個單獨的集群,一個在每個數據中心,並且在它們之間有一個非同步連結。進一步閱讀後,雖然它似乎通常用於 DR 場景,因此不使用從屬集群,雖然故障轉移很容易,但回退有點涉及。

我對數據庫集群非常陌生,希望得到指導。數據庫客戶端將使用 HAProxy,並且只會指向一個數據中心中的主機。

我希望我可以將客戶端一半拆分到每個 DC,並讓非同步連結複製數據。你們會怎麼做呢?這些天大家都在用什麼?

不是完整的答案,而是一些想法。

首先,您必須接受對於 HA、DR 等沒有“完美”的解決方案。

您在兩個供應商之間分配的 5 個節點應該非常好且安全。

您提議的一對在一個方向上具有非同步複製的 3 節點集群也相當不錯。

有 3 個節點在地理上足夠分開以避免在洪氾區、地震斷層、龍捲風巷等中出現任何兩個節點,可能比上述任何一個都略好。

主要規則是避免任何單點故障。(這包括整個數據中心——它們可能會發生故障。)次要規則是允許系統在出現重大故障時以降級模式執行。

考慮到這一點,另一種拓撲是在一個 DC 中擁有一個 3 節點集群,在其他兩個 DC 中的每一個中都有一個非同步副本,從主集群中的不同節點進行複制。

PXC 很好地修復了單個節點故障。所有其他配置都需要大量混亂的使用者操作。如果單節點故障需要 SST,則集群幾乎只剩下一個節點,而另一個節點正在複製自身以重建新的第三個節點。

Galera (PXC) 集群中的 5 個節點正在推動網路流量的極限。

與流行的看法相反,一個 4 節點的集群可以承受單點故障。但是確實需要 5 個節點才能承受 2 個同時發生的節點故障。

我決定使用Replication Manager

它非常穩定,它使我的集群保持同步,但你真的需要耐心。當所有節點都啟動時,一切都會在幾秒鐘內同步。當發生故障並得到解決時,所有內容都需要幾分鐘才能同步。

我按照說明進行操作,除了以下內容外,它執行良好:

  1. 它要求您執行 mysqldump,複製到其他集群,然後導入。導入失敗。為了使導入成功,您需要在 /etc/my.cnf 文件中將 pxc_strict_mode=ENFORCING 更改為 pxc_strict_mode=PERMISSIVE,然後引導該伺服器。

接下來進入 mysql 並執行 mysql> set wsrep_on=0; mysql> 重置主機;

打開另一個 ssh 會話並執行 import 回到 mysql 並恢復 wsrep mysql> set wsrep on=1

將 /etc/my.cnf 從 PERMISSIVE 更改回 ENFORCING 並重新啟動 mysql@bootstrap。

對每個集群的第一個節點重複此操作。

  1. 該腳本在 /root/.my.cnf 或您執行腳本的任何內容中查找憑據。我在任何文件中都找不到憑據的格式。原來只是

$$ client $$ 使用者=根

密碼=<密碼>

應該是這樣的。我希望這將幫助任何尋找類似解決方案的人。

引用自:https://dba.stackexchange.com/questions/294737