溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

mysql 學(xué)習(xí)筆記之搭建MHA高可用

發(fā)布時(shí)間:2020-08-09 14:18:36 來源:ITPUB博客 閱讀:235 作者:云小蟲2019 欄目:MySQL數(shù)據(jù)庫

4. 搭建MHA高可用

4.1 架構(gòu)圖

mysql 學(xué)習(xí)筆記之搭建MHA高可用

這里只搭建一套主從,架構(gòu)如下

mysql 學(xué)習(xí)筆記之搭建MHA高可用

4.2 安裝MHA Node

所有節(jié)點(diǎn)都需要安裝,包括MHA,Master,Slave

4.2.1 安裝依賴包

yum install -y perl-DBD-MySQL perl-ExtUtils-MakeMaker perl-CPAN

4.2.2 下載軟件包

https://github.com/yoshinorim/mha4mysql-node/releases/tag/v0.58

mysql 學(xué)習(xí)筆記之搭建MHA高可用

4.2.3 編譯安裝

#解壓
tar zxvf mha4mysql-node-0.58.tar.gz
#移動(dòng)到/usr/local/目錄下,并切換目錄
mv mha4mysql-node-0.58 /usr/local/
cd /usr/local/mha4mysql-node-0.58
#編譯安裝
perl Makefile.PL 
make
make install

安裝完成后 會(huì)在/usr/local/bin/生成以下腳本文件,Node腳本說明(這些工具通常由MHAManager的腳本觸發(fā))

save_binary_logs               //保存和復(fù)制master的二進(jìn)制日志
apply_diff_relay_logs          //識(shí)別差異的中繼日志事件并將其差異                                //的事件應(yīng)用于其他的slave
filter_mysqlbinlog             //去除不必要的ROLLBACK事件(MHA已                                ///不再使用這個(gè)工具)
purge_relay_logs               //清除中繼日志(不會(huì)阻塞SQL線程)

4.3 安裝MHA Manger

4.3.1 安裝依賴

yum install perl-DBD-MySQL  perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager -y

4.3.2 下載軟件包

https://github.com/yoshinorim/mha4mysql-manager/releases/tag/v0.58

mysql 學(xué)習(xí)筆記之搭建MHA高可用

4.3.3 編譯安裝

#解壓
tar -zxf mha4mysql-manager-0.58.tar.gz
#移動(dòng)到/usr/local/目錄下,并切換目錄
mv mha4mysql-manager-0.58 /usr/local/
cd /usr/local/mha4mysql-manager-0.58/
# 編譯安裝
perl Makefile.PL
make
make install

安裝完成后,在/usr/local/bin會(huì)多出以下相關(guān)的命令腳本:

masterha_check_repl //檢查MySQL復(fù)制健康狀況
masterha_check_ssh //檢查ssh健康狀況
masterha_check_status //檢測(cè)當(dāng)前MHA運(yùn)行狀態(tài)
masterha_conf_host  //添加或者刪除配置的server信息
masterha_manager //啟動(dòng)MHA
masterha_master_monitor //檢測(cè)master是否宕機(jī)
masterha_master_switch //控制故障轉(zhuǎn)移(自動(dòng)或者手動(dòng))
masterha_secondary_check //如果從manager節(jié)點(diǎn)發(fā)現(xiàn)
masterha_stop //停止MHA

在/usr/local/mha4mysql-manager-0.58/samples/scripts 目錄下會(huì)有相關(guān)腳本

master_ip_failover        
//自動(dòng)切換時(shí)vip管理的腳本,不是必須,如果我們使用keepalived的,我們可以自己編寫腳本完成對(duì)vip的管理,比如監(jiān)控mysql,如果mysql異常,我們停止keepalived就行,這樣vip就會(huì)自動(dòng)漂移
indistinguishableness 
//在線切換時(shí)vip的管理,不是必須,同樣可以可以自行編寫簡(jiǎn)單的shell完成
power_manager //故障發(fā)生后關(guān)閉主機(jī)的腳本,不是必須
send_report  //因故障切換后發(fā)送報(bào)警的腳本,不是必須,可自行編寫簡(jiǎn)單的shell完成

4.4 設(shè)置host 解析

4.4.1 設(shè)置主機(jī)名

#MHA
hostnamectl set-hostname MHA
#Master
hostnamectl set-hostname Master
#Slave01
hostnamectl set-hostname Slave01
#Slave02
hostnamectl set-hostname Slave02

4.4.2 配置Host文件

# vim /etc/hosts
192.168.56.50 MHA
192.168.56.51 Master
192.168.56.52 Slave01
192.168.56.53 Slave02

4.5 配置互信

#創(chuàng)建目錄,所有節(jié)點(diǎn)執(zhí)行
mkdir ~/.ssh
cd  ~/.ssh
#生成公鑰和私鑰文件,一直回車使用默認(rèn)即可,所有節(jié)點(diǎn)執(zhí)行
ssh-keygen -t rsa
#將所有節(jié)點(diǎn)上的公鑰復(fù)制到一臺(tái)機(jī)器上,匯總成 authorized_keys
#192.168.56.51服務(wù)器上,將生成的公鑰復(fù)制到192.168.56.50下
scp id_rsa.pub root@192.168.56.50:/root/.ssh/id_rsa.pub_51
#192.168.56.52服務(wù)器上,將生成的公鑰復(fù)制到192.168.56.50下
scp id_rsa.pub root@192.168.56.50:/root/.ssh/id_rsa.pub_52
#192.168.56.53服務(wù)器上,將生成的公鑰復(fù)制到192.168.56.50下
scp id_rsa.pub root@192.168.56.50:/root/.ssh/id_rsa.pub_53
#192.168.56.50服務(wù)器上,將50,51,52,53服務(wù)器的公鑰追加到認(rèn)證文件中
cat id_rsa.pub id_rsa.pub_51 id_rsa.pub_52 id_rsa.pub_53 >> authorized_keys
#192.168.56.50服務(wù)器上,將匯總的公鑰認(rèn)證文件分發(fā)到其它節(jié)點(diǎn)
scp authorized_keys root@192.168.56.51:/root/.ssh/
scp authorized_keys root@192.168.56.52:/root/.ssh/
scp authorized_keys root@192.168.56.53:/root/.ssh/
#所有節(jié)點(diǎn) 驗(yàn)證ssh免密登錄,第一次可能需要輸入yes,后續(xù)不需要輸入密碼
ssh 192.168.56.50 date
ssh 192.168.56.51 date
ssh 192.168.56.52 date
ssh 192.168.56.53 date

4.6 搭建主從復(fù)制(略)

參考第3節(jié) Replication, 另注意如下事項(xiàng):

#主從節(jié)點(diǎn)復(fù)制的過濾規(guī)則要相同,即binlog_do_db 與 binlog_ignore_db #參數(shù)主從配置需要相同
#采用命令方式將從庫設(shè)為只讀,不要將該參數(shù)寫進(jìn)配置文件中
mysql -e "set global read_only=1"
#關(guān)閉中繼日志的清除
mysql -e "set global relay_log_purge=0"

4.7 配置MHA

4.7.1 創(chuàng)建監(jiān)控用戶

create user 'mha'@'%' identified by 'mha';
GRANT ALL PRIVILEGES ON *.* TO 'mha'@'%';
flush privileges;

4.7.2 創(chuàng)建配置文件

(1)創(chuàng)建目錄

mkdir /mha/app1

(1)編輯配置文件

# vim /mha/app1/app1.cnf
[server default]
#mha manager日志文件
manager_log=/mha/app1/manager.log
#manager工作目錄
manager_workdir=/mha/app1
#master節(jié)點(diǎn)存放binlog日志路徑,以便MHA找到binlog,這里就是MySQL的數(shù)據(jù)目錄
master_binlog_dir=/data/mysql/3306/data
#發(fā)生切換時(shí)slave節(jié)點(diǎn)binlog日志存放路徑
remote_workdir=/data/mysql/3306/data
#自動(dòng)切換腳本
master_ip_failover_script=/usr/local/bin/master_ip_failover
#手動(dòng)切換腳本
master_ip_online_change_script=/usr/bin/master_ip_online_change
#一旦MHA到51的監(jiān)控之間出現(xiàn)問題,MHA Manager將嘗試從52和53登錄到51
secondary_check_script=/usr/local/bin/masterha_secondary_check -s 192.168.56.52 -s 192.168.56.53 --user=root --port=22 --master_host=192.168.56.51 --master_port=3306
#監(jiān)控主節(jié)點(diǎn)時(shí)間間隔
ping_interval=3
#設(shè)置故障發(fā)生后關(guān)閉故障主機(jī)腳本(該腳本的主要作用是關(guān)閉主機(jī)放在發(fā)生腦裂,這里沒有使用)
#shutdown_script=""
#數(shù)據(jù)庫監(jiān)控用戶
user=mha
password=mha
#復(fù)制用戶
repl_password=repl
repl_user=repl
#ssh登錄用戶
ssh_user=root
[server1]
hostname=192.168.56.51
port=3306
[server2]
candidate_master=1
check_repl_delay=0
hostname=192.168.56.52
port=3306
[server3]
hostname=192.168.56.53
port=3306

