第二十一周-day90-數(shù)據(jù)庫day12-MHA高可用架構(gòu)及讀寫分離

1. 查看MHA配置文件

[root@db03 ~]# cat /etc/mha/app1.cnf
[server default]
manager_log=/var/log/mha/app1/manager        
manager_workdir=/var/log/mha/app1            
master_binlog_dir=/data/binlog       
user=mha                                   
password=mha                               
ping_interval=2
repl_password=123
repl_user=repl
ssh_user=root                               
[server1]                                   
hostname=10.0.0.51
port=3306                                  
[server2]            
hostname=10.0.0.52
port=3306
[server3]
hostname=10.0.0.53
port=3306

2. 檢查主從狀態(tài)

[root@db03 ~]# masterha_check_repl --conf=/etc/mha/app1.cnf

MySQL Replication Health is OK.

3.開啟MHA(db03)

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

1. 主從復(fù)制架構(gòu)演變介紹

1.1 基本結(jié)構(gòu)

(1)一主一從
(2)一主多從
(3)多級(jí)主從
(4)雙主
(5)循環(huán)復(fù)制

1.2 高級(jí)應(yīng)用架構(gòu)演變

1.2.1 高性能架構(gòu)

(1) 讀寫分離架構(gòu)(讀性能較高)
代碼級(jí)別
MySQL proxy (Atlas,mysql router,proxySQL(percona),maxscale)析校、
amoeba(taobao)
xx-dbproxy等构罗。

(2) 分布式架構(gòu)(讀寫性能都提高):
分庫分表——cobar--->TDDL(頭都大了),DRDS
Mycat--->DBLE自主研發(fā)等铜涉。
NewSQL-->TiDB

1.2.2 高可用架構(gòu)

(3)單活:MMM架構(gòu)——mysql-mmm(google)
(4)單活:MHA架構(gòu)——mysql-master-ha(日本DeNa),T-MHA
(5)多活:MGR ——5.7 新特性 MySQL Group replication(5.7.17) --->Innodb Cluster  
(6)多活:MariaDB Galera Cluster架構(gòu),(PXC)Percona XtraDB Cluster、MySQL Cluster(Oracle rac)架構(gòu)

2. 高可用MHA ☆☆☆☆☆

2.1 架構(gòu)工作原理

1. MHA通過腳本(masterha_master_monitor)實(shí)時(shí)監(jiān)控主庫的狀態(tài)(主機(jī),數(shù)據(jù)庫狀態(tài))
2. 監(jiān)控到主庫宕機(jī)之后,會(huì)發(fā)生自動(dòng)選主(masterha_master_switch )
    (1) 權(quán)重: 參數(shù)
    (2) 日志量
    (3) 配置文件的順序
3. 數(shù)據(jù)補(bǔ)償
    (1) 當(dāng)主庫SSH能夠連接,各個(gè)從庫會(huì)立即保存(save_binary_logs)缺失部分的日志到/var/tmp,進(jìn)行數(shù)據(jù)補(bǔ)償.
    (2) 當(dāng)主庫SSH無法連接,通過腳本(apply_diff_relay_logs)自動(dòng)進(jìn)行從庫的relaylog的差異處理,進(jìn)行數(shù)據(jù)補(bǔ)償.
4. 構(gòu)建新的主從關(guān)系,并將故障節(jié)點(diǎn)移除(配置文件移除)    
5. MHA主進(jìn)程完成工作后,自動(dòng)退出.

6. 應(yīng)用透明 VIP(master_ip_failover_script=/usr/local/bin/master_ip_failover)
7. 故障通知 (report_script=/usr/local/bin/send)
8. 提供額外數(shù)據(jù)補(bǔ)償?shù)氖侄?binlog server)
9. 自動(dòng)自愈,待開發(fā)....

2.2 架構(gòu)介紹:

1主2從遂唧,master:db01   slave:db02   db03 ):
MHA 高可用方案軟件構(gòu)成
Manager軟件:選擇一個(gè)從節(jié)點(diǎn)安裝
Node軟件:所有節(jié)點(diǎn)都要安裝

2.3 MHA軟件構(gòu)成

