MHA高可用搭建和應用

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

規(guī)劃:

主庫: 51 node

從庫:

52? ? ? node

53? ? ? node? ? manager

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

配置關鍵程序軟連接

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

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

配置各節(jié)點互信(各節(jié)點之間無密碼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é)點驗證

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

安裝軟件

下載mha軟件

mha官網:https://code.google.com/archive/p/mysql-master-ha/

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

所有節(jié)點安裝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

配置文件準備(db03)(manger)

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

mkdir -p /etc/mha

創(chuàng)建日志目錄

mkdir -p /var/log/mha/app1

編輯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

狀態(tài)檢查

### 互信檢查

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

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

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

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

查看MHA狀態(tài)

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

++++++++++++++++++++++++++++++++++++++++++++++++++++++


宕主庫測試

看日志

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

修復故障節(jié)點

恢復主從

change master to

master_host='10.0.0.52',

master_user='repl',

master_password='123' ,

MASTER_AUTO_POSITION=1;

start slave;

修復配置文件

手動:

vim /etc/mha/app1.cnf

[server1]

hostname=10.0.0.51

port=3306

命令:

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

預檢測腳本

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

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

啟動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



應用透明---VIP

vip :? 10.0.0.55/24

vip 故障轉移腳本

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

修改權限

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

修改內容

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

my $vip = '10.0.0.55/24';

my $key = '1';

my $if? = 'ens33';

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

my $ssh_stop_vip = "/sbin/ifconfig? $if:$key down";

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

修改Manager 配置文件

vim /etc/mha/app1.cnf

master_ip_failover_script=/usr/local/bin/master_ip_failover

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



手工在主庫添加VIP

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

故障提醒功能

準備腳本

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

my $smtp='smtp.qq.com';? ? ? ? ? ? # smtp服務器

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

my $mail_user='22654481';? ? ? ? ? # 用戶名 QQ號

my $mail_pass='gemghsvgkeyzcagh';? # 授權碼

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

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

修改配置文件

vim /etc/mha/app1.cnf

# 添加一行:

report_script=/usr/local/bin/send_report

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



日志補償的冗余方案--binlog_server

創(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 &

注意:

拉取日志的起點,需要按照目前從庫的已經獲取到的二進制日志點為起點

配置文件設置

vim /etc/mha/app1.cnf

[binlog1]

no_master=1

hostname=10.0.0.53

master_binlog_dir=/data/binlog_server/

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



MHA的維護操作 - 在線切換功能

只切換角色

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. 此種方法 切換,要注意將原主庫,F(xiàn)TWRL,否則會造成主從不一致。

2. 手工切換vip

3. 重新拉去新主庫的binlog

9.2 master_ip_online_change_script功能實現(xiàn)

功能: 在線切換時,自動鎖原主庫,VIP自動切換



腳本切換

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

修改MHA配置文件

vim /etc/mha/app1.cnf

master_ip_online_change_script=/usr/local/bin/master_ip_online_change

停 MHA

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

檢查repl

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

在線切換

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

重構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

啟動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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 第1章 MySQL高可用介紹 1.1 企業(yè)高可用評估標準 評估標準是 全年無故障率指標: 3個9 99.9%...
    張新雨有點胖噢閱讀 1,061評論 0 1
  • MySQL MHA 架構介紹:MHA由兩部分組成MHA Manager(管理節(jié)點)和MHA Node(數據節(jié)點),...
    XuDongTian閱讀 949評論 0 3
  • 一、配置MHA 1.1配置關鍵程序軟連接 ln -s /application/mysql/bin/mysqlbi...
    不知道就閱讀 809評論 0 0
  • 在之前的博客中,介紹了mysql的主從模型以及深層次的mysql的讀寫分離插件——ProxySQL,讓我們可以很大...
    4a873e424089閱讀 1,175評論 0 0
  • 這幾天睡眠太好了,所以今晚失眠了。 剛剛幫朋友完成一個文案的策劃,認真思考并給朋友一個答復之后,躺在床上翻來覆去睡...
    靜靜的凌河閱讀 224評論 2 3

友情鏈接更多精彩內容