DBA-70-day12

5. 主從復(fù)制延時(shí)

5.1 什么是延時(shí)雅镊?

主庫(kù)做的事,從庫(kù)好久才做刃滓。

5.2 如何監(jiān)控仁烹?

5.2.1 傳輸過(guò)程監(jiān)控

主庫(kù):

show master status ;

從庫(kù):

show slave status \G

例子:

[root@db01 ~]# mysql -S /tmp/mysql3307.sock -e "show master status;"

+------------------+----------+--------------+------------------+-------------------+

| File? ? ? ? ? ? | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

+------------------+----------+--------------+------------------+-------------------+

| mysql-bin.000001 |? ? ? 154 |? ? ? ? ? ? ? |? ? ? ? ? ? ? ? ? |? ? ? ? ? ? ? ? ? |

+------------------+----------+--------------+------------------+-------------------+

[root@db01 ~]# mysql -S /tmp/mysql3308.sock -e "show slave status\G"|grep "Read_Master_Log_Pos"

Read_Master_Log_Pos: 154

[root@db01 ~]#

1000以上告警,10000以上緊急

5.2.2 回放是否及時(shí)

[root@db01 ~]# mysql -S /tmp/mysql3307.sock -e "show master status;"

+------------------+----------+--------------+------------------+-------------------+

| File? ? ? ? ? ? | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

+------------------+----------+--------------+------------------+-------------------+

| mysql-bin.000001 |? ? ? 154 |? ? ? ? ? ? ? |? ? ? ? ? ? ? ? ? |? ? ? ? ? ? ? ? ? |

+------------------+----------+--------------+------------------+-------------------+

[root@db01 ~]# mysql -S /tmp/mysql3308.sock -e "show slave status\G"|grep " Exec_Master_Log_Pos"

Exec_Master_Log_Pos: 154

10000以上告警咧虎,100000以上緊急

5.3 主從延時(shí)的原因

5.3.1 外部因素

網(wǎng)絡(luò)

主從配置(cpu\mem\io)

參數(shù)配置

等卓缰。

從庫(kù)太多

5.3.2 主庫(kù)方面

# dump線(xiàn)程是串行工作的模式。

5.6以前的版本砰诵,只能一個(gè)一個(gè)事務(wù)投遞binlog征唬。

5.6+版本以后,出現(xiàn)了group commit;

# binlog落地不及時(shí)茁彭。

采用ssd專(zhuān)門(mén)存儲(chǔ)binlog

5.3.3 從庫(kù)問(wèn)題

# IO落地relaylog

一般建議采用SSD

# SQL線(xiàn)程

默認(rèn)情況只有一個(gè)SQL線(xiàn)程总寒,只能串行工作。

主庫(kù)可以并發(fā)事務(wù)理肺。

高并發(fā)場(chǎng)景下摄闸,會(huì)造成較高延時(shí)。

出現(xiàn)大事務(wù)的時(shí)候妹萨,都會(huì)造成較高延時(shí)年枕。

解決方案:

1. 5.6版本,多SQL線(xiàn)程回放功能乎完。但是只能根據(jù)不同庫(kù)(database)進(jìn)行回放熏兄。

2. 5.7+版本中,加入MTS機(jī)制树姨。能夠按照group commit 的邏輯時(shí)鐘摩桶,進(jìn)行并行回放。

# 人的問(wèn)題

高并發(fā)場(chǎng)景下娃弓,會(huì)造成較高延時(shí)典格。

出現(xiàn)大事務(wù)的時(shí)候,都會(huì)造成較高延時(shí)台丛。

鎖問(wèn)題嚴(yán)重耍缴。

==============================

第九章? 主從復(fù)制(Source-Replica)-下-高級(jí)進(jìn)階

1. 延時(shí)從庫(kù)

1.1介紹

是我們認(rèn)為配置的一種特殊從庫(kù).人為配置從庫(kù)和主庫(kù)延時(shí)N小時(shí).

1.2 為什么要有延時(shí)從

什么是數(shù)據(jù)庫(kù)損壞?

物理?yè)p壞

主從復(fù)制非常擅長(zhǎng)解決物理?yè)p壞.

邏輯損壞

普通主從復(fù)制沒(méi)辦法解決邏輯損壞

1.3 配置延時(shí)從庫(kù)

SQL線(xiàn)程延時(shí):數(shù)據(jù)已經(jīng)寫(xiě)入relaylog中了,SQL線(xiàn)程"慢點(diǎn)"運(yùn)行

一般企業(yè)建議3-6小時(shí),具體看公司運(yùn)維人員對(duì)于故障的反應(yīng)時(shí)間

mysql>stop slave;

mysql>CHANGE MASTER TO MASTER_DELAY = 300;

mysql> start slave;

mysql> show slave status \G

SQL_Delay: 300

SQL_Remaining_Delay: NULL

1.4 延時(shí)從庫(kù)應(yīng)用 *****

1.4.1 故障恢復(fù)思路

1主1從,從庫(kù)延時(shí)5分鐘,主庫(kù)誤刪除1個(gè)庫(kù)

1. 5分鐘之內(nèi) 偵測(cè)到誤刪除操作

2. 停從庫(kù)SQL線(xiàn)程

3. 截取relaylog

起點(diǎn) :停止SQL線(xiàn)程時(shí),relay最后應(yīng)用位置

Relay_Log_File: db01-relay-bin.000002

Relay_Log_Pos: 320

終點(diǎn):誤刪除之前的position(GTID)

4. 恢復(fù)截取的日志到從庫(kù)

5. 從庫(kù)身份解除,替代主庫(kù)工作

1.4.2 故障模擬及恢復(fù)

1.主庫(kù)數(shù)據(jù)操作

create database relay charset utf8;

use relay

create table t1 (id int);

insert into t1 values(1);

drop database relay;

2. 停止從庫(kù)SQL線(xiàn)程

stop slave sql_thread;

3. 找relaylog的截取起點(diǎn)和終點(diǎn)

起點(diǎn):

Relay_Log_File: db01-relay-bin.000002

Relay_Log_Pos: 485

終點(diǎn):

mysql> show relaylog events in 'db01-relay-bin.000002';

| db01-relay-bin.000002 | 1145 | Query? ? ? ? ? |? ? ? ? 7 |? ? ? ? 1074 | drop database relay? ? ?

mysqlbinlog --start-position=485 --stop-position=1145? /data/3308/data/db01-relay-bin.000002>/tmp/relay.sql

從庫(kù)恢復(fù)relaylog

source /tmp/relay.sql

5.從庫(kù)身份解除

db01 [relay]>stop slave;

db01 [relay]>reset slave all

2. 半同步 ***

解決主從數(shù)據(jù)一致性問(wèn)題挽霉。

2.1 半同步復(fù)制工作原理的變化

1. 主庫(kù)執(zhí)行新的事務(wù),commit時(shí),更新 show master? status\G ,觸發(fā)一個(gè)信號(hào)給

2. binlog dump 接收到主庫(kù)的 show master status\G信息,通知從庫(kù)日志更新了

3. 從庫(kù)IO線(xiàn)程請(qǐng)求新的二進(jìn)制日志事件

4. 主庫(kù)會(huì)通過(guò)dump線(xiàn)程傳送新的日志事件,給從庫(kù)IO線(xiàn)程

5. 從庫(kù)IO線(xiàn)程接收到binlog日志,當(dāng)日志寫(xiě)入到磁盤(pán)上的relaylog文件時(shí),給主庫(kù)ACK_receiver線(xiàn)程

6. ACK_receiver線(xiàn)程觸發(fā)一個(gè)事件,告訴主庫(kù)commit可以成功了

7. 如果ACK達(dá)到了我們預(yù)設(shè)值的超時(shí)時(shí)間,半同步復(fù)制會(huì)切換為原始的異步復(fù)制.

2.2 配置半同步復(fù)制

加載插件

主:

INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';

從:

INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';

查看是否加載成功:

show plugins;

啟動(dòng):

主:

SET GLOBAL rpl_semi_sync_master_enabled = 1;

從:

SET GLOBAL rpl_semi_sync_slave_enabled = 1;

重啟從庫(kù)上的IO線(xiàn)程

STOP SLAVE IO_THREAD;

START SLAVE IO_THREAD;

查看是否在運(yùn)行

主:

show status like 'Rpl_semi_sync_master_status';

從:

show status like 'Rpl_semi_sync_slave_status';

3 . 過(guò)濾復(fù)制

3.1 說(shuō)明

主庫(kù):

show master status;

Binlog_Do_DB

Binlog_Ignore_DB

從庫(kù):

show slave status\G

? ? ? ? ? ? ? Replicate_Do_DB:

? ? ? ? ? Replicate_Ignore_DB:


? ? ? ? ? Replicate_Do_Table:

? ? ? Replicate_Ignore_Table:


? ? ? Replicate_Wild_Do_Table:

? Replicate_Wild_Ignore_Table:

Replicate_Do_DB:

Replicate_Ignore_DB:

3.2 實(shí)現(xiàn)過(guò)程

[root@db01 ~]# vim /data/3308/my.cnf

replicate_do_db=ppt

replicate_do_db=word

[root@db01 ~]# systemctl restart mysqld3308

主庫(kù):

Master [(none)]>create database word;

Query OK, 1 row affected (0.00 sec)

Master [(none)]>create database ppt;

Query OK, 1 row affected (0.00 sec)

Master [(none)]>create database excel;

Query OK, 1 row affected (0.01 sec)

或者使用以下方法:

mysql> help? CHANGE REPLICATION FILTER

4. GTID復(fù)制

4.1 GTID引入

4.2 GTID介紹

GTID(Global Transaction ID)是對(duì)于一個(gè)已提交事務(wù)的唯一編號(hào)防嗡,并且是一個(gè)全局(主從復(fù)制)唯一的編號(hào)。

它的官方定義如下:

GTID =server_uuid : transaction_id

7E11FA47-31CA-19E1-9E56-C43AA21293967:29

什么是sever_uuid侠坎,和Server-id 區(qū)別蚁趁?

核心特性: 全局唯一,具備冪等性

4.3 GTID核心參數(shù)

重要參數(shù):

gtid-mode=on

enforce-gtid-consistency=true

log-slave-updates=1

gtid-mode=on? ? ? ? ? ? ? ? ? ? ? ? --啟用gtid類(lèi)型,否則就是普通的復(fù)制架構(gòu)

enforce-gtid-consistency=true? ? ? --強(qiáng)制GTID的一致性

log-slave-updates=1? ? ? ? ? ? ? ? --slave更新是否記入日志

4.4 GTID復(fù)制配置過(guò)程:

4.4.1 清理環(huán)境

pkill mysqld

\rm -rf /data/3306/data/*

\rm -rf /data/binlog/*

\mv /etc/my.cnf /tmp

mkdir -p /data/3306/data /data/binlog/

chown -R mysql.mysql /data/*

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

主庫(kù)db01:

cat > /etc/my.cnf <<EOF

[mysqld]

basedir=/data/app/mysql/

datadir=/data/3306/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=/data/app/mysql

datadir=/data/3306/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=/data/app/mysql

datadir=/data/3306/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

4.4.3 初始化數(shù)據(jù)

mysqld --initialize-insecure --user=mysql --basedir=/data/app/mysql? --datadir=/data/3306/data

4.4.4 啟動(dòng)數(shù)據(jù)庫(kù)

/etc/init.d/mysqld start

4.4.5 構(gòu)建主從:

master:51

slave:52,53

51:

mysql -e "grant replication slave? on *.* to repl@'10.0.0.%' identified by '123';"

52\53:

change master to

master_host='10.0.0.51',

master_user='repl',

master_password='123' ,

MASTER_AUTO_POSITION=1;

start slave;

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

5.1 原生態(tài)復(fù)制結(jié)構(gòu)演變

1主1從实胸、1主N從

多級(jí)主從

5.2 擴(kuò)展架構(gòu)

讀寫(xiě)分離

高可用

分布式架構(gòu)

=================================

第十章? MySQL高可用及讀寫(xiě)分離技術(shù)

0. MHA高可用架構(gòu)介紹及搭建過(guò)程

0.1 規(guī)劃:

主庫(kù):

51 node

從庫(kù):

52? ? ? node

53? ? ? node? ? manager

0.2 準(zhǔn)備環(huán)境

略他嫡。1主2從GTID

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

ln -s /data/app/mysql/bin/mysqlbinlog? ? /usr/bin/mysqlbinlog

ln -s /data/app/mysql/bin/mysql? ? ? ? ? /usr/bin/mysql

0.4 配置各節(jié)點(diǎn)互信(各節(jié)點(diǎn)之間無(wú)密碼SSH)

# 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

0.5 安裝軟件

0.5.1 下載mha軟件

mha官網(wǎng):https://code.google.com/archive/p/mysql-master-ha/

github下載地址:https://github.com/yoshinorim/mha4mysql-manager/wiki/Downloads

0.5.2 所有節(jié)點(diǎn)安裝Node軟件依賴(lài)包

yum install perl-DBD-MySQL -y

rpm -ivh mha4mysql-node*.rpm

0.5.3 在db01主庫(kù)中創(chuàng)建mha需要的用戶(hù)

grant all privileges on *.* to mha@'10.0.0.%' identified by 'mha';

0.5.4? Manager軟件安裝(db03)

yum install -y perl-Config-Tiny epel-release perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes

rpm -ivh mha4mysql-manager*.rpm

0.6? 配置文件準(zhǔn)備(db03)

0.6.1 創(chuàng)建配置文件目錄

mkdir -p /etc/mha

0.6.2 創(chuàng)建日志目錄

mkdir -p /var/log/mha/app1

0.6.3 編輯mha配置文件

vim /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

0.7 狀態(tài)檢查

### 互信檢查

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

### 主從狀態(tài)檢查

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

0.8 開(kāi)啟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 &

0.9 查看MHA狀態(tài)

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

1. 什么是高可用??

企業(yè)高可用標(biāo)準(zhǔn):全年無(wú)故障時(shí)間

無(wú)故障時(shí)間? ? ? ? ? 故障時(shí)間? ? ?

99.9%? ? ? ? ? ? ? ? 0.1%? ? = 525.6? min? ? ? ? KA+雙主 :人為干預(yù)

99.99%? ? ? ? ? ? ? 0.01%? ? = 52.56? min? ? ? ? MHA? ? :半自動(dòng)化

99.999%? ? ? ? ? ? ? 0.001%? = 5.256? min? ? ? ? PXC 番官、 MGR 、MGC

99.9999%? ? ? ? ? ? 0.0001%? = 0.5256 min? ? ? ? 自動(dòng)化钢属、云化徘熔、平臺(tái)化

2. MHA的軟件結(jié)構(gòu)?

一堆perl寫(xiě)的腳本。

2.1 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信息

2.2 node 組件

save_binary_logs? ? ? ? ? ? 保存和復(fù)制master的二進(jìn)制日志

apply_diff_relay_logs? ? ? 識(shí)別差異的中繼日志事件并將其差異的事件應(yīng)用于其他的

purge_relay_logs? ? ? ? ? ? 清除中繼日志(不會(huì)阻塞SQL線(xiàn)程)

3. 站在產(chǎn)品經(jīng)理角度淆党,評(píng)估高可用軟件設(shè)計(jì)

3.1 監(jiān)控

3.2 選主

3.3 數(shù)據(jù)補(bǔ)償

3.4 故障轉(zhuǎn)移

3.5 應(yīng)用透明

3.6 自動(dòng)提醒

3.7 自愈

4. MHA FailOver 原理

4.1 監(jiān)控 :

通過(guò) masterha_master_monitor 酷师,每隔ping_interval秒探測(cè)一次Master 心跳。

監(jiān)測(cè)不到心跳染乌,一共給4次機(jī)會(huì)山孔。

4.2 選主

4.2.1 日志量(latest? slave)

各個(gè)從庫(kù)的日志量。

無(wú)GTID:

[root@db02 ~]#? mysql -e "show slave status\G" |grep "Master_Log"

Master_Log_File: mysql-bin.000003

Read_Master_Log_Pos: 194

有GTID:

[root@db02 ~]#? mysql -e "show slave status\G" |grep "Executed_Gtid_Set"

Executed_Gtid_Set: 1c35b73a-7321-11ea-8974-000c29248f69:1-6

4.2.2? 候選主 candidate master

candidate_master=1? 強(qiáng)制某個(gè)節(jié)點(diǎn)為備選主荷憋。如果日志量超過(guò)100M差異台颠,放棄掉他。

check_repl_delay=0? 不檢查日志量的差異台谊。

4.2.3 如果沒(méi)有權(quán)重蓉媳,從庫(kù)日志量一樣

根據(jù)配置文件的先后順序選擇新主譬挚。

4.2.4 默認(rèn)

從庫(kù)日志量和主庫(kù)延時(shí)100M以上锅铅。

4.3 日志補(bǔ)償

4.3.1 if? 主庫(kù)ssh 能連接

各個(gè)從節(jié)點(diǎn),通過(guò)save_binary_logs 立即保存缺失部分的binlog到/var/tmp/xxxxx

怎么判斷缺失日志减宣?

有GTID盐须?

[root@db01 ~]# mysql -e "show master status;"

[root@db02 ~]# mysql -e "show slave status\G" |grep "Retrieved_Gtid_Set"

4.3.2 eles 主庫(kù) ssh 不能連接

從節(jié)點(diǎn)調(diào)用apply_diff_relay_logs,計(jì)算兩個(gè)從節(jié)點(diǎn)的relay-log日志差異漆腌。

4.4 故障轉(zhuǎn)移

1. 取消所有節(jié)點(diǎn)的從庫(kù)狀態(tài)

2. 構(gòu)建新的主從關(guān)系

4.5 自動(dòng)將故障節(jié)點(diǎn)贼邓,從配置文件剔除

--remove_dead_master_conf

4.6 自殺

manager自動(dòng)退出。

4.7 應(yīng)用透明: vip

4.8 數(shù)據(jù)補(bǔ)償補(bǔ)充方案:binlog_server

4.9 切換提醒:send_report

5. 模擬故障并恢復(fù)

5.0 工作狀態(tài)查看

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

app1 (pid:17501) is running(0:PING_OK), master:10.0.0.51

5.1 宕主庫(kù)測(cè)試

[root@db01 ~]# /etc/init.d/mysqld stop

Shutting down MySQL............ SUCCESS!

[root@db01 ~]#

5.2 看日志

[root@db03 app1]# vim /var/log/mha/app1/manager

5.3 恢復(fù)

5.3.1 修復(fù)故障節(jié)點(diǎn)

[root@db01 ~]# /etc/init.d/mysqld start

Starting MySQL.. SUCCESS!

如果生產(chǎn)怎么辦闷尿?

按實(shí)際情況塑径。

5.3.2 恢復(fù)主從

change master to

master_host='10.0.0.52',

master_user='repl',

master_password='123' ,

MASTER_AUTO_POSITION=1;

start slave;

5.3.3 修復(fù)配置文件

方法一:?

vim /etc/mha/app1.cnf

[server1]

hostname=10.0.0.51

port=3306

方法二:

masterha_conf_host --command=add --conf=/etc/mha/app1.cnf --hostname=10.0.0.51 --block=server10 --params="port=3306"

masterha_conf_host --command=delete --conf=/etc/mha/app1.cnf --block=server1

5.3.4 預(yù)檢測(cè)腳本

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

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

5.3.5 啟動(dòng)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 &

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

app1 (pid:24316) is running(0:PING_OK), master:10.0.0.52

[root@db03 ~]#

6. 應(yīng)用透明---VIP

vip :? 10.0.0.55/24

6.1 vip 故障轉(zhuǎn)移腳本

上傳mha_script.tar文件到/usr/local/bin 解壓

6.2 修改權(quán)限

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

6.3 修改內(nèi)容

[root@db03 bin]# cp master_ip_failover master_ip_failover.bak

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";

my $ssh_Bcast_arp= "/sbin/arping -I eth0 -c 3 -A 10.0.0.55";

6.4 修改Manager 配置文件

vim /etc/mha/app1.cnf

master_ip_failover_script=/usr/local/bin/master_ip_failover

6.5 重啟MHA

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

[root@db03 bin]# 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 &

6.6 手工在主庫(kù)添加VIP

[root@db02 ~]# ifconfig ens33:1 10.0.0.55/24

7. 故障提醒功能

7.1 準(zhǔn)備腳本

[root@db03 bin]# cp send_report send_report.bak1

my $smtp='smtp.qq.com';? ? ? ? ? ? # smtp服務(wù)器

my $mail_from='22654481@qq.com';? ? # 發(fā)件箱

my $mail_user='22654481';? ? ? ? ? # 用戶(hù)名 QQ號(hào)

my $mail_pass='gemghsvgkeyzcagh';? # 授權(quán)碼

my $mail_to=['22654481@qq.com'];? ? # 收件箱

#my $mail_to=['to1@qq.com','to2@qq.com'];

7.2 修改配置文件

vim /etc/mha/app1.cnf

# 添加一行:

report_script=/usr/local/bin/send_report

7.3 重啟MHA

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

[root@db03 bin]# 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.4 模擬主庫(kù)宕機(jī)?

7.4.1 確認(rèn)主庫(kù)

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

app1 (pid:27096) is running(0:PING_OK), master:10.0.0.52

7.4.2 宕主庫(kù)

[root@db02 ~]# /etc/init.d/mysqld stop

Shutting down MySQL............ SUCCESS!

7.4.3 觀(guān)察 vip 漂移?

7.4.4 觀(guān)察 郵件

7.5? 修復(fù)MHA 架構(gòu)1主2從

8. 日志補(bǔ)償?shù)娜哂喾桨?-binlog_server

8.1 創(chuàng)建必要目錄(db03)

mkdir -p /data/binlog_server/

chown -R mysql.mysql /data/*

cd? /data/binlog_server/

[root@db03 ~]# mysql -e "show slave status \G"|grep "Master_Log"

? ? ? ? ? ? ? Master_Log_File: mysql-bin.000008

? ? ? ? ? Read_Master_Log_Pos: 194

? ? ? ? Relay_Master_Log_File: mysql-bin.000008

? ? ? ? ? Exec_Master_Log_Pos: 194

[root@db03 ~]#

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

注意:

拉取日志的起點(diǎn),需要按照目前從庫(kù)的已經(jīng)獲取到的二進(jìn)制日志點(diǎn)為起點(diǎn)

8.2 配置文件設(shè)置

vim /etc/mha/app1.cnf

[binlog1]

no_master=1

hostname=10.0.0.53

master_binlog_dir=/data/binlog_server/

8.3 重啟MHA

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

[root@db03 bin]# 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 &

9. MHA的維護(hù)操作 - 在線(xiàn)切換功能

9.1 只切換角色

masterha_master_switch? --conf=/etc/mha/app1.cnf --master_state=alive --new_master_host=10.0.0.52 --orig_master_is_new_slave --running_updates_limit=10000

注意:

master_ip_online_change_script is not defined. If you do not disable writes on the current master manually, applications keep writing on the current master. Is it ok to proceed? (yes/NO): yes

1. 此種方法 切換,要注意將原主庫(kù)填具,F(xiàn)TWRL统舀,否則會(huì)造成主從不一致。

2. 手工切換vip

3. 重新拉去新主庫(kù)的binlog

9.2 master_ip_online_change_script功能實(shí)現(xiàn)

功能: 在線(xiàn)切換時(shí)劳景,自動(dòng)鎖原主庫(kù)誉简,VIP自動(dòng)切換

9.2.1 準(zhǔn)備切換腳本

vim /usr/local/bin/master_ip_online_change

my $vip = "10.0.0.55/24";

my $key = "1";

my $ssh_start_vip = "/sbin/ifconfig ens33:$key $vip";

my $ssh_stop_vip = "/sbin/ifconfig ens33:$key $vip down";

my $ssh_Bcast_arp= "/sbin/arping -I ens33 -c 3 -A 10.0.0.55";

9.2.2 修改MHA配置文件

vim /etc/mha/app1.cnf

master_ip_online_change_script=/usr/local/bin/master_ip_online_change

9.2.3 停 MHA

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

9.2.4 檢查repl

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

9.2.4 在線(xiàn)切換

masterha_master_switch? --conf=/etc/mha/app1.cnf --master_state=alive --new_master_host=10.0.0.51 --orig_master_is_new_slave --running_updates_limit=10000

9.2.5 重構(gòu)binlogserver

[root@db03 bin]# ps -ef |grep mysqlbinlog

root? ? ? 28144? 16272? 0 17:50 pts/1? ? 00:00:00 mysqlbinlog -R --host=10.0.0.52 --user=mha --password=x x --raw --stop-never mysql-bin.000005

root? ? ? 28529? 16272? 0 18:03 pts/1? ? 00:00:00 grep --color=auto mysqlbinlog

[root@db03 bin]# kill -9 28144

[root@db03 bin]# cd /data/binlog_server/

[root@db03 binlog_server]# ll

total 4

-rw-r----- 1 root root 194 Apr? 1 17:50 mysql-bin.000005

[root@db03 binlog_server]# rm -rf *

[root@db03 binlog_server]# mysqlbinlog? -R --host=10.0.0.51 --user=mha --password=mha --raw? --stop-never mysql-bin.000009 &

[1] 28534

9.2.6 啟動(dòng)MHA

[root@db03 bin]# 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 binlog_server]# masterha_check_status? --conf=/etc/mha/app1.cnf

app1 (pid:28535) is running(0:PING_OK), master:10.0.0.51

MHA 高可用環(huán)境搭建

6.1 規(guī)劃:

主庫(kù): 51 node

從庫(kù):

52? ? ? node

53? ? ? node? ? manager

6.2 準(zhǔn)備環(huán)境(略。1主2從GTID)

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

ln -s /data/app/mysql/bin/mysqlbinlog? ? /usr/bin/mysqlbinlog

ln -s /data/app/mysql/bin/mysql? ? ? ? ? /usr/bin/mysql

6.4 配置各節(jié)點(diǎn)互信(各節(jié)點(diǎn)之間無(wú)密碼SSH)

# 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

6.5 安裝軟件

6.5.1 下載mha軟件

mha官網(wǎng):https://code.google.com/archive/p/mysql-master-ha/

github下載地址:https://github.com/yoshinorim/mha4mysql-manager/wiki/Downloads

6.5.2 所有節(jié)點(diǎn)安裝Node軟件依賴(lài)包

yum install perl-DBD-MySQL -y

rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm

6.5.3 在db01主庫(kù)中創(chuàng)建mha需要的用戶(hù)

grant all privileges on *.* to mha@'10.0.0.%' identified by 'mha';

6.5.4? 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

6.6? 配置文件準(zhǔn)備(db03)

6.6.1 創(chuàng)建配置文件目錄

mkdir -p /etc/mha

6.6.2 創(chuàng)建日志目錄

mkdir -p /var/log/mha/app1

6.6.3 編輯mha配置文件

vim /etc/mha/app1.cnf

[server default]

manager_log=/var/log/mha/app1/manager? ? ? ?

manager_workdir=/var/log/mha/app1? ? ? ? ? ?

master_binlog_dir=/data/3306/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

6.7 狀態(tài)檢查

### 互信檢查

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

### 主從狀態(tài)檢查

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

6.8 開(kāi)啟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 &

6.9 查看MHA狀態(tài)

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末盟广,一起剝皮案震驚了整個(gè)濱河市闷串,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌筋量,老刑警劉巖烹吵,帶你破解...
    沈念sama閱讀 219,188評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件碉熄,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡肋拔,警方通過(guò)查閱死者的電腦和手機(jī)具被,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)只损,“玉大人一姿,你說(shuō)我怎么就攤上這事≡颈梗” “怎么了叮叹?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,562評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)爆存。 經(jīng)常有香客問(wèn)我蛉顽,道長(zhǎng),這世上最難降的妖魔是什么先较? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,893評(píng)論 1 295
  • 正文 為了忘掉前任携冤,我火速辦了婚禮,結(jié)果婚禮上闲勺,老公的妹妹穿的比我還像新娘曾棕。我一直安慰自己,他們只是感情好菜循,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布翘地。 她就那樣靜靜地躺著,像睡著了一般癌幕。 火紅的嫁衣襯著肌膚如雪衙耕。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,708評(píng)論 1 305
  • 那天勺远,我揣著相機(jī)與錄音橙喘,去河邊找鬼。 笑死胶逢,一個(gè)胖子當(dāng)著我的面吹牛厅瞎,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播宪塔,決...
    沈念sama閱讀 40,430評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼磁奖,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了某筐?” 一聲冷哼從身側(cè)響起比搭,我...
    開(kāi)封第一講書(shū)人閱讀 39,342評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后身诺,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體蜜托,經(jīng)...
    沈念sama閱讀 45,801評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評(píng)論 3 337
  • 正文 我和宋清朗相戀三年霉赡,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了橄务。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,115評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡穴亏,死狀恐怖蜂挪,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情嗓化,我是刑警寧澤棠涮,帶...
    沈念sama閱讀 35,804評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站刺覆,受9級(jí)特大地震影響严肪,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜谦屑,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評(píng)論 3 331
  • 文/蒙蒙 一驳糯、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧氢橙,春花似錦酝枢、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,008評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)喉磁。三九已至谓苟,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間协怒,已是汗流浹背涝焙。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,135評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留孕暇,地道東北人仑撞。 一個(gè)月前我還...
    沈念sama閱讀 48,365評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像妖滔,于是被迫代替她去往敵國(guó)和親隧哮。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評(píng)論 2 355