Manager工具包主要包括以下幾個(gè)工具:
masterha_manger             啟動(dòng)MHA 
masterha_check_ssh      檢查MHA的SSH配置狀況 
masterha_check_repl         檢查MySQL復(fù)制狀況 
masterha_master_monitor     檢測master是否宕機(jī) 
masterha_check_status       檢測當(dāng)前MHA運(yùn)行狀態(tài) 
masterha_master_switch  控制故障轉(zhuǎn)移(自動(dòng)或者手動(dòng))
masterha_conf_host      添加或刪除配置的server信息

Node工具包主要包括以下幾個(gè)工具:

這些工具通常由MHA Manager的腳本觸發(fā)芙代,無需人為操作
save_binary_logs            保存和復(fù)制master的二進(jìn)制日志 
apply_diff_relay_logs       識(shí)別差異的中繼日志事件并將其差異的事件應(yīng)用于其他的
purge_relay_logs            清除中繼日志(不會(huì)阻塞SQL線程)

2.4 MHA環(huán)境搭建

上篇文章末尾已搭建完成 ctrl+f搜索MHA搭建


2.5 故障模擬測試

2.5.1 關(guān)閉51主庫(db01上)

[root@db01 ~]# /etc/init.d/mysqld stop
Shutting down MySQL............ SUCCESS! 

2.5.2 此時(shí)主庫跳到52上(db03上查看)


2.5.3 修復(fù)主庫

[root@db01 ~]# /etc/init.d/mysqld start
Starting MySQL. SUCCESS! 

2.5.4 修復(fù)從庫

[root@db01 ~]# mysql -e "change master to master_host='10.0.0.52',master_user='repl',master_password='123' ,MASTER_AUTO_POSITION=1;"
[root@db01 ~]# mysql -e  "start slave;"

[root@db01 ~]# mysql -e  "show slave status \G"|grep Running:
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes

2.5.5 修改配置文件(db03)

2.5.6 啟動(dòng)MHA (db03)

[root@db03 ~]# nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover  < /dev/null> /var/log/mha/app1/manager.log 2>&1 &
[1] 7658
[root@db03 ~]# masterha_check_status --conf=/etc/mha/app1.cnf
app1 (pid:7658) is running(0:PING_OK), master:10.0.0.52

2.6 Manager額外參數(shù)介紹

說明:
主庫宕機(jī)誰來接管?
1. 所有從節(jié)點(diǎn)日志都是一致的盖彭,默認(rèn)會(huì)以配置文件的順序去選擇一個(gè)新主纹烹。
2. 從節(jié)點(diǎn)日志不一致,自動(dòng)選擇最接近于主庫的從庫
3. 如果對(duì)于某節(jié)點(diǎn)設(shè)定了權(quán)重(candidate_master=1)召边,權(quán)重節(jié)點(diǎn)會(huì)優(yōu)先選擇铺呵。
但是此節(jié)點(diǎn)日志量落后主庫100M日志的話,也不會(huì)被選擇隧熙∑遥可以配合check_repl_delay=0,關(guān)閉日志量的檢查贞盯,強(qiáng)制選擇候選節(jié)點(diǎn)音念。
(1)  ping_interval=1
#設(shè)置監(jiān)控主庫,發(fā)送ping包的時(shí)間間隔躏敢,嘗試三次沒有回應(yīng)的時(shí)候自動(dòng)進(jìn)行failover

(2) candidate_master=1
#設(shè)置為候選master闷愤,如果設(shè)置該參數(shù)以后,發(fā)生主從切換以后將會(huì)將此從庫提升為主庫件余,即使這個(gè)主庫不是集群中事件最新的slave

(3)check_repl_delay=0
#默認(rèn)情況下如果一個(gè)slave落后master 100M的relay logs的話讥脐,
MHA將不會(huì)選擇該slave作為一個(gè)新的master遭居,因?yàn)閷?duì)于這個(gè)slave的恢復(fù)需要花費(fèi)很長時(shí)間,
通過設(shè)置check_repl_delay=0,MHA觸發(fā)切換在選擇一個(gè)新的master的時(shí)候?qū)?huì)忽略復(fù)制延時(shí)旬渠,
這個(gè)參數(shù)對(duì)于設(shè)置了candidate_master=1的主機(jī)非常有用魏滚,因?yàn)檫@個(gè)候選主在切換的過程中一定是新的master

