Mysql 5.7 MHA 高可用方案

Mysql 5.7 MHA 高可用方案

Mysql 5.7 MHA 高可用方案


MHA,即Master High Availability Manager and Tools for Mysql,該工具僅適用於 mysql replication環境,目的在於維持master主庫高可用性MHA(master high availiability)是自動的master故障轉移和slave提升的軟件包,基於mysql複製(異步和半同步),它包含兩部分 MHA Manager 和 MHA Node

下載:

https://github.com/yoshinorim/mha4mysql-manager/releases

https://github.com/yoshinorim/mha4mysql-node/releases

Mysql 5.7 MHA 高可用方案

Mysql 5.7 MHA 高可用方案

實戰演練

環境介紹:

使用三臺機器來完成本次MHA搭建

10.106.145.181 master node(主庫,並需要在上面安裝數據節點)

10.106.145.182 slave1 node(作為第一個從庫,並需要在上面安裝數據節點)

10.168.145.183 slave2 manager node(作為第二個從庫,在其上面即安裝管理節點,又安裝數據節點)

Vip 10.168.145.184 虛擬ip地址

Mysql 5.7 MHA 高可用方案


配置三臺機器互信

基於安全密鑰的驗證方式在本地主機中生成密鑰對 並將公鑰傳送到遠程主機中

切換到 root使用的賬戶上產生密鑰對


1. 產生密鑰 (分別在所有機器上執行)

ssh-keygen -t rsa

產生文件如下兩個

id_rsa id_rsa.pub

2. 把本機的公鑰追加到自身的 ~/.ssh/authorized_keys 文件裡面

cd ~/.ssh/

-- 該指令 後的ip是本身自己的ip地址(有確定 並 輸入 密碼的動作)

ssh-copy-id 10.106.145.181

文件變成了 四個

authorized_keys id_rsa id_rsa.pub known_hosts

將產生的 authorized_keys 複製到 第二臺機器上去

scp /root/.ssh/authorized_keys 10.106.145.182:/root/.ssh/

3. 登錄 到182 機器上繼續操作

cd ~/.ssh/

ssh-copy-id 10.106.145.182

scp /root/.ssh/authorized_keys 10.106.145.183:/root/.ssh/

4. 登錄 到183 機器上繼續操作

cd ~/.ssh/

ssh-copy-id 10.106.145.183

最後將在183 上產生的authorized_keys 複製到每個機器上,這裡我們是3臺電腦

scp /root/.ssh/authorized_keys [email protected]:/root/.ssh/

scp /root/.ssh/authorized_keys [email protected]:/root/.ssh/

5.三臺機器上都正確配置 hosts

10.106.145.181 master01.hadoop

10.106.145.182 slave01.hadoop

10.106.145.183 slave02.hadoop

搭建主從環境

一主兩從,使用mysql5.7 基於GTID+row 模式搭建所以mysql上創建主從複製賬號

create user repl@'10.106.145.%' identified by 'repl';

grant replication slave on *.* to repl@'10.106.145.%';

flush privileges;

創建管理賬號

create user zs@'10.106.145.%' identified by '123456';

grant all privileges on *.* to zs@'10.106.145.%';

flush privileges;

因為我們使用的是GTID是的同步,就不需要添加—master-data參數

主庫配置

gtid_mode=on

enforce_gtid_consistency=on

binlog_format=row

server_id 不能和從庫一樣

從庫配置

gtid_mode=on

enforce_gtid_consistency=on

log_slave_updates=1

雖然log_slave_updates在mysql5.7之後可以關閉,使用gtid_executed這張表,但是還是建議在從庫中開啟(萬一需要從 從庫繼續向下一級從庫同步數據)

如果需要將從庫作為主庫繼續向下傳遞數據我們還需要繼續在從庫上添加下面兩項配置log_bin=on 和 binlog_format=row

server_id 和主庫不一樣


主庫上進行備份指令

mysqldump -S /usr/local/mysql/mysql.sock --single-transaction -uroot -p123456 --all-databases>/home/hadoop/all.sql

1. 將all.sql 傳遞到其他兩個庫上並進行還原

Source all.sql

2. 開啟同步

CHANGE MASTER TO

MASTER_HOST='10.106.145.181',

MASTER_USER='repl',

MASTER_PASSWORD='repl',

MASTER_PORT=3306,

MASTER_AUTO_POSITION=1;

start slave ;

show slave status;

3. 測試gtid主從複製

主庫:

use test;

create table a (id int ,primary key (id));

