1. 程式人生 > >如何在CentOS上設定MariaDB Galera Cluster 10.0

如何在CentOS上設定MariaDB Galera Cluster 10.0

 

 原作者:Jijo 轉載:https://www.unixmen.com/setup-mariadb-galera-cluster-10-0-centos/

 

如何在CentOS上設定MariaDB Galera Cluster 10.0

 

MariaDB  是一個關係資料庫管理系統(RDBMS),   MariaDB Galera Cluster  是MariaDB的同步多主叢集。它僅在Linux上可用,並且僅支援XtraDB / InnoDB儲存引擎。本文介紹如何在CentOS 6.5 x86_64上執行3個節點設定MariaDB Galera Cluster 10.0,從而生成HA(高可用性)資料庫叢集。

 

叢集細節

我們使用3個新安裝的VM執行CentOS 6.5 x86_64的最小安裝。

群集節點1具有主機名db1和IP地址1.1.1.1 
群集節點2具有主機名db2和IP地址1.1.1.2 
群集節點3具有主機名db3和IP地址1.1.1.3

 

第1步:新增MariaDB儲存庫

 使用系統中的以下內容建立mariadb儲存庫  /etc/yum.repos.d/mariadb.repo

對於CentOS 6 - 64位:

[MariaDB的]
name = MariaDB
baseurl = http://yum.mariadb.org/10.0/centos6-amd64
gpgkey = HTTPS://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck = 1

對於CentOS 6 - 32位:

[MariaDB的]
name = MariaDB
baseurl = http://yum.mariadb.org/10.0/centos6-x86
gpgkey = HTTPS://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck = 1

 

第2步 - 在許可模式下設定SELinux

在開始設定之前,將SELinux置於所有節點上的許可模式:

sudo setenforce0

 

第3步 - 安裝MariaDB Galera Cluster 10.0軟體

如果您進行了CentOS 6最小安裝,那麼請確保在繼續安裝MariaDB Galera Cluster 10.0軟體之前從EPEL儲存庫安裝socat

軟體包。

您可以使用以下命令直接從EPEL安裝socat包(對於x86_64):

sudo yum install http://dl.fedoraproject.org/pub/epel/6/x86_64/socat-1.7.2.3-1.el6.x86_64.rpm

在CentOS 7上,您可以使用以下命令安裝socat軟體包。

sudo yum install socat

通過在所有節點上執行以下命令來安裝MariaDB Galera Cluster 10.0軟體:

sudo yum install MariaDB-Galera-server MariaDB-client rsync galera

 

第4步:設定MariaDB安全性

啟動mysql(MariaDB 10.0中的init指令碼仍稱為mysql)

sudo service mysql start 

執行mysql_secure_installation指令碼,以便我們可以提高安全性。在所有節點上執行以下命令:

sudo /usr/bin/mysql_secure_installation

我選擇密碼為  'dbpass'並接受所有預設值(因此對所有問題都回答)。

 

第5步 - 建立MariaDB Galera Cluster使用者

現在,我們必須建立一些必須能夠訪問資料庫的使用者。該“sst_user”是一個數據庫節點將使用用於認證在狀態傳輸快照(SST)相另一個數據庫節點的使用者。在所有節點上執行以下命令:

mysql -u root -p
mysql> DELETE FROM mysql.user WHERE user='';
mysql> GRANT ALL ON *.* TO 'root'@'%' IDENTIFIED BY 'dbpass';
mysql> GRANT USAGE ON *.* to [email protected]'%' IDENTIFIED BY 'dbpass';
mysql> GRANT ALL PRIVILEGES on *.* to [email protected]'%';
mysql> FLUSH PRIVILEGES;
mysql> quit

建議您將'%'更改為主機名或IP地址,這些使用者可以從中訪問資料庫。因為  '%'  表示   允許root  或  sst_user從任何主機訪問資料庫,所以安全性較低。

第6步 - 建立MariaDB Galera Cluster配置

首先停止所有節點上的mysql服務:

sudo service mysql stop 

接下來,我們將在所有節點上通過以下命令建立MariaDB Galera Cluster配置(在配置之後執行重要註釋並對db2和db3進行必要的更改):

sudo cat >> /etc/my.cnf.d/server.cnf << EOF
binlog_format=ROW
default-storage-engine=innodb
innodb_autoinc_lock_mode=2
innodb_locks_unsafe_for_binlog=1
query_cache_size=0
query_cache_type=0
bind-address=0.0.0.0
datadir=/var/lib/mysql
innodb_log_file_size=100M
innodb_file_per_table
innodb_flush_log_at_trx_commit=2
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_address="gcomm://1.1.1.1,1.1.1.2,1.1.1.3"
wsrep_cluster_name='galera_cluster'
wsrep_node_address='1.1.1.1'
wsrep_node_name='db1'
wsrep_sst_method=rsync
wsrep_sst_auth=sst_user:dbpass
EOF