2.7 MHA的vip功能(db03)

2.7.1 拷貝master_ip_failover腳本到/user/local/bin下
[root@db03 /server/tools]# ll
total 9936
-rw-r--r-- 1 root root 4963681 Jun 28 11:35 Atlas-2.2.1.el6.x86_64.rpm
-rw-r--r-- 1 root root   20904 Jun 28 11:36 email_2019-最新.zip
-rw-r--r-- 1 root root    2248 Jun 28 11:36 master_ip_failover.txt
-rw-r--r-- 1 root root 5051108 Aug 19 18:16 MHA-2019-6.28.zip
-rw-r--r-- 1 root root   87119 Jun 28 11:34 mha4mysql-manager-0.56-0.el6.noarch.rpm
-rw-r--r-- 1 root root   36326 Jun 28 11:35 mha4mysql-node-0.56-0.el6.noarch.rpm

[root@db03 /server/tools]# cp master_ip_failover.txt /usr/local/bin/master_ip_failover

[root@db03 /server/tools]#  cd /usr/local/bin/
[root@db03 /usr/local/bin]# yum install -y dos2unix

[root@db03 /usr/local/bin]# dos2unix master_ip_failover 
dos2unix: converting file master_ip_failover to Unix format ...

[root@db03 /usr/local/bin]# chmod +x master_ip_failover 

2.7.2 更改manager配置文件:

vim /etc/mha/app1.cnf
添加此行:
master_ip_failover_script=/usr/local/bin/master_ip_failover

2.7.3 修改文件內(nèi)容:

[root@db03 /usr/local/bin]# vim /usr/local/bin/master_ip_failover 
my $vip = '10.0.0.55/24';
my $key = '1';
my $ssh_start_vip = "/sbin/ifconfig eth0:$key $vip";
my $ssh_stop_vip = "/sbin/ifconfig eth0:$key down";
vim /usr/local/bin/master_ip_failover

2.7.4 主庫上,手工生成第一個(gè)vip地址(db02)

手工在主庫上綁定vip坟漱,注意一定要和配置文件中的ethN一致鼠次,我的是eth0:1(1是key指定的值)

ifconfig eth0:1 10.0.0.55/24

2.7.8 重啟mha

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

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

2.7.9 郵件提醒

(1) 添加配置選項(xiàng)

vi /etc/mha/app1.cnf
report_script=/usr/local/bin/send

(2) 拷貝腳本

[root@db03 /server/tools]# cp email/*  /usr/local/bin

(3) 添加執(zhí)行權(quán)限

[root@db03 /usr/local/bin]# chmod +x ./*
[root@db03 /usr/local/bin]# ll
total 92
-rwxr-xr-x 1 root root  2166 Aug 20 15:44 master_ip_failover
-rwxr-xr-x 1 root root    35 Aug 20 15:52 send
-rwxr-xr-x 1 root root 80213 Aug 20 15:52 sendEmail
-rwxr-xr-x 1 root root   204 Aug 20 15:53 testpl

(4) 修改腳本

[root@db03 /usr/local/bin]# vim testpl 
#!/bin/bash
/usr/local/bin/sendEmail -o tls=no -f lichenxing0430@163.com -t 245684979@qq.com -s smt
p.163.com:25 -xu lichenxing0430 -xp <passworld> -u "MHA Waring" -m "YOUR MHA MAY BE F
AILOVER ,發(fā)送成功芋齿!" &>/tmp/sendmail.log

(5)停止MHA

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

(6)開啟MHA

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

(7) 發(fā)送郵件

[root@db03 /usr/local/bin]# ./testpl 

(8) 關(guān)閉主庫,看警告郵件(db02)

[root@db02 ~]# pkill mysqld

(9) 查看vip并收到郵件


(10) 故障恢復(fù)(db03)

mysql -e "change master to master_host='10.0.0.51',master_user='repl',master_password='123' ,MASTER_AUTO_POSITION=1;"

