溫馨提示×

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

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

MHA+MySQL實(shí)現(xiàn)mysql高可用

發(fā)布時(shí)間:2020-03-15 08:11:36 來(lái)源:網(wǎng)絡(luò) 閱讀:7979 作者:wdw王大為 欄目:MySQL數(shù)據(jù)庫(kù)

1. MHA的簡(jiǎn)單介紹

簡(jiǎn)介

MHA(Master High Availability)目前在MySQL高可用方面是一個(gè)相對(duì)成熟的解決方案,它由日本DeNA公司youshimaton(現(xiàn)就職于Facebook公司)開發(fā),是一套優(yōu)秀的作為MySQL高可用性環(huán)境下故障切換和主從提升的高可用軟件。在MySQL故障切換過(guò)程中,MHA能做到在0~30秒之內(nèi)自動(dòng)完成數(shù)據(jù)庫(kù)的故障切換操作,并且在進(jìn)行故障切換的過(guò)程中,MHA能在最大程度上保證數(shù)據(jù)的一致性,以達(dá)到真正意義上的高可用

已托管至github,對(duì)應(yīng)地址如下

manager地址,https://github.com/yoshinorim/mha4mysql-manager
node地址,https://github.com/yoshinorim/mha4mysql-node
截止本文檔編寫時(shí)間為止,最新版本為0.58

優(yōu)點(diǎn)

可參考官方文檔詳細(xì)介紹 https://github.com/yoshinorim/mha4mysql-manager/wiki/Advantages
大致總結(jié)如下:

1、主從切換非常迅速,通常10-30s
2、最大程度上解決數(shù)據(jù)一致性的問(wèn)題
3、不需要修改當(dāng)前已有的MySQL架構(gòu)和配置
4、不需要另外多余的服務(wù)器
5、沒(méi)有性能損耗
6、沒(méi)有存儲(chǔ)引擎限制

??

2. MHA的搭建概述

數(shù)據(jù)庫(kù)架構(gòu):一主兩從

master:192.168.142.48
slave1:192.168.142.49
slave2:192.168.142.50

mha架構(gòu):

manager:192.168.142.49
node:192.168.142.48,192.168.142.49,192.168.142.50

keepalived架構(gòu)

VIP:192.168.142.235
節(jié)點(diǎn):192.168.142.48,192.168.142.49

搭建環(huán)境版本

數(shù)據(jù)庫(kù)版本:5.7.18,5.7.18-log MySQL Community Server (GPL)
MHA版本:v0.58,mha4mysql-manager-0.58 + mha4mysql-node-0.58
Keepalived:keepalived-1.4.3
Linux主機(jī):centos7.2

主機(jī)和安裝服務(wù)列表

主機(jī)IP 安裝服務(wù)
192.168.142.48 mysql master ; mha node ; keepalived
192.168.142.49 mysql slave ; mha node && mha manager ; keepalived
192.168.142.50 mysql slave ; mha node

搭建大體步驟

1、keepalived的搭建
2、linux機(jī)器之間配置互信
3、mysql主從環(huán)境的搭建
4、MHA的安裝和配置
5、配置文件測(cè)試    
    測(cè)試ssh連通性
    測(cè)試集群中的主從復(fù)制
6、啟動(dòng)MHA管理節(jié)點(diǎn)

?

3. keepalived的搭建

這里使用rpm方式安裝,分別在192.168.142.48和192.168.142.49上安裝keepalived,也可使用源碼編譯

1、安裝
yum install keepalived -y

2、配置文件修改
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   notification_email {
   root@localhost
}
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 55
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.142.235
    }
}

note:其中主MASTER優(yōu)先級(jí)高(100),BACKUP優(yōu)先級(jí)(90)低一些

3、啟動(dòng)、關(guān)閉、查看
systemctl start keepalived
systemctl stop keepalived
systemctl status keepalived

?

4. linux機(jī)器之間配置互信

服務(wù)器之間建立ssh互信的方式很多,這里介紹一種私以為比較便捷的創(chuàng)建方式

