不同于標(biāo)準(zhǔn)的MySQL服務(wù)器和MySQL集群,MySQL / MariaDB Galera集群在啟動方式上有一些細(xì)小的區(qū)別。Galera需要在集群啟動一個節(jié)點(diǎn)作為參考點(diǎn),剩余的節(jié)點(diǎn)才能加入形成集群。這個過程被稱為集群引導(dǎo)。引導(dǎo)是一個初始步驟,引導(dǎo)數(shù)據(jù)庫節(jié)點(diǎn)作為主節(jié)點(diǎn),其它節(jié)點(diǎn)將主節(jié)點(diǎn)作為參考點(diǎn)同步數(shù)據(jù)。
創(chuàng)新互聯(lián)建站服務(wù)項(xiàng)目包括歷下網(wǎng)站建設(shè)、歷下網(wǎng)站制作、歷下網(wǎng)頁制作以及歷下網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,歷下網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到歷下省份的部分城市,未來相信會繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
啟動集群
在三臺機(jī)器上安裝mariadb,并做初始化配置。在第一臺節(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://' #第一個啟動節(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
在第二臺和第三臺節(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
如果要啟動Mariadb Galera Cluster ,首先選擇node1節(jié)點(diǎn)為初始節(jié)點(diǎn),將node1作為第一個啟動節(jié)點(diǎn),并且設(shè)置gcomm為空,否則無法啟動。
wsrep_cluster_address='gcomm://'
nide1啟動命令(不同版本的不同啟動方式):
$ service mysql bootstrap
# sysvinit
$ service mysql start --wsrep-new-cluster
# sysvinit
$ galera_new_cluster
# systemd
$ mysqld_safe --wsrep-new-cluster
# command line
node1啟動之后,依次啟動node2和node3. 之后修改node1 "wsrep_cluster_address"配置,添加上其它集群節(jié)點(diǎn)IP.
$ systemctl start mariadb
查看系統(tǒng)端口是否存在,默認(rèn)情況下系統(tǒng)會監(jiān)聽3306,4567端口。
登錄數(shù)據(jù)庫,查看集群節(jié)點(diǎn)是否加入:
MariaDB [(none)]> SHOW STATUS LIKE"wsrep_cluster_size";
+--------------------+-------+ | Variable_name | Value | +--------------------+-------+ | wsrep_cluster_size | 3 | +--------------------+-------+
可以通過 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)
警告:對一個已存在的集群添加新的節(jié)點(diǎn)時(shí),不要使用引導(dǎo)的方式(bootstrap)啟動這個節(jié)點(diǎn),不能在一個集群中使用兩個引導(dǎo)節(jié)點(diǎn)。
故障恢復(fù)和重啟集群
當(dāng)我們的mariadb Galera Cluster集群需要重啟(意外宕機(jī))時(shí),未來保證數(shù)據(jù)的完整性,選擇合適的主節(jié)點(diǎn)作為引導(dǎo)啟動節(jié)點(diǎn)非常重要,如果啟動順序不正確可能會造成數(shù)據(jù)丟失或者無法啟動。
當(dāng)Galera以節(jié)點(diǎn)上的引導(dǎo)命令啟動時(shí)該 特定節(jié)點(diǎn)將到達(dá)主狀態(tài)(檢查wsrep_cluster_status的值)。其余的節(jié)點(diǎn)只需要一個正常的啟動命令,它們將自動查找集群中的現(xiàn)有主組件(PC)并加入組成一個集群。然后,數(shù)據(jù)同步通過加速器和供體之間的增量狀態(tài)轉(zhuǎn)移(IST)或快照狀態(tài)轉(zhuǎn)移(SST)發(fā)生。
因此,基本上,如果要啟動新集群或集群中沒有其他節(jié)點(diǎn)處于PRIMARY狀態(tài),則應(yīng)僅引導(dǎo)集群。在選擇采取的行動時(shí)應(yīng)該小心,否則可能會導(dǎo)致拆分集群或丟失數(shù)據(jù)。
如果集群中主節(jié)點(diǎn)運(yùn)行正常,我們只需要正常啟動其他節(jié)點(diǎn)。所以做關(guān)鍵的一點(diǎn)是在集群全部宕機(jī)之后,我們要找到最后一個退出集群,并且數(shù)據(jù)是最完整的節(jié)點(diǎn)。通過啟動這個節(jié)點(diǎn),其他節(jié)點(diǎn)啟動之后與這個節(jié)點(diǎn)同步數(shù)據(jù)才能保證數(shù)據(jù)庫集群的數(shù)據(jù)不丟失。
1、找到最后一個停機(jī)的節(jié)點(diǎn)(seqno 數(shù)字最高的節(jié)點(diǎn)為下一次啟動的主節(jié)點(diǎn),應(yī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,而且我們知道哪一個節(jié)點(diǎn)的優(yōu)先級高,那么我們可以手動指定此節(jié)點(diǎn)為引導(dǎo)節(jié)點(diǎn),修改grastate.dat文件的safe_to_bootstrap =1,然后啟動此節(jié)點(diǎn)。
2、如果所有節(jié)點(diǎn)因?yàn)橥蝗诲礄C(jī)導(dǎo)致數(shù)據(jù)庫停止,我們需要找到數(shù)據(jù)同步最完整的節(jié)點(diǎn)作為啟動節(jié)點(diǎn),可以在每個節(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,就是我們需要首先啟動的數(shù)據(jù)庫節(jié)點(diǎn)。修改此節(jié)點(diǎn)grastate.dat 配置文件 “safe_to_bootstrap: 1”,啟動此節(jié)點(diǎn)即可。
參考文檔:
https://severalnines.com/blog/how-bootstrap-mysqlmariadb-galera-cluster
http://galeracluster.com/documentation-webpages/restartingcluster.html