mysql -e  "start slave;"

mysql -e  "show slave status \G"|grep "Running:"

3. binlog server(db03)

3.1 添加配置文件

vim /etc/mha/app1.cnf 

[binlog1]
no_master=1
hostname=10.0.0.53
master_binlog_dir=/data/mysql/binlog

3.2 創(chuàng)建必要目錄

mkdir -p /data/mysql/binlog
chown -R mysql.mysql /data/*

3.3 拉取主庫binlog日志

cd /data/mysql/binlog

mysqlbinlog  -R --host=10.0.0.51 --user=mha --password=mha --raw  --stop-never mysql-bin.000001 &

3.4 重啟MHA

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

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

故障處理
主庫宕機(jī)柠衅,binlogserver 自動(dòng)停掉,manager 也會(huì)自動(dòng)停止绍刮。
處理思路:
1想暗、重新獲取新主庫的binlog到binlogserver中
2、重新配置文件binlog server信息
3栅炒、最后再啟動(dòng)MHA

3.管理員在高可用架構(gòu)維護(hù)的職責(zé)

  1. 搭建:MHA+VIP+SendReport+BinlogServer
  2. 監(jiān)控及故障處理
  3. 高可用架構(gòu)的優(yōu)化
    核心是:盡可能降低主從的延時(shí)掂摔,讓MHA花在數(shù)據(jù)補(bǔ)償上的時(shí)間盡量減少。
    5.7 版本赢赊,開啟GTID模式乙漓,開啟從庫SQL并發(fā)復(fù)制。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末释移,一起剝皮案震驚了整個(gè)濱河市叭披,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌玩讳,老刑警劉巖涩蜘,帶你破解...
    沈念sama閱讀 219,539評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異熏纯,居然都是意外死亡同诫,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門樟澜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來误窖,“玉大人,你說我怎么就攤上這事往扔》妨裕” “怎么了?”我有些...
    開封第一講書人閱讀 165,871評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵萍膛,是天一觀的道長吭服。 經(jīng)常有香客問我,道長蝗罗,這世上最難降的妖魔是什么艇棕? 我笑而不...
    開封第一講書人閱讀 58,963評(píng)論 1 295
  • 正文 為了忘掉前任蝌戒,我火速辦了婚禮,結(jié)果婚禮上沼琉,老公的妹妹穿的比我還像新娘北苟。我一直安慰自己,他們只是感情好打瘪,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,984評(píng)論 6 393
  • 文/花漫 我一把揭開白布友鼻。 她就那樣靜靜地躺著,像睡著了一般闺骚。 火紅的嫁衣襯著肌膚如雪彩扔。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,763評(píng)論 1 307
  • 那天僻爽,我揣著相機(jī)與錄音虫碉,去河邊找鬼。 笑死胸梆,一個(gè)胖子當(dāng)著我的面吹牛敦捧,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播碰镜,決...
    沈念sama閱讀 40,468評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼兢卵,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了洋措?” 一聲冷哼從身側(cè)響起济蝉,我...
    開封第一講書人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤杰刽,失蹤者是張志新(化名)和其女友劉穎菠发,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體贺嫂,經(jīng)...
    沈念sama閱讀 45,850評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡滓鸠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,002評(píng)論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了第喳。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片糜俗。...
    茶點(diǎn)故事閱讀 40,144評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖曲饱,靈堂內(nèi)的尸體忽然破棺而出悠抹,到底是詐尸還是另有隱情,我是刑警寧澤扩淀,帶...
    沈念sama閱讀 35,823評(píng)論 5 346
  • 正文 年R本政府宣布楔敌,位于F島的核電站,受9級(jí)特大地震影響驻谆,放射性物質(zhì)發(fā)生泄漏卵凑。R本人自食惡果不足惜庆聘,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,483評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望勺卢。 院中可真熱鬧伙判,春花似錦、人聲如沸黑忱。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽甫煞。三九已至酱塔,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間危虱,已是汗流浹背羊娃。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留埃跷,地道東北人蕊玷。 一個(gè)月前我還...
    沈念sama閱讀 48,415評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像弥雹,于是被迫代替她去往敵國和親垃帅。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,092評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容