1、創(chuàng)建秘鑰(回車連續(xù)三次即可)
[root@192-168-142-48]# ssh-keygen -t rsa
2、進(jìn)入.ssh目錄查看文件
[root@192-168-142-48]# cd /root/.ssh/ && ls
id_rsa
id_rsa.pub
3、修改id_rsa.pub名稱
mv id_rsa.pub authorized_keys
4、將/root/.ssh文件夾拷貝到192.168.142.49和192.168.142.50即可建立三臺(tái)機(jī)器之間的互信(如果端口不是默認(rèn)22,需要額外指定參數(shù) -P port)
scp -P 8822 -r /root/.ssh 192.168.142.49:/root/
scp -P 8822 -r /root/.ssh 192.168.142.50:/root/

??

5. mysql主從環(huán)境的搭建

1、手動(dòng)搭建或者自動(dòng)化腳本分別在三臺(tái)主機(jī)上配置mysql實(shí)例,這里可參考MySQL單實(shí)例搭建的方法,不在贅述

2、每臺(tái)主機(jī)數(shù)據(jù)庫(kù)實(shí)例上配置復(fù)制用戶l和監(jiān)控用戶

1、復(fù)制用戶
GRANT SUPER, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'repl'@'192.168.142.%' IDENTIFIED BY '123456';FLUSH PRIVILEGES;
2、監(jiān)控用戶
GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.142.%' IDENTIFIED BY '123456';FLUSH PRIVILEGES;

3、配置從同步

1、master上執(zhí)行
show master status;,記錄對(duì)應(yīng)File名稱和Position列的數(shù)字,這里為 mysql-bin.000001 154
2、slave1和slave2上分別執(zhí)行
CHANGE MASTER TO MASTER_HOST='192.168.142.48',MASTER_USER='repl',MASTER_PASSWORD='123456',MASTER_PORT=5700,MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=154;

??

6. MHA的安裝和配置

可參考官方文檔詳細(xì)介紹 https://github.com/yoshinorim/mha4mysql-manager/wiki/Installation
?
1、每臺(tái)主機(jī)上安裝node節(jié)點(diǎn),這里使用rpm方式安裝,也可使用源碼編譯

1、下載
https://github.com/yoshinorim/mha4mysql-node/releases  選擇對(duì)應(yīng)的rpm包下載
2、安裝依賴
yum install perl-DBD-MySQL -y
3、安裝node節(jié)點(diǎn)
rpm -ivh mha4mysql-node-0.58-0.el7.centos.noarch.rpm

?
2、其中一臺(tái)主機(jī)(192.168.142.49)安裝manager節(jié)點(diǎn)即可,這里使用rpm方式安裝,也可使用源碼編譯

1、下載
https://github.com/yoshinorim/mha4mysql-manager/releases  選擇對(duì)應(yīng)的rpm包下載
2、安裝依賴
yum install perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager -y
3、安裝manager節(jié)點(diǎn)
rpm -ivh mha4mysql-manager-0.58-0.el7.centos.noarch.rpm

??
3、創(chuàng)建MHA的配置文件
app1.cnf,個(gè)人安裝配置實(shí)例完整版已經(jīng)放置到github,可參考查看,如下為鏈接
https://github.com/dwwang1992/configs-of-MHA/blob/master/app1.cnf
??
4、master_ip_failover_script對(duì)應(yīng)的腳本
master_ip_failover,個(gè)人安裝配置實(shí)例完整版已經(jīng)放置到github,可參考查看,如下為鏈接
https://github.com/dwwang1992/configs-of-MHA/blob/master/master_ip_failover
??
5、master_ip_online_change_script對(duì)應(yīng)的腳本
master_ip_online_change,個(gè)人安裝配置實(shí)例完整版已經(jīng)放置到github,可參考查看,如下為鏈接
https://github.com/dwwang1992/configs-of-MHA/blob/master/master_ip_online_change
??
6、report_script對(duì)應(yīng)的腳本
send_report,個(gè)人安裝配置實(shí)例完整版已經(jīng)放置到github,可參考查看,如下為鏈接
https://github.com/dwwang1992/configs-of-MHA/blob/master/send_report
?

