MHA 高可用環(huán)境搭建
規(guī)劃:
主庫: 51 node
從庫:
52? ? ? node
53? ? ? node? ? manager
準(zhǔn)備環(huán)境(略褪测。1主2從GTID)
配置關(guān)鍵程序軟連接
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官網(wǎng):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
配置文件準(zhǔn)備(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
修復(fù)故障節(jié)點
恢復(fù)主從
change master to
master_host='10.0.0.52',
master_user='repl',
master_password='123' ,
MASTER_AUTO_POSITION=1;
start slave;
修復(fù)配置文件
手動:
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
預(yù)檢測腳本
[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
應(yīng)用透明---VIP
vip :? 10.0.0.55/24
vip 故障轉(zhuǎn)移腳本
上傳mha_script.tar文件到/usr/local/bin 解壓
修改權(quán)限
[root@db03 bin]# chmod +x /usr/local/bin/*
修改內(nèi)容
[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
故障提醒功能
準(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';? ? ? ? ? # 用戶名 QQ號
my $mail_pass='gemghsvgkeyzcagh';? # 授權(quán)碼
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 &
日志補償?shù)娜哂喾桨?-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 &
注意:
拉取日志的起點,需要按照目前從庫的已經(jīng)獲取到的二進制日志點為起點
配置文件設(shè)置
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
重構(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
啟動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