所以我想建立一個高可用性的 MySQL 資料庫伺服器 - 因此我為自己準備了兩個裝置(Banana Pi),並按照教學了解如何安裝 MySQL 叢集軟體。我知道只有兩個設備的星座並不完全是 MySQL 叢集的使用方式,但為了節省硬體成本,我現在只使用了這兩個設備。
到目前為止,我已經獲得以下配置(sqlnode1 和 sqlnode2 是裝置的主機名稱):
管理節點(ndb_mgmd):
- sqlnode1(節點 ID:1)
- sqlnode2(節點 ID:2)
儲存引擎(ndbd):
- sqlnode1:設定為使用本機上的管理節點(節點ID:3)
- sqlnode2:設定為使用本機上的管理節點(節點 ID:4)
MySQL 伺服器(mysqld):
- sqlnode1:配置為使用兩個 ndbd 節點(節點 ID:5)
- sqlnode2:配置為使用兩個 ndbd 節點(節點 ID:6)
所以基本上,每個裝置都有一個正在運行的ndb_mgmd、ndbd和mysqld。
我想要實現的是,如果其中一個設備發生故障,另一個設備應該完全可用(由於一些非常具體的原因,我不能在這裡使用簡單的資料庫複製)。
一旦我啟動所有組件,一切都工作正常。如果我更改一台 MySQL 主機上的數據,另一台主機會立即套用變更(反之亦然)。
但是,如果我斷開其中一台裝置的 LAN 電纜,則會發生以下情況:
- 斷開sqlnode2:功能節點(sqlnode1)掛起一小段時間,然後繼續正常工作(這基本上就是我想要的)
- 斷開sqlnode1:功能節點(sqlnode2)短暫掛起,然後根本不起作用- 所有查詢均以「4009 Cluster Failure」結束,並且只有在恢復已斷開節點的網路連線後,查詢才會重新開始工作。之後,監控ndb_mgmd守護程式顯示節點id 4(sqlnode2上的ndbd)已強制關閉。
總而言之,整個系統似乎依賴 sqlnode1,我真的很想知道為什麼會發生這種情況,因為我認為如果一個元件退出(並且另一個相同類型的元件可用),一切都會繼續運行。
我按照本教學設定了兩個不同的管理節點:http://www.clusterdb.com/mysql-cluster/deploying-mysql-cluster-over-multiple-hosts
我錯過了什麼嗎?或者也許我誤解了 MySQL 叢集的工作原理?
答案1
我沒有使用過Mysql Cluster,但是你應該能夠在其中進行複製,而且如果你需要的只是複製,那麼MySQL Cluster 的功能也比你可能需要的要多得多。 MySQL叢集有能力在一個sql伺服器宕機時動態路由到不同的sql伺服器,從而減少每次修改主機名稱的dns記錄或設定臨時sql伺服器或讓它死掉直到修復的需要。它也可以做其他事情。因此,為了幫助您,我建議使用 MySQL 社群版,因為它比 mysql 叢集對您來說更友善使用者。
取得mysql 社群版,這將允許您進行複製,因此,您可以將1 個mysql 伺服器設定為主伺服器,在其中編輯所有內容,第二個mysql 伺服器是從伺服器,它只能以可設定的時間間隔檢索主伺服器的內容。您將來也可以輕鬆添加更多奴隸。另外,從伺服器也不一定必須位於單獨的機器上,您可以執行多個 MySQL 實例。然而,這將違背複製和故障安全的目的。這很可能就是您正在尋找的。此外,mysql 在其網站上有一個指南,用於為 mysql 社群版設定複製。
答案2
我透過切換到 Galera MySQL 叢集解決了我的問題,它似乎完全滿足了我的需求。