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

來源:互聯網
上載者:User

標籤:mysql高可用   manager   master   slave   mha   galera cluster   

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服務

[[email protected] ~]# yum install MariaDB-Galera-server -y

(2)編輯其設定檔

[[email protected] ~]# rpm -ql galera  ##查看相關檔案/usr/lib64/galera/libgalera_smm.so    [[email protected] ~]# 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)初次開機時,需要初始化叢集

[[email protected] ~]# /etc/rc.d/init.d/mysql start --wsrep-new-cluster   ##在某一個節點上啟動mysql服務


2、部署節點2

(1)安裝MariaDB-Galera-server服務

[[email protected] ~]# yum install MariaDB-Galera-server -y

(2)啟動服務

[[email protected] ~]# service mysql startStarting MySQL....SST in progress, setting sleep higher. SUCCESS!


3、部署節點3

(1)安裝MariaDB-Galera-server服務

[[email protected] ~]# yum install MariaDB-Galera-server -y

(2)啟動服務

[[email protected] ~]# service mysql startStarting MySQL....SST in progress, setting sleep higher. SUCCESS!


4、三個節點都串連mysql服務,隨後建立一個資料庫,查看其它兩個節點是否複製

[[email protected] ~]# mysql    ##節點1串連mysql服務MariaDB [(none)]> create database MaGeRepo;   ##在節點1上建立資料庫“MaGeRepo”,並查看MariaDB [(none)]> show databases;+--------------------+| Database           +--------------------+| information_schema | MaGeRepo           | mysql              | performance_schema | test               +--------------------+[[email protected] ~]# mysql   ##節點2串連至mysql服務MariaDB [(none)]> show databases;   ##查看資料庫+--------------------+| Database           +--------------------+| information_schema | MaGeRepo           | mysql              | performance_schema | test               +--------------------+[[email protected] ~]# 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伺服器,並查看其資料庫

[[email protected] ~]# service mysql start   ##啟動節點2Starting MySQL.....SST in progress, setting sleep higher. SUCCESS![[email protected] ~]# mysql   ##串連至mysql服務MariaDB [MaGeRepo]> select * from MaGe;   ##查看錶中的資料+----+-------+| ID | Name  +----+-------+|  1 | MaGe  |  3 | Lweim|  4 | Wtc   |  6 | Wzx   +----+-------+

由此可見,當其中某一台伺服器宕機後,即使資料發生改變,重新上線之後也可同步資料,但需要注意的是ID並不是按自動成長次序增長的,解決辦法如下:

a:設定一個全域分配ID產生器,解決資料插入時ID順序不一致問題

b:手動指定ID號,不讓其自動產生



二、基於MHA實現MySQL的高可用

準備環境:CentOS 7

MHA Manager節點
IP:172.18.42.200
MHA Node Master節點
IP:172.18.42.201
MHA Node Slave1節點
IP:172.18.42.202
MHA Node Slave2節點
IP:172.18.42.203

前提:基於MHA實現MySQL高可用時,各節點之間需要基於ssh秘鑰進行通訊

[[email protected] ~]# ssh-keygen -t rsa -P ‘‘  ##在Manager節點上基於rsa演算法產生秘鑰,密碼為空白[[email protected] ~]# cat .shh/id_rsa.pub &>> .shh/authorized_keys   ##先要確認能與本地進行通訊[[email protected] ~]# chmod  600 .ssh/id_rsa .ssh/authorized_keys   ##更改秘鑰許可權[[email protected]  ~]#  scp -p .ssh/id_rsa .ssh/authorized_keys [email protected]:/root/.ssh/   ##Manager節點把秘鑰、公開金鑰發送給每個節點,使各個節點可以進行秘鑰通訊(第一此通訊需要秘鑰,後續不需要)[[email protected]  ~]#  scp -p .ssh/id_rsa .ssh/authorized_keys [email protected]:/root/.ssh/[[email protected]  ~]#  scp -p .ssh/id_rsa .ssh/authorized_keys [email protected]:/root/.ssh/[[email protected] ~]# ssh 172.18.42.201 ‘ifconfig‘  ##可基於此命令讓各個節點之間進行測試是否建立串連Are you sure you want to continue connecting (yes/no)? yes   ##第一次建立串連需要認證[email protected]‘s password:


1、部署MHA Manager節點

(1)安裝mha4mysql-manager、mha4mysql-node

[[email protected] ~]# yum install mha4mysql-node-0.56-0.el6.noarch.rpm mha4mysql-manager-0.56-0.el6.noarch.rpm -y

(2)建立設定檔,並編輯

[roo[email protected] ~]# vim /etc/masterha/app1.cnf[server default]user=wtc   ##能遠端連線至各mysql節點的使用者管理帳號,需要mysql節點建立此使用者password=wtc   manager_workdir=/data/masterha/app1   ##管理節點的工作目錄    manager_log=/data/masterha/app1/manager.log   ##管理節點的記錄檔路徑remote_workdir=/data/masterha/app1  ##遠端每個mysql節點為Manager節點提供工作目錄,會自動建立 ssh_user=root   ##以root使用者遠端管理,,基於秘鑰認證無需密碼;如果不基於密碼,需要指明密碼repl_user=repluser   ##複製許可權使用者帳號repl_password=replpassping_interval=1    ##每隔多長時間探測一次Master節點是否線上 [server1]    ##定義mysql節點hostname=172.18.42.201candidate_master=1    ##當主節點宕機以後,這個節點是否可以成為新的主節點##no_master=1    ##當主節點宕機後,這個節點不會成為新的主節點[server2]hostname=172.18.42.202candidate_master=1[server3]hostname=172.18.42.203candidate_master=1


2、部署Master節點

(1)安裝mariadb-server、mha4mysql-node服務

[[email protected] ~] yum install mariadb-server mha4mysql-node-0.56-0.el6.noarch.rpm -y

(2)編輯其設定檔

[[email protected] ~]# vim /etc/my.cnf[mysqld]innodb_file_per_table = ONskip_name_resolve = ONlog_bin=mysql-bin  relay-log=relay-logserver-id=1[[email protected] ~]# systemctl start mariadb.serviceMariaDB [(none)]> show master status;mysql-bin.000003      245MariaDB [(none)]> grant replication slave,replication client on *.* to ‘repluser‘@‘172.18.%.%‘ identified by ‘replpass‘;   ##建立具有複製許可權的使用者


3、部署Slave1

(1)安裝mariadb-server、mha4mysql-node服務

[[email protected] ~] yum install mariadb-server mha4mysql-node-0.56-0.el6.noarch.rpm -y

(2)編輯其設定檔

[[email protected] ~]# vim /etc/my.cnf[mysqld]innodb_file_per_table = ONskip_name_resolve = ONlog_bin=mysql-binrelay-log=relay-logserver-id=2read_only=1   ##MHA通過這個來判斷那個是mysql主伺服器    relay_log_purge=0[[email protected] ~]# systemctl start mariadb.serviceMariaDB [(none)]> change master to master_host=‘172.18.42.201‘,master_user=‘repluser‘,master_password=‘replpass‘,master_log_file=‘mysql-bin.000003‘,master_log_pos=245;  ##串連至Master節點MariaDB [(none)]> start slave;MariaDB [(none)]> show slave status\G; Slave_IO_Running: Yes Slave_SQL_Running: Yes


4、部署Slave2

(1)安裝mariadb-server、mha4mysql-node服務

[[email protected] ~] yum install mariadb-server mha4mysql-node-0.56-0.el6.noarch.rpm -y

(2)編輯其設定檔

[[email protected] ~]# vim /etc/my.cnfinnodb_file_per_table = ONskip_name_resolve = ONlog_bin=mysql-binrelay-log=relay-logserver-id=3read_only=1relay_log_purge=0[[email protected] ~]# systemctl start mariadb.serviceMariaDB [(none)]> change master to master_host=‘172.18.42.201‘,master_user=‘repluser‘,master_password=‘replpass‘,master_log_file=‘mysql-bin.000003‘,master_log_pos=245;  ##串連至Master節點MariaDB [(none)]> start slave;MariaDB [(none)]> show slave status\G; Slave_IO_Running: Yes Slave_SQL_Running: Yes


5、在Master節點建立系統管理使用者帳號,在Manager節點檢測各檢點之間的串連

MariaDB [(none)]> grant all on *.* to ‘wtc‘@‘172.18.%.%‘ identified by ‘wtc‘;  ##實現了主從複製,在Msater節點建立的同時,slave節點也會建立[[email protected] ~]# masterha_check_ssh --conf=/etc/masterha/app1.cnf   ##測試各節點之間ssh互相通訊是否okWed Apr 20 10:17:40 2016 - [info] All SSH connection tests passed successfully.[[email protected] ~]# masterha_check_repl --conf=/etc/masterha/app1.cnf   ##檢查各個節點之間主從複製是否ok172.18.42.201(172.18.42.201:3306) (current master)   ##201是主節點,202、203是從節點 +--172.18.42.202(172.18.42.202:3306) +--172.18.42.203(172.18.42.203:3306)MySQL Replication Health is OK.


6、啟動Manager節點服務,把Master節點宕機,查看是否轉換

[[email protected] ~]# masterha_manager --conf=/etc/masterha/app1.cnf    ##啟動Manager服務Wed Apr 20 10:27:35 2016 - [warning] Global configuration file /etc/masterha_default.cnf not found. Skipping.Wed Apr 20 10:27:35 2016 - [info] Reading application default configuration from /etc/masterha/app1.cnf..Wed Apr 20 10:27:35 2016 - [info] Reading server configuration from /etc/masterha/app1.cnf..[[email protected] ~]# systemctl stop mariadb.service    ##關掉節點2的mariadb服務MariaDB [(none)]> show slave status\G;    ##查看Slave2節點的複製線程狀態 Master_Host: 172.18.42.202   ##Master節點轉為Slave1節點了 Slave_IO_Running: Yes Slave_SQL_Running: Yes


7、現在我們開啟Master節點,看其是否成為從節點

[[email protected] ~]# systemctl start mariadb.service   ##開啟Master節點的mariadb服務MariaDB [(none)]> change master to master_host=‘172.18.42.202‘,master_user=‘repluser‘,master_password=‘replpass‘,master_log_file=‘mysql-bin.000003‘,master_log_pos=245;  ##此時“master_host”應該指向Slave1的IP##使用的二進位記錄檔、事件是事先備份好的(在實現主從複製之前,備份一份)MariaDB [(none)]> start slave;  ##啟動複製線程MariaDB [(none)]> show slave status\G; Master_Host: 172.18.42.202   ##此時IP為Slave1的IP Slave_IO_Running: Yes Slave_SQL_Running: Yes[[email protected] ~]# masterha_check_repl --conf=/etc/masterha/app1.cnf   ##在Manager節點上查看一次,主從複製是否ok172.18.42.202(172.18.42.202:3306) (current master)   ##此時,主節點成為了Slave1 +--172.18.42.201(172.18.42.201:3306) +--172.18.42.203(172.18.42.203:3306)MySQL Replication Health is OK.



問題小結:

1、masterha_manager運行時是工作於前台的,而且不能斷開,一旦進行主從切換後,就停止工作,我們需要手動把它開啟,這時需要指令碼來實現自行監控

2、在使用MHA方法時,啟動Manager節點的服務有可能會失敗,可以嘗試一下先把Manager節點的記錄檔路徑建立好"/data/masterha/app1"

3、在配置mysql各節點的設定檔時,主從都需要開啟中繼日誌、二進位日誌

  主節點開啟中繼日誌和二進位日誌,是因為主節點宕機以後啟用時會變為從節點

  從節點需要開啟中繼日誌和二進位日誌,是因為主節點宕機以後,任何一個從節點都有可能轉移稱為主節點

本文出自 “wtc” 部落格,請務必保留此出處http://wangtianci.blog.51cto.com/11265133/1790229

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

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.