搭建mysql高可用集群之MHA

一、簡介

MHA(Master HA)是一款開源的 MySQL 的高可用程序,它為 MySQL 主從復(fù)制架構(gòu)提供了 automating master failover 功能。MHA 在監(jiān)控到 master 節(jié)點故障時,會提升其中擁有最新數(shù)據(jù)的 slave 節(jié)點成為新的master 節(jié)點,在此期間,MHA 會通過于其它從節(jié)點獲取額外信息來避免一致性方面的問題。MHA 還提供了 master 節(jié)點的在線切換功能,即按需切換 master/slave 節(jié)點。
  MHA 是由日本人 yoshinorim(原就職于DeNA現(xiàn)就職于FaceBook)開發(fā)的比較成熟的 MySQL 高可用方案。MHA 能夠在30秒內(nèi)實現(xiàn)故障切換,并能在故障切換中,最大可能的保證數(shù)據(jù)一致性。目前淘寶也正在開發(fā)相似產(chǎn)品 TMHA, 目前已支持一主一從。

二、MHA 服務(wù)工作流程

1)把宕機的master二進(jìn)制日志保存下來。
2)找到binlog位置點最新的slave。
3)在binlog位置點最新的slave上用relay log(差異日志)修復(fù)其它slave。
4)將宕機的master上保存下來的二進(jìn)制日志恢復(fù)到含有最新位置點的slave上。
5)將含有最新位置點binlog所在的slave提升為master。
6)將其它slave重新指向新提升的master,并開啟主從復(fù)制。

三.MHA架構(gòu)圖

image.png

四.MHA工具介紹

MHA軟件由兩部分組成,Manager工具包和Node工具包,具體的說明如下:

masterha_check_ssh #檢查MHA的
ssh-key masterha_check_repl #檢查主從復(fù)制情況
masterha_manger #啟動MHA
masterha_check_status #檢測MHA的運行狀態(tài)
masterha_master_monitor #檢測master是否宕機
masterha_master_switch #手動故障轉(zhuǎn)移
masterha_conf_host #手動添加server信息
masterha_secondary_check #建立TCP連接從遠(yuǎn)程服務(wù)器
masterha_stop #停止MHA

五.MHA的搭建

1、搭建MHA架構(gòu)圖

image.png

2、相關(guān)配置

192.168.0.4 manager
192.168.0.5 node1
192.168.0.6 node2
192.168.0.7 node3

為了方便操作,每個機器都做好解析vim /etc/hosts

3、部署一主多從的mysql集群

這里我們用192.168.0.5 node1 為集群的主節(jié)點

  • 在主節(jié)點上操作
[root@node1 ~]# vim /etc/my.cnf
    [mysqld]
    server-id = 1               //復(fù)制集群中的各節(jié)點的id均必須唯一
    log-bin = master-log        //開啟二進(jìn)制日志
    relay-log = relay-log       //開啟中繼日志
    skip_name_resolve           //關(guān)閉名稱解析(非必須)
[root@node1 ~]# systemctl restart mysqld
# 進(jìn)入主 mysql中添加主從同步時使用的用戶
mysql> grant replication slave,replication client on *.* to 'slave'@'192.168.0.%' identified by 'keer';
mysql> flush privileges;
mysql> show master status\G
  • 所用從節(jié)點上操作
[root@node2 ~]# vim /etc/my.cnf
    [mysqld]
    server-id = 2               //復(fù)制集群中的各節(jié)點的id均必須唯一;
    relay-log = relay-log       //開啟中繼日志
    log-bin = master-log        //開啟二進(jìn)制日志
    read_only = ON              //啟用只讀屬性
    relay_log_purge = 0         //是否自動清空不再需要中繼日志
    skip_name_resolve           //關(guān)閉名稱解析(非必須)
    log_slave_updates = 1       //使得更新的數(shù)據(jù)寫進(jìn)二進(jìn)制日志中
[root@slave1 ~]# systemctl restart mysqld
# 進(jìn)入從mysql服務(wù)器中,填寫主從的配置
mysql> change master to master_host='node1', 
    -> master_user='slave', 
    -> master_password='keer',
    -> master_log_file='mysql-bin.000001',
    -> master_log_pos=415;
mysql> start slave;
mysql> show slave status\G

請確保server-id 的不同

4、安裝配置MHA

  • 準(zhǔn)備 ssh 互通環(huán)境

在所有服務(wù)器中執(zhí)行

[root@manager ~]# ssh-keygen -t rsa
[root@manager ~]# ssh-copy-id -i .ssh/id_rsa.pub root@manager

在manager主機上執(zhí)行

scp authorized_keys root@node1:~/.ssh/
scp authorized_keys root@node2:~/.ssh/
scp authorized_keys root@node3:~/.ssh/