7. 配置文件測(cè)試

測(cè)試ssh連通性

[root@hz-192-168-142-49 scripts]# masterha_check_ssh --conf=/data/mha/app1.cnf 
Fri May 25 14:24:34 2018 - [warning] Global configuration file /etc/masterha_default.cnf not found. Skipping.
Fri May 25 14:24:34 2018 - [info] Reading application default configuration from /data/mha/app1.cnf..
Fri May 25 14:24:34 2018 - [info] Reading server configuration from /data/mha/app1.cnf..
Fri May 25 14:24:34 2018 - [info] Starting SSH connection tests..
Fri May 25 14:24:37 2018 - [debug] 
Fri May 25 14:24:34 2018 - [debug]  Connecting via SSH from root@192.168.142.48(192.168.142.48:8822) to root@192.168.142.49(192.168.142.49:8822)..
Fri May 25 14:24:35 2018 - [debug]   ok.
Fri May 25 14:24:35 2018 - [debug]  Connecting via SSH from root@192.168.142.48(192.168.142.48:8822) to root@192.168.142.50(192.168.142.50:8822)..
Fri May 25 14:24:36 2018 - [debug]   ok.
Fri May 25 14:24:38 2018 - [debug] 
Fri May 25 14:24:35 2018 - [debug]  Connecting via SSH from root@192.168.142.49(192.168.142.49:8822) to root@192.168.142.48(192.168.142.48:8822)..
Fri May 25 14:24:35 2018 - [debug]   ok.
Fri May 25 14:24:35 2018 - [debug]  Connecting via SSH from root@192.168.142.49(192.168.142.49:8822) to root@192.168.142.50(192.168.142.50:8822)..
Fri May 25 14:24:37 2018 - [debug]   ok.
Fri May 25 14:24:39 2018 - [debug] 
Fri May 25 14:24:35 2018 - [debug]  Connecting via SSH from root@192.168.142.50(192.168.142.50:8822) to root@192.168.142.48(192.168.142.48:8822)..
Fri May 25 14:24:37 2018 - [debug]   ok.
Fri May 25 14:24:37 2018 - [debug]  Connecting via SSH from root@192.168.142.50(192.168.142.50:8822) to root@192.168.142.49(192.168.142.49:8822)..
Fri May 25 14:24:39 2018 - [debug]   ok.
Fri May 25 14:24:39 2018 - [info] All SSH connection tests passed successfully.

測(cè)試集群中的主從復(fù)制

[root@hz-192-168-142-49 scripts]# masterha_check_repl --conf=/data/mha/app1.cnf 
......
......
192.168.142.48(192.168.142.48:5700) (current master)
 +--192.168.142.49(192.168.142.49:5700)
 +--192.168.142.50(192.168.142.50:5700)

Fri May 25 14:25:57 2018 - [info] Checking replication health on 192.168.142.49..
Fri May 25 14:25:57 2018 - [info]  ok.
Fri May 25 14:25:57 2018 - [info] Checking replication health on 192.168.142.50..
Fri May 25 14:25:57 2018 - [info]  ok.
Fri May 25 14:25:57 2018 - [info] Checking master_ip_failover_script status:
Fri May 25 14:25:57 2018 - [info]   /data/mha/scripts/master_ip_failover --command=status --ssh_user=root --orig_master_host=192.168.142.48 --orig_master_ip=192.168.142.48 --orig_master_port=5700  --orig_master_ssh_port=8822
Unknown option: orig_master_ssh_port

IN SCRIPT TEST====systemctl stop keepalived==systemctl start keepalived===

Checking the Status of the script.. OK 
Fri May 25 14:25:57 2018 - [info]  OK.
Fri May 25 14:25:57 2018 - [warning] shutdown_script is not defined.
Fri May 25 14:25:57 2018 - [info] Got exit code 0 (Not master dead).

MySQL Replication Health is OK.

?

8. 啟動(dòng)MHA管理節(jié)點(diǎn)

啟動(dòng)命令

nohup masterha_manager --conf=/data/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /data/mha/mha/app1/manager.log 2>&1 &
參數(shù)含義具體可參照官網(wǎng)說(shuō)明  https://github.com/yoshinorim/mha4mysql-manager/wiki/masterha_manager,此處簡(jiǎn)單說(shuō)明
--remove_dead_master_conf,發(fā)生failover后,MHA會(huì)自動(dòng)從配置文件里移除dead master的相關(guān)信息
--ignore_last_failover,默認(rèn)情況下,之前如果存在failover,那么再次啟動(dòng)MHA是不成功的,必須刪除對(duì)應(yīng)目錄下的failover error文件, (manager_workdir)/(app_name).failover.error;設(shè)置此參數(shù),就可以忽略上次是否錯(cuò)誤而可以繼續(xù)進(jìn)行failover

關(guān)閉命令

masterha_stop --conf=/data/mha/app1.cnf

查看狀態(tài)

masterha_check_status --conf=/data/mha/app1.cnf

?

9. 在線手動(dòng)切換過(guò)程

1、首先需要保證mha manager處于關(guān)閉狀態(tài)

masterha_stop --conf=/data/mha/app1.cnf

2、手動(dòng)切換主master

masterha_master_switch --conf=/data/mha/app1.cnf --master_state=alive --new_master_host=192.168.142.48 --new_master_port=5700 --orig_master_is_new_slave --running_updates_limit=10000 --interactive=0
參數(shù)解釋:
new_master_host:指定哪臺(tái)成為新的主庫(kù)
new_master_port:指定對(duì)應(yīng)的數(shù)據(jù)庫(kù)端口
orig_master_is_new_slave:將原來(lái)的主庫(kù)變?yōu)閺膸?kù)
running_updates_limit:指定復(fù)制延遲在10000s內(nèi)的都可切換
interactive:表示不需要人工干預(yù),自動(dòng)執(zhí)行

3、切換過(guò)程

1、檢查當(dāng)前的配置信息及主從服務(wù)器的信息
            包括讀取MHA的配置文件以及檢查當(dāng)前slave的健康狀態(tài)
2、阻止對(duì)當(dāng)前master的更新
            主要通過(guò)如下步驟:
            1> 等待1.5s($time_until_kill_threads*100ms),等待當(dāng)前連接斷開
            2> 執(zhí)行 read_only=1,阻止新的DML操作
            3> 等待0.5s,等待當(dāng)前DML操作完成
            4> kill掉所有連接
            5> FLUSH NO_WRITE_TO_BINLOG TABLES
            6> FLUSH TABLES WITH READ LOCK
3、等待新master執(zhí)行完所有的relay log,執(zhí)行完之后記錄下對(duì)應(yīng)的日志位點(diǎn)
            Waiting to execute all relay logs on 192.168.142.49(192.168.142.49:5700)..
            Getting new master's binlog name and position..
            mysql-bin.000001:2488
4、將新master的read_only設(shè)置為off,并添加VIP
5、slave切換到新master上
            1、等待slave應(yīng)用完原主從復(fù)制產(chǎn)生的relay log,然后執(zhí)行change master操作切換到新master上
            Waiting to execute all relay logs on 192.168.142.50(192.168.142.50:5700)..
            Resetting slave 192.168.142.50(192.168.142.50:5700) and starting replication from the new master 192.168.142.49(192.168.142.49:5700)..
            2、釋放原master上的鎖
            Unlocking all tables on the orig master:
            Executing UNLOCK TABLES..
            3、因masterha_master_switch命令行中帶有--orig_master_is_new_slave參數(shù),故原master也切換為新master的從
            Starting orig master as a new slave..
            Resetting slave 192.168.142.48(192.168.142.48:5700) and starting replication from the new master 192.168.142.49(192.168.142.49:5700)..
