基於MHA和Galera Cluster實現MySQL高可用
MHA:Master HA;是一款開源的MySQL的高可用程式,它為MySQL主從複製架構提供了automating master failover功能。MHA在監控到master節點故障時,會將擁有最新資料的slave節點升為新的master節點,在此期間,MHA會通過於slave節點擷取額外資訊來避免一致性方面的問題。MHA還提供了master節點線上切換功能,即按需切換master/slave節點
MHA服務有兩種角色:管理節點(MHA Manager)和資料節點(MHA Node)
MHA Manager:通常單獨部署在一台獨立伺服器上管理多個master/slave叢集,每個master/slave叢集稱為一個application
MHA Node:運行在每台MySQL伺服器上(master/slave/manager),他通過監控具備解析和清理logs功能的指令碼來加快容錯移轉
Galera Cluster
基於wsrep協議在全域實現複製,任何一節點都可實現讀寫操作,無延遲複製,不會產生資料丟失,當某台伺服器宕機後,待命伺服器會自動接管。
一、基於Galera Cluster實現MySQL高可用
準備環境:CentOS 7
節點1 |
IP:172.18.42.200 |
節點2 |
IP:172.18.42.201 |
節點3 |
IP:172.18.42.202 |
1、部署節點1
(1)安裝Galera服務
[root@node0 ~]# yum install MariaDB-Galera-server -y
(2)編輯其設定檔
[root@node0 ~]# rpm -ql galera ##查看相關檔案
/usr/lib64/galera/libgalera_smm.so
[root@node0 ~]# vim /etc/my.cnf.d/server.cnf
[galera]
# Mandatory settings ##強制設定
wsrep_provider=/usr/lib64/galera/libgalera_smm.so ##wsrep的提供者,一般是一個外掛程式,不同的安裝版本有可能不一樣
wsrep_cluster_address="gcomm://172.18.42.200, 172.18.42.201, 172.18.42.202" ##指明Galera-Cluster的各個節點
binlog_format=row ##二進位日誌格式,預設是row格式,不建議更改
default_storage_engine=InnoDB ##指明使用的引擎
innodb_autoinc_lock_mode=2 ##鎖格式
bind-address=0.0.0.0 ##wsrep在工作時監聽的地址
wsrep_cluster_name='mycluster' ##指明Galera叢集的名稱
(3)初次開機時,需要初始化叢集
[root@node0 ~]# /etc/rc.d/init.d/mysql start --wsrep-new-cluster ##在某一個節點上啟動mysql服務
2、部署節點2
(1)安裝MariaDB-Galera-server服務
[root@node0 ~]# yum install MariaDB-Galera-server -y
(2)啟動服務
[root@node2 ~]# service mysql start
Starting MySQL....SST in progress, setting sleep higher. SUCCESS!
3、部署節點3
(1)安裝MariaDB-Galera-server服務
[root@node0 ~]# yum install MariaDB-Galera-server -y
(2)啟動服務
[root@node2 ~]# service mysql start
Starting MySQL....SST in progress, setting sleep higher. SUCCESS!
4、三個節點都串連mysql服務,隨後建立一個資料庫,查看其它兩個節點是否複製
[root@node0 ~]# mysql ##節點1串連mysql服務
MariaDB [(none)]> create database MaGeRepo; ##在節點1上建立資料庫“MaGeRepo”,並查看
MariaDB [(none)]> show databases;
+--------------------+
| Database
+--------------------+
| information_schema
| MaGeRepo
| mysql
| performance_schema
| test
+--------------------+
[root@node1 ~]# mysql ##節點2串連至mysql服務
MariaDB [(none)]> show databases; ##查看資料庫
+--------------------+
| Database
+--------------------+
| information_schema
| MaGeRepo
| mysql
| performance_schema
| test
+--------------------+
[root@node2 ~]# mysql ##節點3串連至mysql服務
MariaDB [(none)]> show databases; ##查看資料庫
+--------------------+
| Database
+--------------------+
| information_schema
| MaGeRepo
| mysql
| performance_schema
| test
+--------------------+
##資料庫實現了同步
5、把節點2宕機,隨後在資料庫“MaGeRepo”中建立表“MaGe“;
MariaDB [MaGeRepo]> create table MaGe (ID int unsigned auto_increment not null primary key,Name char(10)); ##在節點1上建立表“MaGe”
MariaDB [MaGeRepo]> insert into MaGe (Name) values ('MaGe'),('Lweim'); ##在節點1中插入資料“Lweim”、“MaGe”
MariaDB [MaGeRepo]> insert into MaGe (Name) values ('Wtc'),('Wzx'); ##在節點3中插入資料“Wtc”、“Wzx”
6、節點2開啟mysql伺服器,並查看其資料庫
[root@node1 ~]# service mysql start ##啟動節點2
Starting MySQL.....SST in progress, setting sleep higher. SUCCESS!
[root@node1 ~]# mysql ##串連至mysql服務
MariaDB [MaGeRepo]> select * from MaGe; ##查看錶中的資料
+----+-------+
| ID | Name
+----+-------+
| 1 | MaGe
| 3 | Lweim
| 4 | Wtc
| 6 | Wzx
+----+-------+
由此可見,當其中某一台伺服器宕機後,即使資料發生改變,重新上線之後也可同步資料,但需要注意的是ID並不是按自動成長次序增長的,解決辦法如下:
a:設定一個全域分配ID產生器,解決資料插入時ID順序不一致問題
b:手動指定ID號,不讓其自動產生
更多詳情見請繼續閱讀下一頁的精彩內容: