day10mysql的高可用

一腐晾,mysql高可用架構(gòu)

1.1 企業(yè)高可用評(píng)估指標(biāo):

3個(gè)9一般級(jí)別,4個(gè)9互聯(lián)網(wǎng)級(jí)別嗤军,5個(gè)9金融級(jí)別

1.2 mysql 數(shù)據(jù)庫(kù)高可用架構(gòu)產(chǎn)品

主備系統(tǒng):
(1) KA+雙主結(jié)構(gòu)+自主開發(fā)的腳本(節(jié)點(diǎn)監(jiān)控,數(shù)據(jù)校驗(yàn),數(shù)據(jù)補(bǔ)償) 3個(gè)9
(2) Google MMM 3-4個(gè)
(3) Facebook MHA 4個(gè)9 , Taobao TMHA , TDSQL MHA
多活系統(tǒng)
(5) PXC(percona), MGC(mariadb) , MySQL Cluster 5個(gè)9
(6) InnoDB Cluster , PolarDB ,TiDB 分布式高可用

1.3 基礎(chǔ)架構(gòu)搭建環(huán)境準(zhǔn)備

 (1)環(huán)境準(zhǔn)備(一主兩從)
  (2) 準(zhǔn)備配置文件
  主庫(kù)db01:
  cat > /etc/my.cnf <<EOF
  [mysqld]
  basedir=/usr/local/mysql/
  datadir=/data/mysql/data
  socket=/tmp/mysql.sock
  server_id=51
  port=3306
  secure-file-priv=/tmp
  autocommit=0
  log_bin=/data/binlog/mysql-bin
  binlog_format=row
  gtid-mode=on
  enforce-gtid-consistency=true
  log-slave-updates=1
  [mysql]
  prompt=db01 [\\d]>
  EOF

  slave1(db02):
  cat > /etc/my.cnf <<EOF
  [mysqld]
  basedir=/usr/local/mysql
  datadir=/data/mysql/data
  socket=/tmp/mysql.sock
  server_id=52
  port=3306
  secure-file-priv=/tmp
  autocommit=0
  log_bin=/data/binlog/mysql-bin
  binlog_format=row
  gtid-mode=on
  enforce-gtid-consistency=true
  log-slave-updates=1
  [mysql]
  prompt=db02 [\\d]>
  EOF

  slave2(db03):
  cat > /etc/my.cnf <<EOF
  [mysqld]
  basedir=/usr/local/mysql
  datadir=/data/mysql/data
  socket=/tmp/mysql.sock
  server_id=53
  port=3306
  secure-file-priv=/tmp
  autocommit=0
  log_bin=/data/binlog/mysql-bin
  binlog_format=row
  gtid-mode=on
  enforce-gtid-consistency=true
  log-slave-updates=1
  [mysql]
  prompt=db03 [\\d]>
  EOF
  (3) 初始化數(shù)據(jù)
  mysqld --initialize-insecure --user=mysql --      basedir=/usr/local/mysql  --datadir=/data/mysql/data 
  (5) 啟動(dòng)數(shù)據(jù)庫(kù)
  /etc/init.d/mysqld start
  (6) 構(gòu)建主從:
  master:51
  slave:52,53

  51:
  grant replication slave  on *.* to repl@'10.0.0.%' identified     by '123';

  52\53:
  change master to 
  master_host='10.0.0.52',
  master_user='repl',
  master_password='123456' ,
  MASTER_AUTO_POSITION=1;

  start slave;

說明:MHA高可用至少需要1主兩從結(jié)構(gòu),獨(dú)立節(jié)點(diǎn),不能是多實(shí)例匙奴,開啟GTID復(fù)制更好一些

配置關(guān)鍵程序軟連接

ln -s /usr/local/mysql/bin/mysqlbinlog /usr/bin/mysqlbinlog
ln -s /usr/local/mysql/bin/mysql /usr/bin/mysql
說明:MHA工作過程不會(huì)調(diào)用profile里的環(huán)境變量所以系統(tǒng)設(shè)置。

配置個(gè)節(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
用于截取日志時(shí)恢復(fù)免交互yes

1.4 MHA軟件下載及配置

(1) 下載mha軟件
mha官網(wǎng):https://code.google.com/archive/p/mysql-master-ha/
github下載地址:https://github.com/yoshinorim/mha4mysql-manager/wiki/Downloads
(2) 所有節(jié)點(diǎn)安裝Node軟件依賴包
yum install perl-DBD-MySQL -y
rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm
(3) 在db01主庫(kù)中創(chuàng)建mha需要的用戶 也可提供給監(jiān)控做管理用戶妄荔。
grant all privileges on . to mha@'10.0.0.%' identified by 'mha';

(5) Manager軟件安裝(db03)
yum install -y perl-Config-Tiny epel-release perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes
yum install -y mha4mysql-manager-0.56-0.el6.noarch.rpm
此處裝一個(gè)管理主從的manager軟件泼菌,一般放在單獨(dú)一臺(tái)清涼的服務(wù)器上,此處裝S2上

1.5 配置文件準(zhǔn)備

  1.創(chuàng)建配置文件目錄
  mkdir -p /etc/mha
  2.創(chuàng)建日志目錄
  mkdir /var/log/mha/app1/manager
  3.編輯MHA配置??文件
  cat > /etc/mha/app1.cnf<<EOF

  [server default]
  # manager 工作日志
  manager_log=/var/log/mha/app1/manager      
  # 工作目錄
  manager_workdir=/var/log/mha/app1   
  # 主庫(kù)的binlog位置         
  master_binlog_dir=/data/binlog    
  # MHA專用管理用戶 
  user=mha                                   
  password=mha   
  # 心跳檢測(cè)的時(shí)間間隔,自動(dòng)檢測(cè)4次                  
  ping_interval=2

  # 復(fù)制用戶
  repl_password=123
  repl_user=repl

  # ssh的互信用戶
  ssh_user=root   

              
  [server1]                                   
  hostname=10.0.0.51
  port=3306                                 
  [server2]            
  hostname=10.0.0.52
  candidate_master=1     # 設(shè)定選主權(quán)重
  port=3306
  [server3]
  hostname=10.0.0.53
  port=3306
  EOF

1.6 狀態(tài)檢查

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

1.7 開啟mha(db03)

  nohup masterha_manager --conf=/et c/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover 
   < /dev/null> /var/log/mha/app1/manager.log 2>&1 &
  --conf=/etc/mha/app1.cnf  :   業(yè)務(wù)配置文件,可以管理多套      MHA架構(gòu)
  --remove_dead_master_conf :   自動(dòng)剔除故障主節(jié)點(diǎn)
  --ignore_last_failover    :   忽略最后一次failover.

1.8 查看各關(guān)閉命令

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

1.9 配置總結(jié)

  10.5.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ā)啦租,無(wú)需人為操作
save_binary_logs 保存和復(fù)制master的二進(jìn)制日志
apply_diff_relay_logs 識(shí)別差異的中繼日志事件并將其差異的事件應(yīng)用于其他的
purge_relay_logs 清除中繼日志(不會(huì)阻塞SQL線程)

1.10MHA的工作原理 *****

  ①哗伯,MHA應(yīng)用在最低一主兩從的mysql主從復(fù)制環(huán)境中
  ②,會(huì)通過masterha_manager來(lái)啟動(dòng)MHA的manager管理程序
  ③篷角,MHA會(huì)通過msterha_master_monitor監(jiān)控主從的狀態(tài)  通過ping機(jī)制放送四次心跳檢測(cè)
  ④焊刹,如果發(fā)現(xiàn)主庫(kù)異常,會(huì)觸發(fā)failover程序恳蹲,從新選擇新的主庫(kù)虐块,依次選擇原則為,權(quán)重設(shè)置嘉蕾,binlog量的大小贺奠,配置中server的順序。
  ⑤错忱,數(shù)據(jù)補(bǔ)償mha會(huì)調(diào)用server_binlog機(jī)制自動(dòng)連接save_binary_logs恢復(fù)缺失的日志到各個(gè)節(jié)點(diǎn)的/var/tmp/xxx.log文件中儡率,此外如果不能建立ssh連接情況會(huì)通過apply_diff_relay_logs自動(dòng)對(duì)比差異互相補(bǔ)償。
  ⑥以清,數(shù)據(jù)補(bǔ)償完成后喉悴,會(huì)調(diào)用masterha_master_switch腳本進(jìn)行切換,原理為stop 各個(gè)節(jié)點(diǎn)slave玖媚,然后change master  reset slave all新的主庫(kù)信息
  ⑦箕肃,對(duì)與應(yīng)用透明需求VIP需要調(diào)用master_ip_script指定腳本,實(shí)現(xiàn)vip漂移到新的主庫(kù)
  ⑧今魔,調(diào)用report_script指定腳本大宋故障信息
  ⑨勺像,最好原先的主庫(kù)信息在manster 的配置文件中被清楚掉,且masterha_manager也會(huì)實(shí)去作用错森。
具體操作

準(zhǔn)備vip腳本
[root@db03 ~]# cp master_ip_failover.txt /usr/local/bin/master_ip_failover

  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";注意      eth0根據(jù)實(shí)際寫
  my $ssh_stop_vip = "/sbin/ifconfig eth0:$key down";

  注意:
  [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 

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

  10.7.3 主庫(kù)上吟宦,手工生成第一個(gè)vip地址
  手工在主庫(kù)上綁定vip,注意一定要和配置文件中的ethN一      致涩维,我的是eth0:1(1是key指定的值)
  ifconfig eth0:1 10.0.0.55/24

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

  10.8  binlog server(db03)              額外數(shù)據(jù)補(bǔ)償?shù)墓δ?     (binlog server功能)   
  10.8.1 配置參數(shù):
  vim /etc/mha/app1.cnf 
  [binlog1]
  no_master=1
  hostname=10.0.0.53
  master_binlog_dir=/data/mysql/binlog


  10.8.2 創(chuàng)建必要目錄
  mkdir -p /data/mysql/binlog
  chown -R mysql.mysql /data/*

  10.8.3 拉取主庫(kù)binlog日志
  cd /data/mysql/binlog   
  mysqlbinlog  -R --host=10.0.0.51 --user=mha --      password=mha --raw  --stop-never mysql-bin.000001 &

  **注意: 生產(chǎn)中, 拉取起點(diǎn)從正在使用的binlog開啟**

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

  10.9. 郵件提醒(db03)
  10.9.1 準(zhǔn)備腳本
  [root@db03 ~]# unzip email_2019-最新.zip 
  [root@db03 ~]# cd email/
  [root@db03 ~/email]# ll
  總用量 88
  -rw-r--r-- 1 root root    35 12月 27 2017 send
  -rw-r--r-- 1 root root 80213 9月  30 2009 sendEmail
  -rw-r--r-- 1 root root   203 4月  19 2019 testpl
  [root@db03 ~/email]# cp -a * /usr/local/bin/
  [root@db03 ~/email]# cd /usr/local/bin/
  [root@db03 /usr/local/bin]# chmod +

  10.9.2 修改參數(shù):
  vim /etc/mha/app1.cnf 
  report_script=/usr/local/bin/send


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

  10.10 測(cè)試MHA高可用能力,并恢復(fù).

  10.10.1 停主庫(kù)
  pkill mysqld 

  10.10.2 觀察切換結(jié)果
  vip 
  主從身份 
  配置文件
  binlogserver 
  manager進(jìn)程
  看日志
  [root@db03 ~]# vim /var/log/mha/app1/manager

2. 修復(fù)全新的高可用環(huán)境(高可用故障皆可按以下思路排查)

  1. 檢查修復(fù)主從關(guān)系開啟mysql故障庫(kù)(此處模擬的時(shí)庫(kù)關(guān)      閉)重新建立新的主從關(guān)系
  db01: 
  change master to 
  master_host='10.0.0.52',
  master_user='repl',
  master_password='123' ,
  MASTER_AUTO_POSITION=1;
  start slave;
  2. 檢查修復(fù)配置文件
  db03 : 添加此信息
  vim /etc/mha/app1.cnf 
  [server1]
  hostname=10.0.0.51
  port=3306
  3. 修復(fù)binlogserver
  [root@db03 ~]# cd /data/mysql/binlog/
  [root@db03 /data/mysql/binlog]# rm -rf *
  mysqlbinlog  -R --host=10.0.0.52 --user=mha --    password=mha --raw  --stop-never mysql-bin.000001 &
  **說明:此處調(diào)用的是日志補(bǔ)償腳本殃姓,先刪除原先主庫(kù)的      日志文件從新從新的主庫(kù)拉取袁波,在企業(yè)環(huán)境中選擇最新的      binlog日志文件即可。
  5. 檢查vip是否漂移到新的主庫(kù)
  命令
  ifconfig eth0:1 10.0.0.55/24添加臨時(shí)vip網(wǎng)卡重啟也會(huì)消失
  ifconfig eth0:1 down刪除
  6. 互信檢查蜗侈,主從檢查篷牌,此檢查會(huì)檢查主從關(guān)系,MHA腳  本調(diào)用及vip等信息踏幻,可關(guān)注報(bào)錯(cuò)
  masterha_check_ssh  --conf=/etc/mha/app1.cnf 
  masterha_check_repl  --conf=/etc/mha/app1.cnf 

  7. 啟動(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 &

  [root@db03 /data/mysql/binlog]# masterha_check_status --conf=/etc/mha/app1.cnf
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末枷颊,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子该面,更是在濱河造成了極大的恐慌夭苗,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,576評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件隔缀,死亡現(xiàn)場(chǎng)離奇詭異题造,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)猾瘸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門界赔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人须妻,你說我怎么就攤上這事仔蝌》毫欤” “怎么了荒吏?”我有些...
    開封第一講書人閱讀 168,017評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)渊鞋。 經(jīng)常有香客問我绰更,道長(zhǎng),這世上最難降的妖魔是什么锡宋? 我笑而不...
    開封第一講書人閱讀 59,626評(píng)論 1 296
  • 正文 為了忘掉前任儡湾,我火速辦了婚禮,結(jié)果婚禮上执俩,老公的妹妹穿的比我還像新娘徐钠。我一直安慰自己,他們只是感情好役首,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,625評(píng)論 6 397
  • 文/花漫 我一把揭開白布尝丐。 她就那樣靜靜地躺著,像睡著了一般衡奥。 火紅的嫁衣襯著肌膚如雪爹袁。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,255評(píng)論 1 308
  • 那天矮固,我揣著相機(jī)與錄音失息,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛盹兢,可吹牛的內(nèi)容都是我干的邻梆。 我是一名探鬼主播,決...
    沈念sama閱讀 40,825評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼蛤迎,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼确虱!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起校辩,我...
    開封第一講書人閱讀 39,729評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎辆童,沒想到半個(gè)月后宜咒,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,271評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡把鉴,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,363評(píng)論 3 340
  • 正文 我和宋清朗相戀三年故黑,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片庭砍。...
    茶點(diǎn)故事閱讀 40,498評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡场晶,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出怠缸,到底是詐尸還是另有隱情诗轻,我是刑警寧澤,帶...
    沈念sama閱讀 36,183評(píng)論 5 350
  • 正文 年R本政府宣布揭北,位于F島的核電站扳炬,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏搔体。R本人自食惡果不足惜恨樟,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,867評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望疚俱。 院中可真熱鬧劝术,春花似錦、人聲如沸呆奕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)登馒。三九已至匙握,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間陈轿,已是汗流浹背圈纺。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工秦忿, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蛾娶。 一個(gè)月前我還...
    沈念sama閱讀 48,906評(píng)論 3 376
  • 正文 我出身青樓灯谣,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親蛔琅。 傳聞我的和親對(duì)象是個(gè)殘疾皇子胎许,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,507評(píng)論 2 359

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