上一篇 文章(https://blog.csdn.net/aofavx/article/details/106783795)已Mysql主從模式部署過程。現在使用MHA實現數據庫的高可用性。
參考網址:https://www.cnblogs.com/keerya/p/7883766.html
1.軟件版本和環境:
系統:CentOS7系統
需要軟件
mysql5.7.30安裝包:mysql-5.7.30-1.el7.x86_64.rpm-bundle.tar
mha4mysql管理端文件:mha4mysql-manager-0.58-0.el7.centos.noarch.rpm
mha4mysql節點文件:mha4mysql-node-0.58-0.el7.centos.noarch.rpm
2.各個機器IP和角色
172.18.0.12 – master主庫 --負責數據寫入
172.18.0.13 – slaver從庫1—負責數據讀取
172.18.0.14 – slaver從庫2 —負責數據讀取
172.18.0.15 – MHA服務器 —數據庫節點監控和自動切換master/slave 節點。
2.MHA高可用環境搭建
1.在 master 節點上授管理員用戶可以遠程訪問。
grant all on *.* to 'mhaadmin'@'%' identified by 'mhaadmin';
3.在各節點服務器上生成密鑰
ssh-keygen -t rsa (路徑默認,密碼無)
4.複製公鑰到其他服務器
ssh-copy-id -i .ssh/id_rsa.pub [email protected]
ssh-copy-id -i .ssh/id_rsa.pub [email protected]
ssh-copy-id -i .ssh/id_rsa.pub [email protected]
ssh-copy-id -i .ssh/id_rsa.pub [email protected]
5.下載MHA安裝包 地址https://github.com/yoshinorim/mha4mysql-manager/wiki/Downloads
6.安裝mha
yum install -y mha4mysql-node-0.58-0.el7.centos.noarch.rpm 4個節點都安裝
yum install -y mha4mysql-manager-0.58-0.el7.centos.noarch.rpm mha服務器安裝
安裝manager可能會有perl的錯誤。可以修改yum鏡像地址,安裝依賴包。
也可以按照下面錯誤記錄中的方法解決。
7.設置mha配置文件
先創建/etc/mha_master,/etc/mha_master/work 文件夾
[server default] //適用於server1,2,3個server的配置
user=mhaadmin //mha管理用戶
password=mhaadmin //mha管理密碼
manager_workdir=/etc/mha_master/ //mha_master自己的工作路徑
manager_log=/etc/mha_master/manager.log // mha_master自己的日誌文件
remote_workdir=/etc/mha_master/work //每個遠程主機的工作目錄在何處
ssh_user=root // 基於ssh的密鑰認證
repl_user=root //數據庫用戶名
repl_password=root //數據庫密碼
ping_interval=1 //ping間隔時長
[server1] //節點2
hostname=172.18.0.12 //節點2主機地址
ssh_port=22 //節點2的ssh端口
candidate_master=1 //將來可不可以成爲master候選節點/主節點
[server2]
hostname=172.18.0.13
ssh_port=22
candidate_master=1
[server3]
hostname=172.18.0.14
ssh_port=22
candidate_master=1
8.檢測各節點通信
masterha_check_ssh -conf=/etc/mha_master/mha.cnf
9.檢測集羣連接配置
masterha_check_repl -conf=/etc/mha_master/mha.cnf
輸出 日誌:
Mon Jun 15 05:55:47 2020 - [info] Checking replication health on 172.18.0.13..
Mon Jun 15 05:55:47 2020 - [info] ok.
Mon Jun 15 05:55:47 2020 - [info] Checking replication health on 172.18.0.14..
Mon Jun 15 05:55:47 2020 - [info] ok.
Mon Jun 15 05:55:47 2020 - [warning] master_ip_failover_script is not defined.
Mon Jun 15 05:55:47 2020 - [warning] shutdown_script is not defined.
Mon Jun 15 05:55:47 2020 - [info] Got exit code 0 (Not master dead).
MySQL Replication Health is OK.
沒有錯誤提示信息代表啓動成功。
10.啓用MHA
nohup masterha_manager -conf=/etc/mha_master/mha.cnf &> /etc/mha_master/manager.log &
停止MHA命令: masterha_stop -conf=/etc/mha_master/mha.cnf
11.查看master節點狀態
masterha_check_status -conf=/etc/mha_master/mha.cnf
輸出日誌:
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
LANG = "en_US.UTF-8"
are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
mha (pid:631) is running(0:PING_OK), master:172.18.0.12
表示MHA服務運行OK,否則, 則會顯示爲類似“mha is stopped(1:NOT_RUNNING)
5.測試主從節點切換
- 關掉master服務器,模擬主節點崩潰。查看MHA日誌 tail -f /etc/mha_master/manager.log
表示 manager 檢測到172.18.0.12節點故障, 而後自動執行故障轉移, 將172.18.0.13提升爲主節點。
注意,故障轉移完成後, manager將會自動停止, 此時使用 masterha_check_status 命令檢測將會遇到錯誤提示, 如下所示:
13.在新的主庫中添加記錄,查看從庫同步情況
從庫記錄:
從庫slave狀態:
問題整理
1.安裝mysql-server報錯:
error: Failed dependencies:
/usr/bin/perl is needed by mysql-community-server-5.7.30-1.el7.x86_64
解決方法:
安裝依賴包 net-tools.x86_64,libaio.x86_64,perl.x86_64 ,numactl 。
yum -y install perl.x86_64
yum -y install libaio.x86_64
yum -y install net-tools.x86_64
yum -y install numactl
參考網址:https://blog.csdn.net/u010886217/article/details/89416159
2.從庫啓動同步失敗報錯:The slave I/O thread stops because master and slave have equal MySQL server UUIDs;
問題分析
問題提示主從使用了相同的server UUID,一個個的檢查:
檢查主從server_id
show variables like 'server_id';
檢查主從狀態:
show master status;
最後檢查發現他們的auto.cnf中的server-uuid是一樣的.因爲是從同一個msyql鏡像啓動的容器。
問題解決
停止從庫的mysqld服務,刪除他的auto.cnf文件,再啓動數據庫服務即可:
systemctl stop mysqld.service
mv /var/lib/mysql/auto.cnf /var/lib/mysql/auto.cnf.bak
systemctl start mysqld.service
再查看從庫狀態,已開啓主庫的同步。
show slave status\G;
參考網址:https://blog.csdn.net/sunbocong/article/details/81634296
3.安裝MHA-manager報錯
yum -y install mha4mysql-manager-0.58-0.el7.centos.noarch.rpm
Error: Package: mha4mysql-manager-0.58-0.el7.centos.noarch (/mha4mysql-manager-0.58-0.el7.centos.noarch)
Requires: perl(Log::Dispatch)
Error: Package: mha4mysql-manager-0.58-0.el7.centos.noarch (/mha4mysql-manager-0.58-0.el7.centos.noarch)
Requires: perl(Log::Dispatch::File)
Error: Package: mha4mysql-manager-0.58-0.el7.centos.noarch (/mha4mysql-manager-0.58-0.el7.centos.noarch)
Requires: perl(Log::Dispatch::Screen)
You could try using --skip-broken to work around the problem
You could try running: rpm -Va --nofiles --nodigest
解決方法:
解決:
更新epel
yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
此方法使用所有perl依賴包報錯。:
1、安裝
yum -y install mha4mysql-node-0.58-0.el7.centos.noarch.rpm
yum -y install mha4mysql-manager-0.58-0.el7.centos.noarch.rpm
參考網址:https://blog.csdn.net/q936889811/article/details/80077344
https://fedoraproject.org/wiki/EPEL
https://blog.csdn.net/aeolus_pu/article/details/8991652
4.從新選舉新master後,slaver的數據庫連不上新的master. 執行show slave status \G; 報錯
Last_IO_Error: error connecting to master '[email protected]:3306' - retry-time: 60 retries: 3
解決方法:
在新master上授權root用戶可以在其他ip訪問。
grant all privileges on *.* to 'root'@'%' identified by 'root';
privileges
5.原掉線的master重新上線後,MHA檢測報錯:
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-RtJxEypD-1592279018087)(img/image-20200615153219614.png)]
這句話的大概意思,有兩個成爲主,而且兩個都可寫,按照原則同一時間只能有一臺主機可以數據寫入,不然可能會造成數據不一致的災難性故障!
解決方法:
set global read_only=1