insert into a values(1)

從庫:

use test;

select *from a;

Mysql 5.7 MHA 高可用方案

安裝MHA-node節點

三臺機器全部安裝node節點

yum install -y epel-release

yum install perl-DBD-MySQL

安裝perl- CPAN*軟件包

yum -y install perl-CPAN

tar -zxvf mha4mysql-node-0.58.tar.gz

cd mha4mysql-node-0.58

perl Makefile.PL

make && make install

Mysql 5.7 MHA 高可用方案

給mha創建軟連接 注意要根據mysql安裝真實路徑進行設置

ln -s /usr/local/mysql/bin/mysqlbinlog /usr/local/bin/mysqlbinlog

ln -s /usr/local/mysql/bin/mysql /usr/local/bin/mysql

安裝MHA-manager管理節點

在一個從節點安裝安裝epel源

yum install -y epel-release

加載下面的所需依賴

yum install perl-DBD-MySQL

yum install perl-Params-Validate

yum install perl-Config-Tiny

yum install perl-Log-Dispatch

yum install perl-Parallel-ForkManager

安裝管理節點

tar -zxvf mha4mysql-manager-0.58.tar.gz

cd mha4mysql-manager-0.58

perl Makefile.PL

make

make install

給mha創建軟連接 (注意要根據mysql安裝真實路徑進行設置)

ln -s /usr/local/mysql/bin/mysqlbinlog /usr/local/bin/mysqlbinlog

ln -s /usr/local/mysql/bin/mysql /usr/local/bin/mysql

配置/etc/profile

給PATH添加一個路徑 /usr/local/bin

創建MHA家目錄

mkdir -p /usr/local/mha

mkdir -p /etc/mha

cd /etc/mha

創建並編輯mha.conf 內容如下


[server default]

#MySQL的用戶和密碼

user=zs

password=123456

#mha manager 工作目錄

manager_workdir=/usr/local/mha

manager_log=/usr/local/mha/manager.log

remote_workdir=/usr/local/mha

ssh_user=root

repl_user=repl

repl_password=repl

ping_interval=1

#master_ip_failover_script=/etc/mha/master_ip_failover

[server1]

hostname=10.106.145.181

ssh_port=22

#mysql的binlog路徑 可以從my.conf中找到

master_binlog_dir = /usr/local/mysql/data

candidate_master = 1

port=3306

[server2]

hostname=10.106.145.182

ssh_port=22

#mysql的binlog路徑 可以從my.conf中找到

master_binlog_dir = /usr/local/mysql/data

candidate_master=1

port=3306

[server3]

hostname=10.106.145.183

ssh_port=22

#mysql的binlog路徑 可以從my.conf中找到

master_binlog_dir = /usr/local/mysql/data

no_master=1

port=3306

利用MHA工具檢測

檢測ssh

安裝需要的包

yum -y install perl-Time-HiRes

執行檢測命令(使用開啟ssh共享的那個用戶)

/usr/local/bin/masterha_check_ssh --conf=/etc/mha/mha.conf

Mysql 5.7 MHA 高可用方案

檢測主從(至關重要一定要沒問題)

/usr/local/bin/masterha_check_repl --conf=/etc/mha/mha.conf

結果如下

Mysql 5.7 MHA 高可用方案

如果有類似報錯 比如Can't exec "apply_diff_relay_logs": 沒有那個文件或目錄 at /usr/local/share/perl5/MHA/ManagerUtil.pm line 116.,

這說明路徑沒有找到該執行文件,我們需要包mha的安裝路徑配置到/etc/profile 的path路徑中,添加/usr/local/bin 到path中,然後

source /etc/profile 即可


啟動MHA

登錄管理節點上執行MHA啟動

nohup masterha_manager --conf=/etc/mha/mha.conf>/tmp/mha_manager.log&1 &

Mysql 5.7 MHA 高可用方案

masterha_check_status --conf=/etc/mha/mha.conf

Mysql 5.7 MHA 高可用方案

關閉mha

masterha_stop --conf=/etc/mha/mha.conf

模擬故障:

在主庫10.106.145.181 上停止mysql服務

systemctl stop mysqld

10.106.145.182 中從庫變成主庫,而183的主庫指向了182,切換完成


Mysql 5.7 MHA 高可用方案

這個時候我們在182上執行sql

insert into test.b values(12346) 然後我們到183上查看數據,發現數據已經同步,mha就搭建成功了

Mysql 5.7 MHA 高可用方案


分享到:


相關文章: