基於MHA和Galera Cluster實現MySQL高可用

來源:互聯網
上載者:User

基於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號,不讓其自動產生

更多詳情見請繼續閱讀下一頁的精彩內容:

  • 1
  • 2
  • 下一頁

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.