重要說明:在db2和db3上執行此命令時,請不要忘記調整wsrep_node_addresswsrep_node_name變數。

在db2上:

wsrep_node_address=1.1.1.2
wsrep_node_name='db2'

在db3上:

wsrep_node_address='1.1.1.3'
wsrep_node_name='db3'

 

步驟7-初始化第一個群集節點

使用特殊的wsrep-new-cluster'選項啟動MariaDB,僅在節點db1上執行此操作,以便初始化叢集的主節點:

sudo /etc/init.d/mysql start --wsrep-new-cluster

通過僅在節點db1上執行以下命令來檢查狀態:

mysql -uroot -p -e"show status like 'wsrep%'"

輸出中的一些重要資訊如下:

wsrep_local_state_comment | Synced <-- cluster is synced
wsrep_incoming_addresses  | 1.1.1.1:3306 <-- node db1 is a provider
wsrep_cluster_size        | 1 <-- cluster consists of 1 node 
wsrep_ready               | ON <-- good :)

 

步驟8-新增其他群集節點

檢查並確認節點db2和db3 在[mariadb-10.0]下的/etc/my.cnf.d/server.cnf中具有正確的配置, 如步驟6中所述。

使用正確的配置,使db2和db3成為叢集成員所需的全部操作就像啟動任何常規服務一樣啟動它們。在db2上發出以下命令:

sudo service mysql start 

通過在db1或db2上執行以下命令來檢查群集狀態中的更改:

mysql -u root -p -e“show status like'wsrep%'”

您將看到節點db2現在稱為簇大小為'2'並且列出了節點db2的IP地址:

| wsrep_local_state_comment | 同步|
| wsrep_incoming_addre sses | 1.1.1.1:3306,1.1.1.2:3306 |
| wsrep_cluster_size | 2 |
| wsrep_connected | ON |
| wsrep_ready | ON |

對節點db3重複相同的步驟。在節點db3上,僅執行以下命令

sudo service mysql start 

通過執行以下命令(例如db1)來檢查群集狀態中的更改:

mysql -u root -p -e“show status like'wsrep%'”

您應該看到節點db3現在稱為簇大小為'3'並且列出了節點db3的IP地址:

| wsrep_local_state_comment | 同步|
| wsrep_incoming_addresses | 1.1.1.3:3306,1.1.1.1:3306,1.1.1.2:3306 |
| wsrep_cluster_size | 3 |
| wsrep_connected | ON |
| wsrep_ready | ON |

 

第9步 - 驗證複製

現在叢集正在執行。我們來測試它是否正常工作。在db1上執行以下命令建立資料庫'clustertest':

mysql -u root -p -e'CREATE DATABASE clustertest;'
mysql -u root -p -e'CREATE TABLE clustertest.mycluster(id INT NOT NULL AUTO_INCREMENT,name VARCHAR(50),ipaddress VARCHAR(20),PRIMARY KEY(id));'
mysql -u root -p -e'INSERT INTO clustertest.mycluster(name,ipaddress)VALUES(“db1”,“1.1.1.1”);'

檢查資料庫,表和資料是否存在:

mysql -u root -p -e'SELECT * FROM clustertest.mycluster;'
輸入密碼: 
+ ---- + ------ + ----------- +
| id | name| ipaddress |
+ ---- + ------ + ----------- +
| 2 | db1 | 1.1.1.1 |
+ ---- + ------ + ----------- +

現在檢查節點db2:

mysql -u root -p -e'SELECT * FROM clustertest.mycluster;'
輸入密碼: 
+ ---- + ------ + ----------- +
| id | name | ipaddress |
+ ---- + ------ + ----------- + 
| 2 | db1 | 1.1.1.1 |
+ ---- + ------ + ----------- +

現在對節點db3進行相同的檢查:

mysql -u root -p -e'SELECT * FROM clustertest.mycluster;'
輸入密碼: 
+ ---- + ------ + ----------- +
| id | 名字 | ipaddress |
+ ---- + ------ + ----------- +
| 2 | db1 | 1.1.1.1 |
+ ---- + ------ + ----------- +

從這些輸出中,我們可以確認節點db1在所有其他節點上成功複製了所有內容。