day12(高可用)

1载矿、上節(jié)回顧


1、介紹

2虫蝶、主從復(fù)制的前提
      2臺(tái)機(jī)器
      二進(jìn)制日志
      server_id不同
      創(chuàng)建復(fù)制用戶
      數(shù)據(jù)預(yù)同步
      change master to
      start slave

3章咧、名詞介紹
      文件:
              主庫:binlog   二進(jìn)制日志
              從庫:master.info   主庫信息
                         relay_ log   中繼日志
                         relay_log.info  中繼日志應(yīng)用                    

       線程:
               主庫:binlog_dump_thread

               從庫:IQ  SQL


4、主從復(fù)制的原理


5能真、主從復(fù)制故障分析
show slave status\G

IO:
      connecting:
               網(wǎng)絡(luò)赁严、防火墻、IP粉铐、port疼约、user、password

       no:
            binlog     server_id
SQL:
        從庫寫入
         進(jìn)行從庫的只讀或者讀寫分離物理隔離
       

6蝙泼、主從延時(shí)
      主庫:DUMP線程 串行投遞日志
       GTID+雙一
       從庫: SQL線程回放  串行
       MTS


7程剥、延時(shí)從庫
      主要解決邏輯損壞
      對(duì)SQL線程進(jìn)行配置

應(yīng)用:
        1、監(jiān)控到
        2汤踏、停止主庫業(yè)務(wù)织鲸,關(guān)閉從庫SQL
        3、人工模擬SQL干活
        4溪胶、截取relay的起點(diǎn)和終點(diǎn)
        5搂擦、恢復(fù)從庫
        6、將從庫替換成主庫载荔,對(duì)外提供服務(wù)
        7盾饮、補(bǔ)償原主庫數(shù)據(jù)和新主庫保持一致采桃,并重新構(gòu)建主從

2懒熙、主從復(fù)制架構(gòu)演變

2.1丘损、基礎(chǔ)主從(不依賴與其他的任何軟件)


1主1從
1主多從
多級(jí)主從
---------------------->以上架構(gòu)大部分中小型企業(yè)還在用,還有一部分用了RDS
雙主
---------------------->中型企業(yè)工扎,在高可用(MMM)徘钥,分布式架構(gòu)(Mycat   ,   DBLE)
環(huán)狀
多主1從
------------------------>幾乎沒人用 

2.2、高性能架構(gòu) ---讀寫分離架構(gòu)

mysql-proxy   ------->   0.8   停了
360   ------->二次開發(fā)  Atlas    Atlas-sharding   2016年
MySQL   ------->mysql-router
Percona   ------->ProxySQL
Mariadb   ------->Maxscale


2.3肢娘、高可用架構(gòu)

2.3.1呈础、企業(yè)高可用性標(biāo)準(zhǔn)(去年無故障率)

99%                 (1-99%)x365=3.65dx24≈ 87.60小時(shí)
99.9%               (1-99.9%)x365=0.365dx24≈ 8.760小時(shí)             ---> 互聯(lián)網(wǎng)級(jí)別
99.99%              (1-99.99%)x365=0.0365dx24≈ 0.8760小時(shí)        ---> 準(zhǔn)金融級(jí)別
99.999%             (1-99.999%)x365=0.00365dx24≈ 0.08760小時(shí)     ---> 金融級(jí)別  
99.9999%            (1-99.9999%)x365=0.000365dx24≈ 0.008760小時(shí)  ---> “0” 宕機(jī)


2.3.2、高可用架構(gòu)產(chǎn)品


  (1)  負(fù)載均衡
         LVS   F5   nginx  有一定的高可用能力
  (2)  主備系統(tǒng)(單活)

(3)多活系統(tǒng)
          PXC(不收費(fèi))橱健,MGC(不收費(fèi))而钞,MySQL Cluster(收費(fèi)),Innodb Cluster(8.0 不收費(fèi)) Oracle RAC(收費(fèi))

2.4拘荡、分布式架構(gòu)(現(xiàn)在的大趨勢(shì))

Mycat  1.65
DBLE

2.5臼节、NewSQL

RDBMS+NoSQL+分布式
sp
TiDB
巨杉
polarDB
OceanBase


3、MHA 架構(gòu)模型

3.1珊皿、架構(gòu)圖

image.png

Manager
Node
一主兩從(三臺(tái)獨(dú)立主機(jī))

3.2网缝、軟件結(jié)構(gòu)


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

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


4蟋定、MHA 工作過程

4.1粉臊、安裝過程說明

1) 配置關(guān)鍵程序軟連接(主從都做)
ln -s /application/mysql/bin/mysqlbinlog    /usr/bin/mysqlbinlog
ln -s /application/mysql/bin/mysql          /usr/bin/mysql

2)配置各節(jié)點(diǎn)互信(主庫)
db01:

rm -rf /root/.ssh 
ssh-keygen
cd /root/.ssh 
mv id_rsa.pub authorized_keys
scp  -r  /root/.ssh  10.0.0.52:/root 
scp  -r  /root/.ssh  10.0.0.53:/root


各節(jié)點(diǎn)驗(yàn)證
db01:

ssh 10.0.0.51 date
ssh 10.0.0.52 date
ssh 10.0.0.53 date

db02:
ssh 10.0.0.51 date
ssh 10.0.0.52 date
ssh 10.0.0.53 date

db03:
ssh 10.0.0.51 date
ssh 10.0.0.52 date
ssh 10.0.0.53 date


3)安裝軟件

下載mha軟件
mha官網(wǎng):https://code.google.com/archive/p/mysql-master-ha/
github下載地址:https://github.com/yoshinorim/mha4mysql-manager/wiki/Downloads


所有節(jié)點(diǎn)安裝Node軟件依賴包
yum install perl-DBD-MySQL -y
rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm


在db01主庫中創(chuàng)建mha需要的用戶
grant all privileges on *.* to mha@'10.0.0.%' identified by 'mha';


Manager軟件安裝(db03)
yum install -y perl-Config-Tiny epel-release perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes
rpm -ivh mha4mysql-manager-0.56-0.el6.noarch.rpm


4)  配置文件準(zhǔn)備(db03)
創(chuàng)建配置文件目錄
 mkdir -p /etc/mha
創(chuàng)建日志目錄
 mkdir -p /var/log/mha/app1
編輯mha配置文件
cat > /etc/mha/app1.cnf<<EOF
[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
EOF


 5)狀態(tài)檢查(db03)

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



 .6)開啟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 &


7)查看MHA狀態(tài)
[root@db03 ~]# masterha_check_status --conf=/etc/mha/app1.cnf



4.2、軟件工作過程(宕機(jī)的時(shí)候)

4.2.1驶兜、manager 啟動(dòng)

(1)讀取--conf=/etc/mha/app1.cnf配置文件
(2)獲取到node相關(guān)信息(1主2從)
(3)調(diào)用masterha_check_ssh腳本扼仲,使用 ssh_user=root 進(jìn)行互信檢查
(4)調(diào)用masterha_check_repl 檢查主從復(fù)制情況
(5)manager啟動(dòng)成功
(6)通過masterha_master_monitor  以  ping_interval=2為間隔持續(xù)監(jiān)控主庫的狀態(tài)
          網(wǎng)絡(luò), 主機(jī) 抄淑,數(shù)據(jù)庫狀態(tài)(mha)
(7)當(dāng)Manager監(jiān)控到master宕機(jī)
(8)開始選主過程
         算法一:判斷是否有《強(qiáng)制主》參數(shù)
         算法二:判斷兩個(gè)從庫誰更新
         算法三:按照配置文件書寫順序
(9)判斷主庫SSH的連通性
         能 :s1  和  s2  立即保存(save_binary_logs)缺失部分的binlog到本地
         不能:
            在傳統(tǒng)模式下犀盟,調(diào)用apply_diff_logs計(jì)算s1和s2的relay_log的差異
            需要通過內(nèi)容進(jìn)行復(fù)雜的對(duì)比
            在GTID模式下:調(diào)用apply_diff_logs計(jì)算s1和s2的relay_log的差異 
            只需要對(duì)比GTID號(hào)碼即可,效率較高
          最后進(jìn)行數(shù)據(jù)補(bǔ)償
(10)解除s1從庫身份
(11)s2和s1構(gòu)建新的主從關(guān)系
(12)移除配置文件中故障節(jié)點(diǎn)
(13)manager工作完成蝇狼,自殺阅畴。(一次性的高可用)


額外的功能:
(1)提供Binlog Server
(2)應(yīng)用透明(VIP)
(3)實(shí)時(shí)通知管理員(send_report)
(4)自愈(待開發(fā)。迅耘。贱枣。。颤专。)



5纽哥、故障模擬及處理

5.1、停主庫db01:

systemctl stop mysqld

觀察manager  日志 tail -f /var/log/mha/app1/manager
末尾必須顯示successfully栖秕,才算正常切換成功春塌。   

5.2、修復(fù)故障庫:

systemctl start mysqld


5.3、恢復(fù)主從結(jié)構(gòu)

[root@db03 ~]# grep -i 'change master to ' /var/log/mha/app1/manager

db01:
CHANGE MASTER TO 
MASTER_HOST='10.0.0.52',
MASTER_PORT=3306, 
MASTER_AUTO_POSITION=1, 
MASTER_USER='repl', 
MASTER_PASSWORD='123';
start slave ;