6、清理新master的相關(guān)信息
            192.168.142.49: Resetting slave info succeeded

??

10. 自動(dòng)故障切換過(guò)程

1、首先需要保證mha manager處于運(yùn)行狀態(tài)

nohup masterha_manager --conf=/data/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /data/mha/mha/app1/manager.log 2>&1 &

2、一旦主master出現(xiàn)宕機(jī),會(huì)自動(dòng)檢測(cè)和選取新的主master

3、切換的過(guò)程

當(dāng)master_manager監(jiān)控到主庫(kù)mysqld服務(wù)停止后,首先對(duì)主庫(kù)進(jìn)行SSH登錄檢查(save_binary_logs --command=test),然后對(duì)mysqld服務(wù)進(jìn)行健康檢查(PING(SELECT)每隔3秒檢查一次,持續(xù)3次),參數(shù)secondary_check_script可用于double check,最后作出Master is down!的判斷,master failover開始
1、先根據(jù)配置文件檢測(cè)當(dāng)前的復(fù)制環(huán)境中有哪些服務(wù)器,MHA也會(huì)校驗(yàn)諸如復(fù)制異常以及是否存在一些從庫(kù)有不同的主庫(kù),啟動(dòng)failover(排除上次failover失敗或者failover時(shí)間間隔太短)
?
2、隔離master server,把故障主庫(kù)的VIP停掉(前提是你需要指定相關(guān)的腳本,比如:如果有master_ip_failover_script則會(huì)調(diào)用腳本停掉VIP、如果有shutdown_script腳本則調(diào)用腳本關(guān)閉master避免腦裂,具體在配置文件中app1.cnf)
??
3、選舉新主庫(kù)并盡量補(bǔ)全新主庫(kù)的數(shù)據(jù)
            1、獲取同步位置最靠前的從庫(kù):對(duì)比所有從庫(kù)的master_log_file和read_master_log_pos位置找出執(zhí)行位置最新和最舊的從庫(kù)對(duì)應(yīng)的故障主庫(kù)的binlog位置
            2、保存dead master的binlog:在故障主庫(kù)上執(zhí)行save_binary_logs命令獲得lastest slave同步位置與master間的binlog差異(使用3.1步驟找到的同步最靠前的從庫(kù)binlog位置,如果故障主庫(kù)系統(tǒng)沒(méi)掛的情況下)并scp到mha manager server上
            scp from root@192.168.142.48:/data/mha/mha/tmp/saved_master_binlog_from_192.168.142.48_5700_20180525155119.binlog to local:/data/mha/mha/app1/saved_master_binlog_from_192.168.142.48_5700_20180525155119.binlog succeeded.
            3、確定和決定新的主庫(kù)
            確定新的主庫(kù):先使用命令apply_diff_relay_logs --command=find把前面3.1步驟中找出的同步位置最靠前和最靠后的對(duì)應(yīng)主庫(kù)的binlog位置作為參數(shù),在同步位置最靠前的從庫(kù)上執(zhí)行這個(gè)命令在其中繼日志中找出兩個(gè)binlog位置之間的relay log并生成文件用于恢復(fù)其他從庫(kù)(這里就是檢查同步最靠前的從庫(kù)是否有從最老的位置開始的中繼日志,這也是為什么MHA環(huán)境中執(zhí)行過(guò)的中繼日志不能刪除的原因,否則這個(gè)對(duì)比就比較麻煩)
            接著尋找及決定新的主庫(kù),根據(jù)配置選擇如何提升新主庫(kù)(檢查是否有設(shè)置candidate_master=1和no_master=1,如果有設(shè)置候選主庫(kù),那么候選主庫(kù)中標(biāo),但候選庫(kù)不一定就是有最新數(shù)據(jù)的slave,所以需要跟其他從庫(kù)進(jìn)行比較,當(dāng)然如果候選主庫(kù)恰好是同步位置最靠前的從庫(kù),就不需要跟其他從庫(kù)進(jìn)行relay log比較了;如果沒(méi)有設(shè)置候選主庫(kù),那么同步位置最靠前的從庫(kù)中標(biāo))。mha manager server也會(huì)將之前復(fù)制的差異binlog復(fù)制到新主庫(kù)上
            4、新的主庫(kù)應(yīng)用日志(如果有任何錯(cuò)誤從這個(gè)階段會(huì)發(fā)生,需要手動(dòng)恢復(fù))
            新的主庫(kù)首先需要對(duì)比master_log_file=relay_master_log_file,read_master_log_pos=exec_master_log_pos確認(rèn)自己已經(jīng)執(zhí)行完成復(fù)制,如果新的主庫(kù)不是同步位置最靠前的從庫(kù),那么需要使用apply_diff_relay_logs --command=generate_and_send命令比較自己和同步位置最靠前的從庫(kù)之間的relay log是否存在差異,如果存在則需要生成一個(gè)差異relay log(如果新主庫(kù)就是同步位置最靠前的從庫(kù),那么只需要執(zhí)行mha manager server發(fā)過(guò)來(lái)的差異日志即可),然后使用這兩個(gè)差異日志進(jìn)行恢復(fù)數(shù)據(jù)(apply_diff_relay_logs --command=apply命令)?;謴?fù)完成后獲取binlog位置并生成change master語(yǔ)句準(zhǔn)備用于其他從庫(kù)change master到新的主庫(kù)上,并設(shè)置read_only=0。然后把VIP綁定到新的主庫(kù)上。到這步驟新的主庫(kù)切換完成
?
4、其他從庫(kù)恢復(fù):將其他從庫(kù)數(shù)據(jù)盡量補(bǔ)全(所有從庫(kù)并行執(zhí)行)
并行使用apply_diff_relay_logs --command=generate_and_send命令判斷各個(gè)從庫(kù)的relay log位置和同步位置最靠前的從庫(kù)之間的relay log差異,并把差異文件從同步位置最靠前的從庫(kù)上發(fā)送到對(duì)應(yīng)的各個(gè)從庫(kù)上
并行使用兩個(gè)差異日志進(jìn)行恢復(fù):mha manager server上的binlog差異拷貝到各個(gè)從庫(kù)上,然后各個(gè)從庫(kù)通過(guò)master_log_file=relay_master_log_file,read_master_log_pos=exec_master_log_pos先確認(rèn)自己已經(jīng)執(zhí)行完成復(fù)制,再應(yīng)用兩個(gè)差異日志恢復(fù)數(shù)據(jù)。最后,執(zhí)行reset slave,并重新CHANG MASTER到新主庫(kù)上
??
5、清理新master的相關(guān)信息,到這里故障主庫(kù)切換到新主庫(kù)完成
            Resetting slave info on the new master..

?

11. 故障后的主機(jī)新加入資源組

第一種方法

1、vim /data/mha/app1.cnf 添加server1主機(jī)信息
[server1]
candidate_master=1
client_bindir=/usr/local/mysql-5.7.18/bin/
client_libdir=/usr/local/mysql-5.7.18/lib/
hostname=192.168.142.48
port=5700

2、將server1指向當(dāng)前的master充當(dāng)從的角色
CHANGE MASTER TO MASTER_HOST='192.168.142.49',MASTER_USER='repl',MASTER_PASSWORD='123456',MASTER_PORT=5700,MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=2488;

3、啟動(dòng)mha manager
nohup masterha_manager --conf=/data/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /data/mha/mha/app1/manager.log 2>&1 &

?
第二種方法

1、通過(guò)masterha_conf_host將server1主機(jī)信息添加進(jìn)資源組
masterha_conf_host --command=add --conf=/data/mha/app1.cnf --block=server1 --hostname=192.168.142.48 --params="candidate_master=1;client_bindir=/usr/local/mysql-5.7.18/bin/;client_libdir=/usr/local/mysql-5.7.18/lib/;port=5700"
參數(shù)解釋:
command:添加或者刪除一個(gè)主機(jī)信息到配置文件
conf:配置文件的路徑
hostname:主機(jī)信息ip
block:新添加的塊名
params:額外參數(shù)列表,(key1=value1;key2=value2;...)

