
MHA(Master HA)是一款開源的 MySQL 的高可用程式,它為 MySQL 主從復制架構提供了 automating master failover 功能,MHA 在監控到 master 節點故障時,會提升其中擁有最新資料的 slave 節點成為新的master 節點,在此期間,MHA 會通過于其它從節點獲取額外資訊來避免一致性方面的問題,MHA 還提供了 master 節點的在線切換功能,即按需切換 master/slave 節點,
MHA 是由日本人 yoshinorim(原就職于DeNA現就職于FaceBook)開發的比較成熟的 MySQL 高可用方案,MHA 能夠在30秒內實作故障切換,并能在故障切換中,最大可能的保證資料一致性,目前淘寶也正在開發相似產品 TMHA, 目前已支持一主一從,
一、MHA的組成
(一)MHA中的角色
MHA 服務有兩種角色, MHA Manager(管理節點)和 MHA Node(資料節點):
- MHA Manager:通常單獨部署在一臺獨立機器上管理多個 master/slave 集群(組),每個master/slave 集群稱作一個application,用來管理統籌整個集群,
- MHA Node:運行在每臺 MySQL 服務器上(master/slave/manager),它通過監控具備決議和清理 logs 功能的腳本來加快故障轉移,主要是接收管理節點所發出指令的代理,代理需要運行在每一個 mysql 節點上,簡單講node就是用來收集從節點服務器上所生成的bin-log,對比打算提升為新的主節點之上的從節點的是否擁有并完成操作,如果沒有發給新主節點在本地應用后提升為主節點,
(二)MHA提供的工具
MHA會提供諸多工具程式,其常見的如下所示:
- Manager節點

- Node節點(這些工具通常由MHA Manager的腳本觸發,無需人為操作)

二、MHA的作業原理

- 從宕機崩潰的master保存二進制日志事件(binlog events);
- 識別含有最新更新的 slave ;
- 應用差異的中繼日志(relay log) 到其他 slave ;
- 應用從 master 保存的二進制日志事件(binlog events);
- 提升一個 slave 為新 master ;
- 使用其他的 slave 連接新的 master 進行復制,
三、部署MHA
(一)準備實驗環境
- 三臺主機:mysql111、mysql112、mysql113
- 作業系統:CentOS
- 配置主機名(/etc/hosts)
- 配置免密碼登錄
- 每臺主機安裝MySQL
(二)搭建主從環境
- 每臺MySQL開啟binlog,設定server-id
vi /etc/my.cnf log-bin=mysql-binlog server-id=1 (注意:每臺MySQL設定不同的server-id) show variables like '%log_bin%';
- 在所有機器上,創建主從復制的賬號
create user 'repl'@'192.168.79.%' identified by 'Welcome_1'; grant replication slave on *.* to 'repl'@'192.168.79.%'; flush privileges;
- 在所有機器上,創建管理賬號
create user 'myadmin'@'192.168.79.%' identified by 'Welcome_1'; grant all privileges on *.* to 'myadmin'@'192.168.79.%'; flush privileges;
- 在主庫和從庫上,啟用GTID
set @@GLOBAL.ENFORCE_GTID_CONSISTENCY = ON; set @@GLOBAL.GTID_MODE = OFF_PERMISSIVE; set @@GLOBAL.GTID_MODE = ON_PERMISSIVE; set @@GLOBAL.GTID_MODE = ON;
引數說明:
GTID是MySQL 5.6的新特性,其全稱是Global Transaction Identifier,可簡化MySQL的主從切換以及Failover,GTID用于在binlog中唯一標識一個事務,當事務提交時,MySQL Server在寫binlog的時候,會先寫一個特殊的Binlog Event,型別為GTID_Event,指定下一個事務的GTID,然后再寫事務的Binlog,主從同步時GTID_Event和事務的Binlog都會傳遞到從庫,從庫在執行的時候也是用同樣的GTID寫binlog,這樣主從同步以后,就可通過GTID確定從庫同步到的位置了,也就是說,無論是級聯情況,還是一主多從情況,都可以通過GTID自動找點兒,而無需像之前那樣通過File_name和File_position找點兒了,
- 在從庫上分別配置主從復制命令并開啟主從同步
change master to master_host='mysql111',master_user='repl',\ master_password='Welcome_1',master_auto_position=1; start slave;
- 在從庫上查看主從復制的狀態
show slave status\G;

- 測驗主從復制
(三)安裝MHA
- 所有節點安裝node軟體依賴包和node軟體
yum -y install perl-DBD-MySQL rpm -ivh mha4mysql-node-0.58-0.el7.centos.noarch.rpm
- 在mysql111上安裝安裝manager軟體依賴包
yum install -y perl-Config-Tiny yum install -y epel-release yum install -y perl-Log-Dispatch yum install -y perl-Parallel-ForkManager yum install -y perl-Time-HiRes
- 在mysql111上安裝安裝manager軟體
rpm -ivh mha4mysql-manager-0.58-0.el7.centos.noarch.rpm
(四)創建Manager的組態檔
#創建組態檔目錄、日志目錄 mkdir -p /etc/mha mkdir -p /var/log/mha/log #編輯mha組態檔 vi /etc/mha/mha.cnf [server default] manager_log=/var/log/mha/log/manager manager_workdir=/var/log/mha/log master_binlog_dir=/var/lib/mysql user=myadmin password=Welcome_1 ping_interval=2 repl_user=repl repl_password=Welcome_1 ssh_user=root [server1] hostname=mysql111 port=3306 [server2] hostname=mysql112 port=3306 [server3] hostname=mysql113 port=3306
(五)檢查狀態,并開啟MHA
- 檢查互信
masterha_check_ssh --conf=/etc/mha/mha.cnf

- 檢查主從復制狀態
masterha_check_repl --conf=/etc/mha/mha.cnf

- 開啟MHA-manager
nohup masterha_manager --conf=/etc/mha/mha.cnf > /var/log/mha/log/manager.log < /dev/null 2>&1 &
- 查看MHA狀態
masterha_check_status --conf=/etc/mha/mha.cnf

- 測驗HA高可用的自動切換
在mysql111上,執行shutdown操作 mysqladmin -uroot -pWelcome_1 shutdown MHA會自動進行主從切換,切換完成后,MHA行程會自動停止運行, 在mysql112和mysql113上觀察,執行下面的陳述句: show slave status\G;


轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/3141.html
標籤:MySQL
