溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Mariadb Galera Cluster 部署

發(fā)布時(shí)間:2020-07-09 09:14:53 來(lái)源:網(wǎng)絡(luò) 閱讀:5766 作者:酥心糖 欄目:建站服務(wù)器

不同于標(biāo)準(zhǔn)的MySQL服務(wù)器和MySQL集群,MySQL / MariaDB Galera集群在啟動(dòng)方式上有一些細(xì)小的區(qū)別。Galera需要在集群?jiǎn)?dòng)一個(gè)節(jié)點(diǎn)作為參考點(diǎn),剩余的節(jié)點(diǎn)才能加入形成集群。這個(gè)過(guò)程被稱為集群引導(dǎo)。引導(dǎo)是一個(gè)初始步驟,引導(dǎo)數(shù)據(jù)庫(kù)節(jié)點(diǎn)作為主節(jié)點(diǎn),其它節(jié)點(diǎn)將主節(jié)點(diǎn)作為參考點(diǎn)同步數(shù)據(jù)。


啟動(dòng)集群

在三臺(tái)機(jī)器上安裝mariadb,并做初始化配置。在第一臺(tái)節(jié)點(diǎn)上修改/etc/my.cnf.d/server.cnf 的內(nèi)容,在[galera]部分添加集群配置:

wsrep_on=ON
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_address='gcomm://'    #第一個(gè)啟動(dòng)節(jié)點(diǎn)配置
wsrep_cluster_name='mariadb_cluster'
wsrep_node_address='192.168.0.56'   #本機(jī)IP地址
wsrep_node_name='mariadb_node1'    #集群節(jié)點(diǎn)名稱
wsrep_sst_method=rsync
 
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0


在第二臺(tái)和第三臺(tái)節(jié)點(diǎn)上配置/etc/my.cnf.d/server.cnf 文件的[galera]部分:

wsrep_on=ON
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_address='gcomm://192.168.0.56,192.168.0.58'
wsrep_cluster_name='mariadb_cluster'
wsrep_node_address='192.168.0.57'
wsrep_node_name='mariadb_node2'
wsrep_sst_method=rsync
 
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0


wsrep_on=ON
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_address='gcomm://192.168.0.56,192.168.0.57'
wsrep_cluster_name='mariadb_cluster'
wsrep_node_address='192.168.0.58'
wsrep_node_name='mariadb_node3'
wsrep_sst_method=rsync
 
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0

如果要啟動(dòng)Mariadb Galera Cluster ,首先選擇node1節(jié)點(diǎn)為初始節(jié)點(diǎn),將node1作為第一個(gè)啟動(dòng)節(jié)點(diǎn),并且設(shè)置gcomm為空,否則無(wú)法啟動(dòng)。

wsrep_cluster_address='gcomm://'

nide1啟動(dòng)命令(不同版本的不同啟動(dòng)方式):

$ service mysql bootstrap # sysvinit
$ service mysql start --wsrep-new-cluster # sysvinit
$ galera_new_cluster # systemd
$ mysqld_safe --wsrep-new-cluster # command line


node1啟動(dòng)之后,依次啟動(dòng)node2和node3. 之后修改node1 "wsrep_cluster_address"配置,添加上其它集群節(jié)點(diǎn)IP.

$ systemctl start mariadb

查看系統(tǒng)端口是否存在,默認(rèn)情況下系統(tǒng)會(huì)監(jiān)聽3306,4567端口。

登錄數(shù)據(jù)庫(kù),查看集群節(jié)點(diǎn)是否加入:

MariaDB [(none)]> SHOW STATUS LIKE"wsrep_cluster_size";
+--------------------+-------+
| Variable_name   | Value |
+--------------------+-------+
| wsrep_cluster_size | 3   |
+--------------------+-------+

可以通過(guò) wsrep_cluster_status 和 wsrep_local_state_comment 查看節(jié)點(diǎn)的同步狀態(tài)。

MariaDB [(none)]> show status like "wsrep_cluster_status";
+----------------------+---------+
| Variable_name     | Value   |
+----------------------+---------+
| wsrep_cluster_status | Primary |
+----------------------+---------+
1 row in set (0.00 sec)
MariaDB [(none)]> show status like "wsrep_local_state_comment";
+---------------------------+--------+
| Variable_name          | Value  |
+---------------------------+--------+
| wsrep_local_state_comment | Synced |
+---------------------------+--------+
1 row in set (0.00 sec)


警告:對(duì)一個(gè)已存在的集群添加新的節(jié)點(diǎn)時(shí),不要使用引導(dǎo)的方式(bootstrap)啟動(dòng)這個(gè)節(jié)點(diǎn),不能在一個(gè)集群中使用兩個(gè)引導(dǎo)節(jié)點(diǎn)。


故障恢復(fù)和重啟集群


當(dāng)我們的mariadb Galera Cluster集群需要重啟(意外宕機(jī))時(shí),未來(lái)保證數(shù)據(jù)的完整性,選擇合適的主節(jié)點(diǎn)作為引導(dǎo)啟動(dòng)節(jié)點(diǎn)非常重要,如果啟動(dòng)順序不正確可能會(huì)造成數(shù)據(jù)丟失或者無(wú)法啟動(dòng)。

當(dāng)Galera以節(jié)點(diǎn)上的引導(dǎo)命令啟動(dòng)時(shí)該   特定節(jié)點(diǎn)將到達(dá)主狀態(tài)(檢查wsrep_cluster_status的值)。其余的節(jié)點(diǎn)只需要一個(gè)正常的啟動(dòng)命令,它們將自動(dòng)查找集群中的現(xiàn)有主組件(PC)并加入組成一個(gè)集群。然后,數(shù)據(jù)同步通過(guò)加速器和供體之間的增量狀態(tài)轉(zhuǎn)移(IST)或快照狀態(tài)轉(zhuǎn)移(SST)發(fā)生。

因此,基本上,如果要啟動(dòng)新集群或集群中沒(méi)有其他節(jié)點(diǎn)處于PRIMARY狀態(tài),則應(yīng)僅引導(dǎo)集群。在選擇采取的行動(dòng)時(shí)應(yīng)該小心,否則可能會(huì)導(dǎo)致拆分集群或丟失數(shù)據(jù)。

  

如果集群中主節(jié)點(diǎn)運(yùn)行正常,我們只需要正常啟動(dòng)其他節(jié)點(diǎn)。所以做關(guān)鍵的一點(diǎn)是在集群全部宕機(jī)之后,我們要找到最后一個(gè)退出集群,并且數(shù)據(jù)是最完整的節(jié)點(diǎn)。通過(guò)啟動(dòng)這個(gè)節(jié)點(diǎn),其他節(jié)點(diǎn)啟動(dòng)之后與這個(gè)節(jié)點(diǎn)同步數(shù)據(jù)才能保證數(shù)據(jù)庫(kù)集群的數(shù)據(jù)不丟失。

1、找到最后一個(gè)停機(jī)的節(jié)點(diǎn)(seqno 數(shù)字最高的節(jié)點(diǎn)為下一次啟動(dòng)的主節(jié)點(diǎn),應(yīng)該首先啟動(dòng)):

# cat /maria-data/mysql/grastate.dat 
# GALERA saved state
version: 2.1
uuid:    8736f68d-0af7-11e7-aba5-9a9e6a4d342c
seqno:   15
safe_to_bootstrap: 0

提示: 如果所有的節(jié)點(diǎn)都是seqno的值都為-1,而且我們知道哪一個(gè)節(jié)點(diǎn)的優(yōu)先級(jí)高,那么我們可以手動(dòng)指定此節(jié)點(diǎn)為引導(dǎo)節(jié)點(diǎn),修改grastate.dat文件的safe_to_bootstrap =1,然后啟動(dòng)此節(jié)點(diǎn)。


2、如果所有節(jié)點(diǎn)因?yàn)橥蝗诲礄C(jī)導(dǎo)致數(shù)據(jù)庫(kù)停止,我們需要找到數(shù)據(jù)同步最完整的節(jié)點(diǎn)作為啟動(dòng)節(jié)點(diǎn),可以在每個(gè)節(jié)點(diǎn)上使用如下命令:

$ mysqld --wsrep-recover
...
2016-11-18 01:42:15 36311 [Note] InnoDB: Database was not shutdown normally!
2016-11-18 01:42:15 36311 [Note] InnoDB: Starting crash recovery.
...
2016-11-18 01:42:16 36311 [Note] WSREP: Recovered position: 8bcf4a34-aedb-14e5-bcc3-d3e36277729f:114428
...


提示信息中,在Recovered position 后所指定的ID,就是我們需要首先啟動(dòng)的數(shù)據(jù)庫(kù)節(jié)點(diǎn)。修改此節(jié)點(diǎn)grastate.dat 配置文件 “safe_to_bootstrap: 1”,啟動(dòng)此節(jié)點(diǎn)即可。





參考文檔:  

https://severalnines.com/blog/how-bootstrap-mysqlmariadb-galera-cluster

http://galeracluster.com/documentation-webpages/restartingcluster.html 


向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI