如何使用Debian 10設置MariaDB Galera多主同步複製

如何使用Debian 10設置MariaDB Galera多主同步複製

MariaDB提供兩種不同的高可用性(HA)和群集解決方案。一種是標準的MariaDB主/從複製,可以在不同的拓撲中進行配置,主要用於負載平衡,HA和備份。其次是MariaDB Galera,這是一個多主同步集群解決方案。主要功能如下。

  • 多主控:Galera群集中的所有節點都可以執行讀寫操作,從而提高了可伸縮性。
  • 節點可以自動加入集群,如果發生故障,節點將被刪除。
  • Galera複製是同步的。這意味着保證將一個節點上的更改應用於其他節點。從理論上講,這可以確保在節點發生故障時不會丟失任何數據。

本指南介紹了Galera群集上MariaDB的安裝和配置。可以使用任意數量(≥3個)的節點,但是該演示使用了三個Debian 10節點。從技術上講,可以在Galera群集中設置兩個節點,但是不能提供容錯功能,因為發生故障的節點會導致其他節點宕機。

要求條件

  • 3個或更多Debian 10實例。
  • 訪問root用戶或具有sudo特權的用戶。
  • $編輯器 您需要設置環境變量。

注意事項: Galera群集可以在WAN或LAN上運行。如果節點共享專用網絡,請根據需要使用專用IP地址。否則,您必須使用WAN地址。

如果您使用的是sudo用戶,請使用以下命令打開並使用此安裝程序長度的root shell:

sudo -s

步驟1:安裝MariaDB

必須在所有節點上執行此步驟。

使用以下命令安裝MariaDB,Galera庫和Rsync:後者由Galera使用。

apt update
apt install -y mariadb-server mariadb-client galera-3 rsync

確認已啟用MariaDB服務。

systemctl enable mariadb.service

使用mysql_secure_installation腳本來保護您的MariaDB實例。

mysql_secure_installation

回答以下問題,並為MySQL根用戶選擇一個強密碼。

Enter current password for root (enter for none): Press 
Set root password? [Y/n] y
New password: your_password
Re-enter new password: your_password
Remove anonymous users? [Y/n] y
Disallow root login remotely? [Y/n] y
Remove test database and access to it? [Y/n] y
Reload privilege tables now? [Y/n] y
All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

步驟2:配置MariaDB

必須在所有節點上執行此步驟。

在所有節點上停止MariaDB服務。

systemctl stop mariadb.service

默認情況下,MariaDB守護程序僅在localhost上偵聽連接。必須將其更改為外部可訪問的地址,集群才能工作。為此,請編輯選項文件/etc/mysql/mariadb.conf.d/50-server.cnf。

$EDITOR /etc/mysql/mariadb.conf.d/50-server.cnf

找到以下行:

bind-address = 127.0.0.1

如果您正在為群集使用專用網絡,並且不想將MariaDB暴露給其他網絡(即WAN),請為每個節點指定本地IPv4地址。否則,請使用0.0.0.0,它告訴MariaDB在所有接口上進行偵聽。例如:

bind-address = 0.0.0.0

保存您的更改並退出文本編輯器。

接下來,配置與群集相關的選項。創建一個新的選項文件。

$EDITOR /etc/mysql/mariadb.conf.d/99-cluster.cnf

在文件中輸入以下適當的配置以替換IP地址:在所有節點上必須相同。

[galera]
wsrep_on = on 
wsrep_provider = /lib/galera/libgalera_smm.so 
wsrep_cluster_address = gcomm://192.0.2.1,192.0.2.2,192.0.2.3 
wsrep_cluster_name = galera_cluster_0 

default_storage_engine = InnoDB 
innodb_autoinc_lock_mode = 2 
innodb_doublewrite = 1 

binlog_format = ROW
  • wsrep_on = on啟用寫集複製,這是Galera使用的基本功能。
  • wsrep_provider指定Galera庫的路徑。由Debian 10中的/lib/galera/libgalera_smm.so中的galera-3軟件包提供。
  • wsrep_cluster_address必須包含另一個集群成員的至少一個地址。建議您列出集群的所有成員。不需要特定的訂單。
  • wsrep_cluster_name對於集群是唯一的,並且在同一廚房集群的所有節點上必須相同。
  • 其餘選項是Galera正常運行所必需的,不應更改。

第三步:集群引導

在繼續之前,請確保MariaDB在所有節點上均已停止/處於非活動狀態。

systemctl status mariadb.service

要啟動集群,節點必須首先創建集群。在Debian 10中,您可以使用galera_new_cluster腳本執行此操作。該腳本僅在一個節點上運行,並且只需要運行一次即可初始化集群。

galera_new_cluster