可以從從模板中拷貝后更改

cp /usr/local/mha4mysql-manager-0.58/samples/conf/app1.cnf  /mha/
app1.cnf  #是對(duì)某個(gè)復(fù)制組的配置文件。
masterha_default.cnf #MHA manager的全局配置文件,可以通過這一個(gè)配置文件管理多個(gè)復(fù)制組

4.7.1 檢查狀態(tài)

masterha_check_ssh  --conf=/mha/app1/app1.cnf
masterha_check_repl --conf=/mha/app1/app1.cnf

如出現(xiàn)錯(cuò)誤:

Bareword "FIXME_xxx" not allowed while "strict subs" in use at /etc/mha/script/master_ip_failover line 100.

[^bug]: 注釋掉 FIXME_xxx;

4.8 啟動(dòng)HMA Manager 監(jiān)控

#查看MHA manager監(jiān)控狀態(tài),這里沒有運(yùn)行
masterha_check_status --conf=/mha/app1/app1.cnf
#app1 is stopped(2:NOT_RUNNING).
#啟動(dòng)MHA監(jiān)控 --remove_dead_master_conf --ignore_last_failover
nohup  masterha_manager --conf=/mha/app1/app1.cnf --remove_dead_master_conf --ignore_last_failover  &
#稍等片刻,出現(xiàn)提示:
#app1 (pid:29512) is running(0:PING_OK),master:192.168.56.51 
# 停止MHA監(jiān)控
masterha_stop --conf=/mha/app1/app1.cnf

4.9 檢查日志

[root@localhost app1]# tail -f  /mha/app1/manager.log
 +--192.168.56.53(192.168.56.53:3306)
Fri Aug 23 10:09:30 2019 - [info] Checking master_ip_failover_script status:
Fri Aug 23 10:09:30 2019 - [info]   /usr/local/mha4mysql-manager-0.58/samples/scripts/master_ip_failover --command=status --ssh_user=root --orig_master_host=192.168.56.51 --orig_master_ip=192.168.56.51 --orig_master_port=3306
Fri Aug 23 10:09:30 2019 - [info]  OK.
Fri Aug 23 10:09:30 2019 - [warning] shutdown_script is not defined.
Fri Aug 23 10:09:30 2019 - [info] Set master ping interval 3 seconds.
Fri Aug 23 10:09:30 2019 - [info] Set secondary check script: /usr/local/bin/masterha_secondary_check -s 192.168.56.52 -s 192.168.56.53 --user=root --port=22 --master_host=192.168.56.51 --master_port=3306
Fri Aug 23 10:09:30 2019 - [info] Starting ping health check on 192.168.56.51(192.168.56.51:3306)..
Fri Aug 23 10:09:30 2019 - [info] Ping(SELECT) succeeded, waiting until MySQL doesn't respond..

? Ping(SELECT) succeeded ,整個(gè)系統(tǒng)監(jiān)控正常開始了。

4.10 定時(shí)清理中繼日志

4.10.1 創(chuàng)建清理腳本

# vim purge_relay_log.sh 
#!/bin/bash
#數(shù)據(jù)庫用戶名密碼端口
user=root
passwd='Yxc@3306'
port=3306
#腳本日志存放路徑
log_dir='/mha/app1'
#指定創(chuàng)建relay log的硬鏈接的位置,默認(rèn)是/var/tmp。由于系統(tǒng)不同分區(qū)創(chuàng)建硬鏈接文件會(huì)失敗,故需要執(zhí)行硬鏈接具體位置,成功執(zhí)行腳本后,硬鏈接的中繼日志文件被刪除。
work_dir='/mha'
#刪除中繼日志腳本
purge='/usr/local/bin/purge_relay_logs'
if [ ! -d $log_dir ]
then
   mkdir $log_dir -p
fi
#--disable_relay_log_purge :默認(rèn)情況下,如果relay_log_purge=1,腳本會(huì)什么都不清理,自動(dòng)退出。通過設(shè)定這個(gè)參數(shù),當(dāng)relay_log_purge=1的情況下會(huì)將relay_log_purge設(shè)置為0。清理relay log之后,最后將參數(shù)設(shè)置為OFF。
$purge --user=$user --password=$passwd --disable_relay_log_purge --port=$port --workdir=$work_dir >> $log_dir/purge_relay_logs.log 2>&1

4.10.2 授權(quán)

chmod a+x purge_relay_log.sh

4.10.3 創(chuàng)建定時(shí)任務(wù)

00 03 * * * /bin/bash /root/purge_relay_log.sh

4.11 keepalievd 配置VIP

4.12 Failover測(cè)試驗(yàn)證

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI