不同于標準的MySQL服務器和MySQL集群,MySQL / MariaDB Galera集群在啟動方式上有一些細小的區別。Galera需要在集群啟動一個節點作為參考點,剩余的節點才能加入形成集群。這個過程被稱為集群引導。引導是一個初始步驟,引導數據庫節點作為主節點,其它節點將主節點作為參考點同步數據。
啟動集群
在三臺機器上安裝mariadb,并做初始化配置。在第一臺節點上修改/etc/my.cnf.d/server.cnf 的內容,在[galera]部分添加集群配置:
wsrep_on=ON wsrep_provider=/usr/lib64/galera/libgalera_smm.so wsrep_cluster_address='gcomm://' #第一個啟動節點配置 wsrep_cluster_name='mariadb_cluster' wsrep_node_address='192.168.0.56' #本機IP地址 wsrep_node_name='mariadb_node1' #集群節點名稱 wsrep_sst_method=rsync binlog_format=row default_storage_engine=InnoDB innodb_autoinc_lock_mode=2 bind-address=0.0.0.0
在第二臺和第三臺節點上配置/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節點為初始節點,將node1作為第一個啟動節點,并且設置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"配置,添加上其它集群節點IP.
$ systemctl start mariadb
查看系統端口是否存在,默認情況下系統會監聽3306,4567端口。
登錄數據庫,查看集群節點是否加入:
MariaDB [(none)]> SHOW STATUS LIKE"wsrep_cluster_size";
+--------------------+-------+ | Variable_name | Value | +--------------------+-------+ | wsrep_cluster_size | 3 | +--------------------+-------+
可以通過 wsrep_cluster_status 和 wsrep_local_state_comment 查看節點的同步狀態。
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)
警告:對一個已存在的集群添加新的節點時,不要使用引導的方式(bootstrap)啟動這個節點,不能在一個集群中使用兩個引導節點。
故障恢復和重啟集群
當我們的mariadb Galera Cluster集群需要重啟(意外宕機)時,未來保證數據的完整性,選擇合適的主節點作為引導啟動節點非常重要,如果啟動順序不正確可能會造成數據丟失或者無法啟動。
當Galera以節點上的引導命令啟動時該 特定節點將到達主狀態(檢查wsrep_cluster_status的值)。其余的節點只需要一個正常的啟動命令,它們將自動查找集群中的現有主組件(PC)并加入組成一個集群。然后,數據同步通過加速器和供體之間的增量狀態轉移(IST)或快照狀態轉移(SST)發生。
因此,基本上,如果要啟動新集群或集群中沒有其他節點處于PRIMARY狀態,則應僅引導集群。在選擇采取的行動時應該小心,否則可能會導致拆分集群或丟失數據。
如果集群中主節點運行正常,我們只需要正常啟動其他節點。所以做關鍵的一點是在集群全部宕機之后,我們要找到最后一個退出集群,并且數據是最完整的節點。通過啟動這個節點,其他節點啟動之后與這個節點同步數據才能保證數據庫集群的數據不丟失。
1、找到最后一個停機的節點(seqno 數字最高的節點為下一次啟動的主節點,應該首先啟動):
# cat /maria-data/mysql/grastate.dat # GALERA saved state version: 2.1 uuid: 8736f68d-0af7-11e7-aba5-9a9e6a4d342c seqno: 15 safe_to_bootstrap: 0
提示: 如果所有的節點都是seqno的值都為-1,而且我們知道哪一個節點的優先級高,那么我們可以手動指定此節點為引導節點,修改grastate.dat文件的safe_to_bootstrap =1,然后啟動此節點。
2、如果所有節點因為突然宕機導致數據庫停止,我們需要找到數據同步最完整的節點作為啟動節點,可以在每個節點上使用如下命令:
$ 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,就是我們需要首先啟動的數據庫節點。修改此節點grastate.dat 配置文件 “safe_to_bootstrap: 1”,啟動此節點即可。
參考文檔:
https://severalnines.com/blog/how-bootstrap-mysqlmariadb-galera-cluster
http://galeracluster.com/documentation-webpages/restartingcluster.html
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。