5.4只壳、修改配置文件(db03)

vim /etc/mha/app1.cnf
[server1]
hostname=10.0.0.51
port=3306


5.5俏拱、啟動(dòng)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 &


檢查狀態(tài)
masterha_check_status --conf=/etc/mha/app1.cnf

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)很長(zhǎng)時(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



7、MHA的vip功能(db03)

參數(shù):
master_ip_failover_script=/usr/local/bin/master_ip_failover

注意:/usr/local/bin/master_ip_failover净蚤,必須事先準(zhǔn)備好

修改腳本內(nèi)容
vi  /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";


更改manager配置文件:
vi /etc/mha/app1.cnf
添加:
master_ip_failover_script=/usr/local/bin/master_ip_failover

注意:
[root@db03 ~]# dos2unix /usr/local/bin/master_ip_failover 
dos2unix: converting file /usr/local/bin/master_ip_failover to Unix format ...
[root@db03 ~]# chmod +x /usr/local/bin/master_ip_failover 


主庫上,手工生成第一個(gè)vip地址
手工在主庫上綁定vip输硝,注意一定要和配置文件中的ethN一致今瀑,我的是eth0:1(1是key指定的值)

ifconfig eth0:1 10.0.0.55/24


重啟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 &



8、郵件提醒

1. 參數(shù):
report_script=/usr/local/bin/send

2. 準(zhǔn)備郵件腳本
send_report

(1)準(zhǔn)備發(fā)郵件的腳本(上傳 email_2019-最新.zip中的腳本点把,到/usr/local/bin/中)
(2)將準(zhǔn)備好的腳本添加到mha配置文件中,讓其調(diào)用

3. 修改manager配置文件橘荠,調(diào)用郵件腳本
vi /etc/mha/app1.cnf
report_script=/usr/local/bin/send

(3)停止MHA
masterha_stop --conf=/etc/mha/app1.cnf


(4)開啟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 &


(5) 關(guān)閉主庫,看警告郵件  
故障修復(fù):
1. 恢復(fù)故障節(jié)點(diǎn)
(1)實(shí)例宕掉
/etc/init.d/mysqld start 
(2)主機(jī)損壞,有可能數(shù)據(jù)也損壞了
備份并恢復(fù)故障節(jié)點(diǎn)郎逃。
2.恢復(fù)主從環(huán)境
看日志文件:
CHANGE MASTER TO MASTER_HOST='10.0.0.52', MASTER_PORT=3306, MASTER_AUTO_POSITION=1, MASTER_USER='repl', MASTER_PASSWORD='123';
start slave ;
3.恢復(fù)manager
3.1 修好的故障節(jié)點(diǎn)配置信息哥童,加入到配置文件
[server1]
hostname=10.0.0.51
port=3306
3.2 啟動(dòng)manager   
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 &


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市褒翰,隨后出現(xiàn)的幾起案子贮懈,更是在濱河造成了極大的恐慌匀泊,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件朵你,死亡現(xiàn)場(chǎng)離奇詭異各聘,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)撬呢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門伦吠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來妆兑,“玉大人魂拦,你說我怎么就攤上這事「樯ぃ” “怎么了芯勘?”我有些...
    開封第一講書人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)腺逛。 經(jīng)常有香客問我荷愕,道長(zhǎng),這世上最難降的妖魔是什么棍矛? 我笑而不...
    開封第一講書人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任安疗,我火速辦了婚禮,結(jié)果婚禮上够委,老公的妹妹穿的比我還像新娘荐类。我一直安慰自己,他們只是感情好茁帽,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開白布玉罐。 她就那樣靜靜地躺著,像睡著了一般潘拨。 火紅的嫁衣襯著肌膚如雪吊输。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,631評(píng)論 1 305
  • 那天铁追,我揣著相機(jī)與錄音季蚂,去河邊找鬼。 笑死琅束,一個(gè)胖子當(dāng)著我的面吹牛癣蟋,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播狰闪,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼疯搅,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了埋泵?” 一聲冷哼從身側(cè)響起幔欧,我...
    開封第一講書人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤罪治,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后礁蔗,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體觉义,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年浴井,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了晒骇。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡磺浙,死狀恐怖洪囤,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情撕氧,我是刑警寧澤瘤缩,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站伦泥,受9級(jí)特大地震影響剥啤,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜不脯,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一府怯、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧防楷,春花似錦牺丙、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至肖揣,卻和暖如春民假,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背龙优。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工羊异, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人彤断。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓野舶,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親宰衙。 傳聞我的和親對(duì)象是個(gè)殘疾皇子平道,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355

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