天天看點

mysql5.7 高可用mha_mysql5.7高可用架構之MHA

一、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連接配接驗證問題。

mysql5.7 高可用mha_mysql5.7高可用架構之MHA

解決方法:在server5中生成密鑰并分發給各個節點即可。

--->  ssh-keygen            # 全部回車

mysql5.7 高可用mha_mysql5.7高可用架構之MHA

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

mysql5.7 高可用mha_mysql5.7高可用架構之MHA

--->  scp -r .ssh/ server2:              # 把生成的key複制給各個節點

--->  scp -r .ssh/ server3:

--->  scp -r .ssh/ server4:

# 再次執行ssh的檢測,是以下狀态代表成功

--->  masterha_check_ssh  --conf=/etc/masterha/app1.cnf

mysql5.7 高可用mha_mysql5.7高可用架構之MHA

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

mysql5.7 高可用mha_mysql5.7高可用架構之MHA

# 解決方法如下:在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的。

mysql5.7 高可用mha_mysql5.7高可用架構之MHA

3)檢視MHA MANAGER的狀态

---> masterha_check_status --conf=/etc/masterha/app1.cnf  # 此時監控還沒有打開

mysql5.7 高可用mha_mysql5.7高可用架構之MHA

4)啟動MHA Manager監控

mysql5.7 高可用mha_mysql5.7高可用架構之MHA

5) 檢視啟動日志

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

mysql5.7 高可用mha_mysql5.7高可用架構之MHA