如何在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_address和wsrep_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在所有其他節點上成功複製了所有內容。