這樣我們就完成了四臺機器之間基于ssh 互相通信,以實現(xiàn)遠(yuǎn)程控制及數(shù)據(jù)管理功能。簡單起見,可在Manager節(jié)點生成密鑰對兒,并設(shè)置其可遠(yuǎn)程連接本地主機后, 將私鑰文件及authorized_keys文件復(fù)制給余下的所有節(jié)點即可。

  • 安裝 MHA包

https://directory.fsf.org/wiki/Mha4mysql-manager

下載MHA manager 和node 包
mha4mysql-manager-0.580.el7.centos.noarch.rpm
mha4mysql-node-0.58-0.el7.centos.noarch.rpm

yum -y install mha4mysql-manager-0.580.el7.centos.noarch.rpm
yum -y install  mha4mysql-node-0.58-0.el7.centos.noarch.rpm
  • 定義 MHA 管理配置文件
    為MHA專門創(chuàng)建一個管理用戶, 方便以后使用, 在mysql的主節(jié)點上, 三個節(jié)點自動同步:
[root@manager ~]# mkdir /etc/masterha
[root@manager ~]# vim /etc/masterha/app1.cnf
[server default]            //適用于server1,2,3個server的配置
user=mhaadmin               //mha管理用戶
password=mhapass            //mha管理密碼
manager_workdir=/etc/masterha/app1      //mha_master自己的工作路徑
manager_log=/etc/masterha/manager.log   // mha_master自己的日志文件
remote_workdir=/mydata/masterha/app1        //每個遠(yuǎn)程主機的工作目錄在何處
ssh_user=root               // 基于ssh的密鑰認(rèn)證
repl_user=slave             //數(shù)據(jù)庫用戶名
repl_password=keer      //數(shù)據(jù)庫密碼
ping_interval=1             //ping間隔時長
[server1]                   //節(jié)點1
hostname=192.168.0.5    //節(jié)點1主機地址
ssh_port=22                 //節(jié)點1的ssh端口
candidate_master=1          //主節(jié)點
[server2]
hostname=192.168.0.6
ssh_port=22
candidate_master=1
[server3]
hostname=192.168.0.7
ssh_port=22
candidate_master=1
  • 對三個節(jié)點進(jìn)行檢測
    1、檢測各節(jié)點間 ssh 互信通信配置是否 ok
[root@manager ~]# masterha_check_ssh -conf=/etc/masterha/app1.cnf

如果最后一行顯示為[info]All SSH connection tests passed successfully.則表示成功。

2、檢查管理的MySQL復(fù)制集群的連接配置參數(shù)是否OK

[root@manager ~]# masterha_check_repl -conf=/etc/masterha/app1.cnf

最后出現(xiàn) MySQL Replication Health is OK.則表示成功

  • 啟動 MHA
    我們在 manager 節(jié)點上執(zhí)行以下命令來啟動 MHA:
[root@manager ~]# nohup masterha_manager -conf=/etc/masterha/app1.cnf &> /etc/masterha/manager.log &

啟動成功以后,我們來查看一下 master 節(jié)點的狀態(tài):

[root@manager ~]# masterha_check_status -conf=/etc/masterha/app1.cnf
mha (pid:7598) is running(0:PING_OK), master:192.168.0.4

關(guān)閉MHA的命令

root@manager ~]# masterha_stop -conf=/etc/masterha/app1.cnf
  • 測試MHA的故障轉(zhuǎn)移
    在mysql 主服務(wù)器node1中
[root@node1 ~]# systemctl stop mysqld 

在manager中查看日志

tail -200 /etc/master/manager.log
.....
.....
Master 192.168.0.5(192.168.0.5:3306) is down!

Check MHA Manager logs at node1:/etc/mha_master/manager.log for details.

Started automated(non-interactive) failover.
The latest slave 192.168.0.6(192.168.0.6:3306) has all relay logs for recovery.
Selected 192.168.0.6(192.168.0.6:3306) as a new master.
192.168.0.6(192.168.0.6:3306): OK: Applying all logs succeeded.
192.168.0.7(192.168.0.7:3306): This host has the latest relay log events.
Generating relay diff files from the latest slave succeeded.
192.168.0.7(192.168.0.7:3306): OK: Applying all logs succeeded. Slave started, replicating from 192.168.0.6(192.168.0.6:3306)
192.168.0.6(192.168.0.6:3306): Resetting slave info succeeded.
Master failover to 192.168.0.6(192.168.0.6:3306) completed successfully.

從中我們可以看到 檢測到192.168.0.5 節(jié)點故障,然后執(zhí)行了故障 轉(zhuǎn)移,將192.168.0.6提升為了主節(jié)點。

注意,故障轉(zhuǎn)移完成后, manager將會自動停止, 此時使用 masterha_check_status 命令檢測將會遇到錯誤提示, 如下所示:

[root@manager ~]# masterha_check_status -conf=/etc/masterha/app1.cnf
mha is stopped(2:NOT_RUNNING).
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容