這將在當前節點上啟動MariaDB。確保它在下面運行。

systemctl status mariadb.service

然後使用以下命令在其他節點上啟動MariaDB:

systemctl start mariadb.service

集群現在可以運行了。

步驟4:測試

要驗證您的集群是否按預期工作,請選擇一個節點並登錄到MariaDB。

mysql -u root -p

發出以下語句來創建數據庫:

> CREATE DATABASE test0;
> q

接下來,在所有其他節點上檢查此新數據庫。

mysql -u root -p -e "SHOW DATABASES;"

上面的命令返回一個包含test0的列表。

+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test0              |
+--------------------+

通過從所有節點寫入群集,可以進行更徹底的測試。如果您對測試滿意,請從集群中清除所有不必要的數據庫。您可以使用任何節點。

mysql -u root -p -e "DROP DATABASE test0;"

步驟5:故障排除提示

使用以下查詢來顯示有關節點/集群的當前狀態的信息。

mysql -u root -p -e "SELECT * FROM information_schema.global_status WHERE variable_name IN ('WSREP_CLUSTER_STATUS','WSREP_LOCAL_STATE_COMMENT','WSREP_CLUSTER_SIZE','WSREP_EVS_REPL_LATENCY','WSREP_EVS_DELAYED','WSREP_READY');"

成功的三節點群集返回:

+---------------------------+----------------+
| VARIABLE_NAME             | VARIABLE_VALUE |
+---------------------------+----------------+
| WSREP_CLUSTER_SIZE        | 3              |
| WSREP_CLUSTER_STATUS      | Primary        |
| WSREP_EVS_DELAYED         |                |
| WSREP_EVS_REPL_LATENCY    | 0/0/0/0/0      |
| WSREP_LOCAL_STATE_COMMENT | Synced         |
| WSREP_READY               | ON             |
+---------------------------+----------------+
  • WSREP_CLUSTER_SIZE表示集群組件中當前的節點數。
  • WSREP_CLUSTER_STATUS指示集群組件(而不是整個集群)的狀態。
  • WSREP_EVS_DELAYED指示滯後的節點列表。您期望健康群集中的值為空。
  • WSREP_EVS_REPL_LATENCY表示複製延遲,格式為min / avg / max / stddev / samplesize。該值以秒為單位顯示。很高的延遲會降低性能。
  • WSREP_LOCAL_STATE_COMMENT指示節點的當前狀態。
  • WSREP_READY指示節點是否可以接受查詢。

如果三節點群集中的一個節點失去連接,則群集將分為兩個節點的主要和非主要組件。主要組件不受故障影響,並繼續正常運行。從非主要組件的角度來看,上述查詢返回:

+---------------------------+--------------------------------------------------------------------------------------------------------------------------------+
| VARIABLE_NAME             | VARIABLE_VALUE                                                                                                                 |
+---------------------------+--------------------------------------------------------------------------------------------------------------------------------+
| WSREP_CLUSTER_SIZE        | 1                                                                                                                              |
| WSREP_CLUSTER_STATUS      | non-Primary                                                                                                                    |
| WSREP_EVS_DELAYED         | 6b7864f2-fe7d-11e9-84ab-93e58c0d2907:tcp://192.0.2.1:4567:3,a421be89-fe7d-11e9-a91e-7e62f7562e58:tcp://192.0.2.3:4567:2        |
| WSREP_EVS_REPL_LATENCY    | 0/0/0/0/0                                                                                                                      |
| WSREP_LOCAL_STATE_COMMENT | Initialized                                                                                                                    |
| WSREP_READY               | OFF                                                                                                                            |
+---------------------------+--------------------------------------------------------------------------------------------------------------------------------+

注意WSREP_EVS_DELAYED值。這表明連接到另一個節點時出現問題。

在主組件節點上,相同的查詢返回:

+---------------------------+----------------------------------------------------------------+
| VARIABLE_NAME             | VARIABLE_VALUE                                                 |
+---------------------------+----------------------------------------------------------------+
| WSREP_CLUSTER_SIZE        | 2                                                              |
| WSREP_CLUSTER_STATUS      | Primary                                                        |
| WSREP_EVS_DELAYED         | a2217526-fe7d-11e9-8692-1f2f0cdb403d:tcp://192.0.2.2:4567:2    |
| WSREP_EVS_REPL_LATENCY    | 0/0/0/0/0                                                      |
| WSREP_LOCAL_STATE_COMMENT | Synced                                                         |
| WSREP_READY               | ON                                                             |
+---------------------------+----------------------------------------------------------------+

無需人工干預即可從單節點故障中恢復。當故障節點重新連接到群集時,它會自動與群集同步。

詳情

有關高級配置選項, Galera Cluster系統變量

Source

Sidebar