2、將server1指向當(dāng)前的master充當(dāng)從的角色
CHANGE MASTER TO MASTER_HOST='192.168.142.49',MASTER_USER='repl',MASTER_PASSWORD='123456',MASTER_PORT=5700,MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=2488;

3、啟動(dòng)mha manager
nohup masterha_manager --conf=/data/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /data/mha/mha/app1/manager.log 2>&1 &

?

12. MHA 清理relay log(purge_relay_logs)

1、說(shuō)明:

MySQL數(shù)據(jù)庫(kù)主從復(fù)制在缺省情況下從庫(kù)的relay logs會(huì)在SQL線程執(zhí)行完畢后被自動(dòng)刪除
但是對(duì)于MHA場(chǎng)景下,對(duì)于某些滯后從庫(kù)的恢復(fù)依賴于其他從庫(kù)的relay log,因此采取禁用自動(dòng)刪除功能以及定期清理的辦法
對(duì)于清理過(guò)多過(guò)大的relay log需要注意引起的復(fù)制延遲資源開銷等。MHA可通過(guò)purge_relay_logs腳本及配合cronjob來(lái)完成此項(xiàng)任務(wù)

2、purge_relay_logs的功能

a、為relay日志創(chuàng)建硬鏈接(最小化批量刪除大文件導(dǎo)致的性能問(wèn)題)
b、SET GLOBAL relay_log_purge=1; FLUSH LOGS; SET GLOBAL relay_log_purge=0;
c、刪除relay log(rm –f  /path/to/archive_dir/*)

3、purge_relay_logs的用法及相關(guān)參數(shù)

###用法
# purge_relay_logs --help
Usage:
    purge_relay_logs --user=root --password=rootpass --host=127.0.0.1

###參數(shù)描述
--user:mysql用戶名,缺省為root
--password:mysql密碼
--port:端口號(hào)
--host:主機(jī)名,缺省為127.0.0.1
--workdir:指定創(chuàng)建relay log的硬鏈接的位置,默認(rèn)是/var/tmp,成功執(zhí)行腳本后,硬鏈接的中繼日志文件被刪除由于系統(tǒng)不同分區(qū)創(chuàng)建硬鏈接文件會(huì)失敗,故需要執(zhí)行硬鏈接具體位置,建議指定為relay log相同的分區(qū)
--disable_relay_log_purge:默認(rèn)情況下,參數(shù)relay_log_purge=1,腳本不做任何處理,自動(dòng)退出,設(shè)定該參數(shù),腳本會(huì)將relay_log_purge設(shè)置為0,當(dāng)清理relay log之后,最后將參數(shù)設(shè)置為OFF(0)

4、定制清理relay log cronjob(每臺(tái)主機(jī)均設(shè)置)

purge_relay_logs腳本在不阻塞SQL線程的情況下自動(dòng)清理relay log。對(duì)于不斷產(chǎn)生的relay log直接將該腳本部署到crontab以實(shí)現(xiàn)按天或按小時(shí)定期清理
1、編輯腳本,vim /data/mha/mha/purge_relay_logs.sh
#!/bin/bash
user=root
passwd=123456
port=5700
host=127.0.0.1
work_dir='/data/mha/mha/data'
purge='/bin/purge_relay_logs'
log_dir='/data/mha/mha/log'

if [ ! -d $log_dir ]
then
   mkdir $log_dir -p
fi

if [ ! -d $work_dir ]
then
   mkdir $work_dir -p
fi

$purge --user=$user --password=$passwd --port=$port --host=$host --workdir=$work_dir --disable_relay_log_purge >> $log_dir/purge_relay_logs.log 2>&1

2、最后添加到計(jì)劃任務(wù):
##每2天凌晨1點(diǎn)清空relay log
00 01 * * * /bin/bash /data/mha/mha/purge_relay_logs.sh
向AI問(wèn)一下細(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