一、MHA簡介
MHA(Master High Availability)目前在mysql高可用方面比較成熟。是一套優秀的作為 mysql高可用性環境下故障切換和主從提升的高可用軟體。在MySQL故障切換過程中,MHA 能做到在0~30秒之内自動完成資料庫的故障切換操作,并且在進行故障切換的過程中,MHA 能在最大程度上保證資料的一緻性,以達到真正意義上的高可用。
該軟體由兩部分組成:MHA Manager(管理節點)和MHA Node(資料節點)。管理節點可以單獨部署在一台獨立的機器上來管理多個master-slave叢集,也可以部署在一台slave節點上。資料節點運作在每台mysql伺服器上。Manager會定期檢查master,若出現故障時,會自動将最新資料的slave提升為新的master,然後将其他的slave指向新的master。整個故障轉移程式完全透明。
二、搭建過程
server2 :master node
Server3和server4: slave node
Server5:Manager
在server2、3、4為gtid主從複制的環境下進行mysql的高可用搭建。(gtid的主從複制的搭建,可以參考之前部落格https://www.cnblogs.com/uthnb/p/9719800.html)
1)首先進行軟體的安裝:(在server2、3、4為gtid主從複制的情況進行如下操作)
Server2:
---> yum install mha4mysql-node-0.56-0.el6.noarch.rpm
Server3:
---> yum install mha4mysql-node-0.56-0.el6.noarch.rpm
---> mysql -p
Mysql > set global read_only=1 # 設定節點為隻讀
Server4:
---> yum install mha4mysql-node-0.56-0.el6.noarch.rpm
---> mysq -p
Mysql > set global read_only=1
Server5:
---> yum install mha4mysql-node-0.56-0.el6.noarch.rpm mha4mysql-manager-0.56-0.el6.noarch.rpm
perl-Config-Tiny-2.12-7.1.el6.noarch.rpm perl-Email-Date-Format-1.002-5.el6.noarch.rpm
perl-Log-Dispatch-2.27-1.el6.noarch.rpm perl-Mail-Sender-0.8.16-3.el6.noarch.rpm
perl-Mail-Sendmail-0.79-12.el6.noarch.rpm perl-MIME-Lite-3.027-2.el6.noarch.rpm
perl-MIME-Types-1.28-2.el6.noarch.rpm perl-Parallel-ForkManager-0.7.9-1.el6.noarch.rpm
2)對manager(server5)進行配置
---> mkdir /etc/masterha
---> cd /etc/masterha
---> vim app1.cnf
[server default]
manager_workdir=/etc/masterha
manager_log=/etc/masterha/manager.log
master_binlog_dir=/var/lib/mysql
#master_ip_failover_script= /usr/local/bin/master_ip_failover
#master_ip_online_change_script= /usr/local/bin/master_ip_online_change
password='Xniu+123'
user=root ping_interval=1
remote_workdir=/tmp0
repl_password='Xniu+123'
repl_user=repl
#report_script=/usr/local/send_report
#secondary_check_script= /usr/local/bin/masterha_secondary_check -s server03 -s server02 #shutdown_script=""
ssh_user=root
[server2]
hostname=172.25.2.2
port=3306
[server3]
hostname=172.25.2.3
port=3306
candidate_master=1
check_repl_delay=0
[server4]
hostname=172.25.2.4
port=3306
---> masterha_check_ssh --conf=/etc/masterha/app1.cnf # 此時會出現三個節點之間ssh連接配接驗證問題。

解決方法:在server5中生成密鑰并分發給各個節點即可。
---> ssh-keygen # 全部回車

---> ssh-copy-id 172.25.2.5 # 把本機設定為鎖

---> scp -r .ssh/ server2: # 把生成的key複制給各個節點
---> scp -r .ssh/ server3:
---> scp -r .ssh/ server4:
# 再次執行ssh的檢測,是以下狀态代表成功
---> masterha_check_ssh --conf=/etc/masterha/app1.cnf

---> masterha_check_repl --conf=/etc/masterha/app1.cnf # 進行repl同步複制的檢測,會出現如下問題

# 解決方法如下:在server2中進行root使用者的授權,在srver3和4中對repl使用者授權
Server2: # 建立監控使用者
Mysql > grant all on *.* root@’%’ identified by ‘Xniu+123’;
Server3和server4:
Mysql> grant replication slave on *.* to repl@’%’ identified by ‘Xniu+123’;
# 修改之後,在執行repl的檢測是ok的。

3)檢視MHA MANAGER的狀态
---> masterha_check_status --conf=/etc/masterha/app1.cnf # 此時監控還沒有打開

4)啟動MHA Manager監控

5) 檢視啟動日志
# 最後一行Ping(SELECT) succeeded, waiting until MySQL doesn't respond.."說明整個系統已經開始監控了。
