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
實戰演練
環境介紹:
使用三臺機器來完成本次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地址
配置三臺機器互信
基於安全密鑰的驗證方式在本地主機中生成密鑰對 並將公鑰傳送到遠程主機中
切換到 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;
安裝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
給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
檢測主從(至關重要一定要沒問題)
/usr/local/bin/masterha_check_repl --conf=/etc/mha/mha.conf
結果如下
如果有類似報錯 比如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 &
masterha_check_status --conf=/etc/mha/mha.conf
關閉mha
masterha_stop --conf=/etc/mha/mha.conf
模擬故障:
在主庫10.106.145.181 上停止mysql服務
systemctl stop mysqld
10.106.145.182 中從庫變成主庫,而183的主庫指向了182,切換完成
這個時候我們在182上執行sql
insert into test.b values(12346) 然後我們到183上查看數據,發現數據已經同步,mha就搭建成功了
閱讀更多 大數據和數據庫學習 的文章