点击上方“IT那活儿”公众号,关注后了解更多内容,不管IT什么活儿,干就完了!!!
1. MHA工作过程

2. MySQL MHA工具包简介
MySQL MHA主要涉及如下工具包:
添加或者删除配置的server信息。
本次安装采用4节点环境,各节点功能如下:
1. 软件准备
[root@snc-product-db-mysql01 software]# tar -xvf mysql-5.7.25-1.el7.x86_64.rpm-bundle.tar
mysql-community-libs-5.7.25-1.el7.x86_64.rpm
mysql-community-libs-compat-5.7.25-1.el7.x86_64.rpm
mysql-community-embedded-devel-5.7.25-1.el7.x86_64.rpm
mysql-community-embedded-5.7.25-1.el7.x86_64.rpm
mysql-community-client-5.7.25-1.el7.x86_64.rpm
mysql-community-server-5.7.25-1.el7.x86_64.rpm
mysql-community-embedded-compat-5.7.25-1.el7.x86_64.rpm
mysql-community-test-5.7.25-1.el7.x86_64.rpm
mysql-community-devel-5.7.25-1.el7.x86_64.rpm
mysql-community-common-5.7.25-1.el7.x86_64.rpm复制
2. 数据库安装
[root@snc-product-db-mysql01 software]# yum localinstall mysql-*
已加载插件:fastestmirror
Skipping: mysql-5.7.25-1.el7.x86_64.rpm-bundle.tar, filename does not end in .rpm.
正在检查 mysql-community-client-5.7.25-1.el7.x86_64.rpm: mysql-community-client-5.7.25-1.el7.x86_64
mysql-community-client-5.7.25-1.el7.x86_64.rpm 将被安装
正在检查 mysql-community-common-5.7.25-1.el7.x86_64.rpm: mysql-community-common-5.7.25-1.el7.x86_64
mysql-community-common-5.7.25-1.el7.x86_64.rpm 将被安装
......
(略)
......
已安装:
mysql-community-client.x86_64 0:5.7.25-1.el7
mysql-community-common.x86_64 0:5.7.25-1.el7
mysql-community-devel.x86_64 0:5.7.25-1.el7
mysql-community-embedded.x86_64 0:5.7.25-1.el7
mysql-community-embedded-compat.x86_64 0:5.7.25-1.el7
mysql-community-embedded-devel.x86_64 0:5.7.25-1.el7
mysql-community-libs.x86_64 0:5.7.25-1.el7
mysql-community-libs-compat.x86_64 0:5.7.25-1.el7
mysql-community-server.x86_64 0:5.7.25-1.el7
mysql-community-test.x86_64 0:5.7.25-1.el7复制
net-tools.x86_64 0:2.0-0.25.20131004git.el7
perl.x86_64 4:5.16.3-299.el7_9
perl-Carp.noarch 0:1.26-244.el7
perl-Data-Dumper.x86_64 0:2.145-3.el7
perl-Encode.x86_64 0:2.51-7.el7
perl-Exporter.noarch 0:5.68-3.el7
perl-File-Path.noarch 0:2.09-2.el7
perl-File-Temp.noarch 0:0.23.01-3.el7
perl-Filter.x86_64 0:1.49-3.el7
perl-Getopt-Long.noarch 0:2.40-3.el7
perl-HTTP-Tiny.noarch 0:0.033-3.el7
perl-JSON.noarch 0:2.59-2.el7
perl-PathTools.x86_64 0:3.40-5.el7
perl-Pod-Escapes.noarch 1:1.04-299.el7_9
perl-Pod-Perldoc.noarch 0:3.20-4.el7
perl-Pod-Simple.noarch 1:3.28-4.el7
perl-Pod-Usage.noarch 0:1.63-3.el7
perl-Scalar-List-Utils.x86_64 0:1.27-248.el7
perl-Socket.x86_64 0:2.010-5.el7
perl-Storable.x86_64 0:2.45-3.el7
perl-Text-ParseWords.noarch 0:3.29-4.el7
perl-Time-HiRes.x86_64 4:1.9725-3.el7
perl-Time-Local.noarch 0:1.2300-2.el7
perl-constant.noarch 0:1.27-2.el7
perl-libs.x86_64 4:5.16.3-299.el7_9
perl-macros.x86_64 4:5.16.3-299.el7_9
perl-parent.noarch 1:0.225-244.el7
perl-podlators.noarch 0:2.5.1-3.el7
perl-threads.x86_64 0:1.87-4.el7
perl-threads-shared.x86_64 0:1.43-6.el7
替代:
mariadb-libs.x86_64 1:5.5.68-1.el7
完毕!
[root@snc-product-db-mysql01 software]#
mysql-community-server-5.7.25-1.el7.x86_64.rpm复制
3. 数据库配置文件修改
[mysqld]
basedir=/var/lib/mysql
datadir=/var/lib/mysql/data
port=3306
server-id=1
read_only=off
pid-file=/var/run/mysqld/mysqld.pid
socket=/var/lib/mysql/mysql.sock
log-error=/var/lib/mysql/mha-server.err
innodb_buffer_pool_size=1073741824
log_bin=mha-server
binlog_format=row
innodb_doublewrite=on
join_buffer_size = 128M
sort_buffer_size = 2M
read_rnd_buffer_size = 2M
innodb_read_io_threads=6
innodb_write_io_threads=6
innodb_purge_threads=6
slow_query_log=ON
slow_query_log_file=chen.slow
long_query_time=2
log_queries_not_using_indexes=1
log_throttle_queries_not_using_indexes=10
innodb_data_file_path = ibdata1:100M:autoextend
show_compatibility_56=on
skip_name_resolve=on
expire_logs_days = 5
binlog_rows_query_log_events=on
relay_log_purge = 0
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
symbolic-links=0复制
两个从节点snc-product-db-mysql02和snc-product-db-mysql03的my.cnf文件参照上述内容设置,但需要注意以下几个参数:
log-bin = mha-server ##要求所有可能成为主库的节点开启二进制日志; relay_log_purge = 0 ##要求所有可能成为主库的节点配置 relay_log_purge = 0; read_only = 1 ##MHA 要求所有 slave 节点配置为 read_only = 1; server-id = 2 ##注意主从节点的 server-id 不同。
4. 初始化数据库
mkdir -p /var/lib/mysql/data
复制
/usr/bin/mysql_install_db --defaults-file=/etc/my.cnf --datadir=/var/lib/mysql/data/ --basedir=/var/lib/mysql/
复制
[root@snc-product-db-mysql01 data]# usr/bin/mysql_install_db --defaults-file=/etc/my.cnf --datadir=/var/lib/mysql/data/ --basedir=/var/lib/mysql/
2022-11-12 13:33:36 [WARNING] mysql_install_db is deprecated. Please consider switching to mysqld --initialize
[root@snc-product-db-mysql01 data]# ls
auto.cnf ca.pem client-cert.pem ib_buffer_pool ib_logfile0 mha-server.000001 mysql private_key.pem server-cert.pem sys
ca-key.pem chen.slow client-key.pem ibdata1 ib_logfile1 mha-server.index performance_schema public_key.pem server-key.pem复制
5. 修改root密码
skip-grant-tables
复制
service mysqld stop && service mysqld start
复制
set password for root@localhost=password('shsnc!@#');
update user set host='%' where user='root';
set password for root@'%'=password('shsnc!@#');
flush privileges;复制
修改完成后,删除/etc/mysql.cnf配置文件中的 skip-grant-tables 内容,并重启数据库服务,即可通过修改后的root口令登录数据库。
1. 创建复制用户
grant replication slave,replication client on *.* to 'repl'@'172.16.%.%' identified by 'repl';
复制
2. 确认主库偏移量
show master status;
mysql> show master status;
+-------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------------+----------+--------------+------------------+-------------------+
| mha-server.000004 | 466 | | | |
+-------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)复制
3. 从库设置与开启
CHANGE MASTER TO MASTER_HOST='172.16.100.101',MASTER_USER='repl',MASTER_PASSWORD='repl',MASTER_PORT=3306,MASTER_LOG_FILE='mha-server.000004',MASTER_LOG_POS=466,MASTER_CONNECT_RETRY=10;
start slave;复制
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 172.16.100.101
Master_User: repl
Master_Port: 3306
Connect_Retry: 10
Master_Log_File: mha-server.000004
Read_Master_Log_Pos: 1122
Relay_Log_File: snc-product-db-mysql02-relay-bin.000002
Relay_Log_Pos: 977
Relay_Master_Log_File: mha-server.000004
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
.....
(略)
.....
Master_TLS_Version:
1 row in set (0.00 sec)复制
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 172.16.100.101
Master_User: repl
Master_Port: 3306
Connect_Retry: 10
Master_Log_File: mha-server.000004
Read_Master_Log_Pos: 1122
Relay_Log_File: snc-product-db-mysql03-relay-bin.000002
Relay_Log_Pos: 977
Relay_Master_Log_File: mha-server.000004
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
........
(略)
........
Master_TLS_Version:
1 row in set (0.00 sec)复制
至此,一个简单的一主两从的复制环境搭建完成。
1. 互信认证配置
ssh-keygen -t rsa
ssh-copy-id -i ~/.ssh/id_rsa.pub 172.16.100.101
ssh-copy-id -i ~/.ssh/id_rsa.pub 172.16.100.102
ssh-copy-id -i ~/.ssh/id_rsa.pub 172.16.100.103
ssh-copy-id -i ~/.ssh/id_rsa.pub 172.16.100.104复制
2. Perl软件包安装
perl-Class-Load-0.20-3.el7.noarch.rpm
perl-Config-Tiny-2.14-7.el7.noarch.rpm
perl-Email-Date-Format-1.002-15.el7.noarch.rpm
perl-Log-Dispatch-2.41-1.el7.1.noarch.rpm
perl-Mail-Sender-0.8.23-1.el7.noarch.rpm
perl-Mail-Sendmail-0.79-21.el7.noarch.rpm
perl-MailTools-2.12-2.el7.noarch.rpm
perl-MIME-Lite-3.030-1.el7.noarch.rpm
perl-MIME-Types-1.38-2.el7.noarch.rpm
perl-Parallel-ForkManager-1.18-2.el7.noarch.rpm
perl-Params-Validate-1.08-4.el7.x86_64.rpm
perl-Sys-Syslog-0.33-3.el7.x86_64.rpm
执行如下命令安装perl包:
yum install perl-*.rpm复制
3. mha4mysql-node软件安装
yum install mha4mysql-node-0.56-0.el6.noarch.rpm
复制
[root@snc-product-db-mysql04 software]# yum install mha4mysql-node-0.56-0.el6.noarch.rpm
已加载插件:fastestmirror
正在检查 mha4mysql-node-0.56-0.el6.noarch.rpm: mha4mysql-node-0.56-0.el6.noarch
mha4mysql-node-0.56-0.el6.noarch.rpm 将被安装
正在解决依赖关系
--> 正在检查事务
---> 软件包 mha4mysql-node.noarch.0.0.56-0.el6 将被 安装
--> 正在处理依赖关系 perl(DBD::mysql),它被软件包 mha4mysql-node-0.56-0.el6.noarch 需要
Loading mirror speeds from cached hostfile
--> 正在处理依赖关系 perl(DBI),它被软件包 mha4mysql-node-0.56-0.el6.noarch 需要
--> 正在处理依赖关系 perl(DBI),它被软件包 mha4mysql-node-0.56-0.el6.noarch 需要
--> 正在检查事务
---> 软件包 perl-DBD-MySQL.x86_64.0.4.023-6.el7 将被 安装
---> 软件包 perl-DBI.x86_64.0.1.627-4.el7 将被 安装
--> 正在处理依赖关系 perl(RPC::PlServer) >= 0.2001,它被软件包 perl-DBI-1.627-4.el7.x86_64 需要
--> 正在处理依赖关系 perl(RPC::PlClient) >= 0.2000,它被软件包 perl-DBI-1.627-4.el7.x86_64 需要
--> 正在检查事务
---> 软件包 perl-PlRPC.noarch.0.0.2020-14.el7 将被 安装
--> 正在处理依赖关系 perl(Net::Daemon) >= 0.13,它被软件包 perl-PlRPC-0.2020-14.el7.noarch 需要
--> 正在处理依赖关系 perl(Net::Daemon::Test),它被软件包 perl-PlRPC-0.2020-14.el7.noarch 需要
--> 正在处理依赖关系 perl(Net::Daemon::Log),它被软件包 perl-PlRPC-0.2020-14.el7.noarch 需要
--> 正在处理依赖关系 perl(Compress::Zlib),它被软件包 perl-PlRPC-0.2020-14.el7.noarch 需要
--> 正在检查事务
---> 软件包 perl-IO-Compress.noarch.0.2.061-2.el7 将被 安装
--> 正在处理依赖关系 perl(Compress::Raw::Zlib) >= 2.061,它被软件包 perl-IO-Compress-2.061-2.el7.noarch 需要
--> 正在处理依赖关系 perl(Compress::Raw::Bzip2) >= 2.061,它被软件包 perl-IO-Compress-2.061-2.el7.noarch 需要
---> 软件包 perl-Net-Daemon.noarch.0.0.48-5.el7 将被 安装
--> 正在检查事务
---> 软件包 perl-Compress-Raw-Bzip2.x86_64.0.2.061-3.el7 将被 安装
---> 软件包 perl-Compress-Raw-Zlib.x86_64.1.2.061-4.el7 将被 安装
--> 解决依赖关系完成
依赖关系解决
=============================================================================================================================================================================================
Package 架构 版本 源 大小
=============================================================================================================================================================================================
正在安装:
mha4mysql-node noarch 0.56-0.el6 mha4mysql-node-0.56-0.el6.noarch 102 k
为依赖而安装:
perl-Compress-Raw-Bzip2 x86_64 2.061-3.el7 base 32 k
perl-Compress-Raw-Zlib x86_64 1:2.061-4.el7 base 57 k
perl-DBD-MySQL x86_64 4.023-6.el7 base 140 k
perl-DBI x86_64 1.627-4.el7 base 802 k
perl-IO-Compress noarch 2.061-2.el7 base 260 k
perl-Net-Daemon noarch 0.48-5.el7 base 51 k
perl-PlRPC noarch 0.2020-14.el7 base 36 k
事务概要
=============================================================================================================================================================================================
安装 1 软件包 (+7 依赖软件包)
总计:1.4 M
总下载量:1.3 M
安装大小:3.5 M
Is this ok [y/d/N]: y
Downloading packages:
(1/7): perl-Compress-Raw-Bzip2-2.061-3.el7.x86_64.rpm | 32 kB 00:00:00
(2/7): perl-Compress-Raw-Zlib-2.061-4.el7.x86_64.rpm | 57 kB 00:00:00
(3/7): perl-DBD-MySQL-4.023-6.el7.x86_64.rpm | 140 kB 00:00:00
(4/7): perl-IO-Compress-2.061-2.el7.noarch.rpm | 260 kB 00:00:00
(5/7): perl-Net-Daemon-0.48-5.el7.noarch.rpm | 51 kB 00:00:00
(6/7): perl-DBI-1.627-4.el7.x86_64.rpm | 802 kB 00:00:00
(7/7): perl-PlRPC-0.2020-14.el7.noarch.rpm | 36 kB 00:00:00
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
总计 2.8 MB/s | 1.3 MB 00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
正在安装 : perl-Compress-Raw-Bzip2-2.061-3.el7.x86_64 1/8
正在安装 : 1:perl-Compress-Raw-Zlib-2.061-4.el7.x86_64 2/8
正在安装 : perl-IO-Compress-2.061-2.el7.noarch 3/8
正在安装 : perl-Net-Daemon-0.48-5.el7.noarch 4/8
正在安装 : perl-PlRPC-0.2020-14.el7.noarch 5/8
正在安装 : perl-DBI-1.627-4.el7.x86_64 6/8
正在安装 : perl-DBD-MySQL-4.023-6.el7.x86_64 7/8
正在安装 : mha4mysql-node-0.56-0.el6.noarch 8/8
验证中 : perl-Net-Daemon-0.48-5.el7.noarch 1/8
验证中 : mha4mysql-node-0.56-0.el6.noarch 2/8
验证中 : perl-DBD-MySQL-4.023-6.el7.x86_64 3/8
验证中 : perl-IO-Compress-2.061-2.el7.noarch 4/8
验证中 : 1:perl-Compress-Raw-Zlib-2.061-4.el7.x86_64 5/8
验证中 : perl-DBI-1.627-4.el7.x86_64 6/8
验证中 : perl-Compress-Raw-Bzip2-2.061-3.el7.x86_64 7/8
验证中 : perl-PlRPC-0.2020-14.el7.noarch 8/8
已安装:
mha4mysql-node.noarch 0:0.56-0.el6
作为依赖被安装:
perl-Compress-Raw-Bzip2.x86_64 0:2.061-3.el7 perl-Compress-Raw-Zlib.x86_64 1:2.061-4.el7 perl-DBD-MySQL.x86_64 0:4.023-6.el7 perl-DBI.x86_64 0:1.627-4.el7
perl-IO-Compress.noarch 0:2.061-2.el7 perl-Net-Daemon.noarch 0:0.48-5.el7 perl-PlRPC.noarch 0:0.2020-14.el7
完毕!复制
4. mha4mysql-manager软件安装
yum install mha4mysql-manager-0.56-0.el6.noarch.rpm
复制
[root@snc-product-db-mysql04 software]# yum install mha4mysql-manager-0.56-0.el6.noarch.rpm
已加载插件:fastestmirror
正在检查 mha4mysql-manager-0.56-0.el6.noarch.rpm: mha4mysql-manager-0.56-0.el6.noarch
mha4mysql-manager-0.56-0.el6.noarch.rpm 将被安装
正在解决依赖关系
--> 正在检查事务
---> 软件包 mha4mysql-manager.noarch.0.0.56-0.el6 将被 安装
--> 解决依赖关系完成
依赖关系解决
=============================================================================================================================================================================================
Package 架构 版本 源 大小
=============================================================================================================================================================================================
正在安装:
mha4mysql-manager noarch 0.56-0.el6 mha4mysql-manager-0.56-0.el6.noarch 325 k
事务概要
=============================================================================================================================================================================================
安装 1 软件包
总计:325 k
安装大小:325 k
Is this ok [y/d/N]: y
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
正在安装 : mha4mysql-manager-0.56-0.el6.noarch 1/1
验证中 : mha4mysql-manager-0.56-0.el6.noarch 1/1
已安装:
mha4mysql-manager.noarch 0:0.56-0.el6
完毕!
[root@snc-product-db-mysql04 software]#复制
5. 配置MHA主文件
/etc/masterha/app1.cnf
[server default]
manager_workdir=/var/log/masterha/app1 ##工作目录 目录需要自己创建
manager_log=/var/log/masterha/app1/manager.log ##日志文件 目录需要自己创建
master_ip_failover_script=/etc/masterha/master_ip_failover ##vip切换脚本
user=mha_monitor ##操作mysql的账户 三台主机都必须一样
password=mha_monitor ##操作mysql的密码 三台主机都必须一样
ssh_user=root ##ssh面密登录账户
repl_user=repl ##mysql的复制账户
repl_password=repl ##mysql的复制密码
ping_interval=1 ##每隔ping_interval秒检测主库心跳,最多四次机会,如果都没有心跳,主库宕机复制
[server1]
hostname=172.16.100.101 ##mysql master主机ip; port=3306 ##端口; master_binlog_dir=/var/lib/mysql/data/mha-server ##二进制日志目录; candidate_master=1 #设置为候选master,如果设置该参数以后,发生主从切换以后将会将此从库提升为主库,即使这个主库不是集群中事件最新的slave。
hostname=172.16.100.102 ##从机ip; port=3306 ##从机端口; master_binlog_dir=/var/lib/mysql/data/mha-server ##二进制日志目录; candidate_master=1 ##是否候选备用master主机; check_repl_delay=0 ### 默认情况下,如果一个slave落后master 100M的relay logs的话,MHA将不会选择该slave作为一个新的master,因为对于这个slave的恢复需要花费很长时间。如果设置 check_repl_delay=0,MHA在触发切换选择一个新的master的时候将会忽略复制延时,这个参数对于设置了candidate_master=1的主机非常有用,可以保证候选主在切换后一定是新master。
hostname=192.168.88.131 ##从机ip; port=3306; master_binlog_dir=/var/lib/mysql/data/mha-server; no_master=1 ##不适合做主库的从机。
6. 配置网络故障切换文件
ifconfig ens192:1 172.16.100.105/24
复制
#!/usr/bin/env perl
use strict;
use warnings FATAL =>'all';
use Getopt::Long;
my (
$command, $orig_master_host, $orig_master_ip,
$orig_master_port, $new_master_host, $new_master_ip, $new_master_port
);
my $vip = '172.16.100.105/24'; # Virtual IP
my $key = "1";
my $ssh_start_vip = "/sbin/ifconfig ens192:$key $vip";
my $ssh_stop_vip = "/sbin/ifconfig ens192:$key down";
my $ssh_user="root";
my $exit_code = 0;
GetOptions(
'command=s' => \$command,
'ssh_user=s' => \$ssh_user,
'orig_master_host=s' => \$orig_master_host,
'orig_master_ip=s' => \$orig_master_ip,
'orig_master_port=i' => \$orig_master_port,
'new_master_host=s' => \$new_master_host,
'new_master_ip=s' => \$new_master_ip,
'new_master_port=i' => \$new_master_port,
);
exit &main();
sub main {
#print "\n\nIN SCRIPT TEST====$ssh_stop_vip==$ssh_start_vip===\n\n";
if ( $command eq "stop" || $command eq "stopssh" ) {
# $orig_master_host, $orig_master_ip, $orig_master_port are passed.
# If you manage master ip address at global catalog database,
# invalidate orig_master_ip here.
my $exit_code = 1;
eval {
"\n\n\n***************************************************************\n";
print "Disabling the VIP - $vip on old master:
$orig_master_host\n";
"***************************************************************\n\n\n\n";
&stop_vip();
$exit_code = 0;
};
if ($@) {
warn "Got Error: $@\n";
exit $exit_code;
}
exit $exit_code;
}
elsif ( $command eq "start" ) {
# all arguments are passed.
# If you manage master ip address at global catalog database,
# activate new_master_ip here.
# You can also grant write access (create user, set read_only=0, etc)
#here.
my $exit_code = 10;
eval {
"\n\n\n***************************************************************\n";
print "Enabling the VIP - $vip on new master: $new_master_host \n";
"***************************************************************\n\n\n\n";
&start_vip();
$exit_code = 0;
};
if ($@) {
warn $@;
exit $exit_code;
}
exit $exit_code;
}
elsif ( $command eq "status" ) {
print "Checking the Status of the script.. OK \n";
`ssh $ssh_user\@$orig_master_host \" $ssh_start_vip \"`;
exit 0;
}
else {
&usage();
exit 1;
}
}
# A simple system call that enable the VIP on the new master
sub start_vip() {
`ssh $ssh_user\@$new_master_host \" $ssh_start_vip \"`;
}
# A simple system call that disable the VIP on the old_master
sub stop_vip() {
`ssh $ssh_user\@$orig_master_host \" $ssh_stop_vip \"`;
}
sub usage {
"Usage: master_ip_failover --command=start|stop|stopssh|status
--orig_master_host=host --orig_master_ip=ip --orig_master_port=port
--new_master_host=host --new_master_ip=ip --new_master_port=port\n";
}复制
#/bin/bash
source /root/.bash_profile
vip=`echo '172.16.100.105/24'` # Virtual IP
key=`echo '1'`
command=`echo "$1" | awk -F = '{print $2}'`
orig_master_host=`echo "$2" | awk -F = '{print $2}'`
new_master_host=`echo "$7" | awk -F = '{print $2}'`
orig_master_ssh_user=`echo "${12}" | awk -F = '{print $2}'`
new_master_ssh_user=`echo "${13}" | awk -F = '{print $2}'`
stop_vip=`echo "ssh root@$orig_master_host /sbin/ifconfig ens192:$key down"`
start_vip=`echo "ssh root@$new_master_host /sbin/ifconfig ens192:$key $vip"`
if [ $command = 'stop' ]
then
echo -e "\n\n\n***************************************************************\n"
echo -e "Disabling the VIP - $vip on old master: $orig_master_host\n"
$stop_vip
if [ $? -eq 0 ]
then
echo "Disabled the VIP successfully"
else
echo "Disabled the VIP failed"
fi
echo -e "***************************************************************\n\n\n\n"
fi
if [ $command = 'start' -o $command = 'status' ]
then
echo -e "\n\n\n***************************************************************\n"
echo -e "Enabling the VIP - $vip on new master: $new_master_host \n"
$start_vip
if [ $? -eq 0 ]
then
echo "Enabled the VIP successfully"
else
echo "Enabled the VIP failed"
fi
echo -e "***************************************************************\n\n\n\n"
fi复制
7. 验证mysql复制是否成功
masterha_check_repl --conf=/etc/masterha/app1.cnf
复制
[root@snc-product-db-mysql04 bin]# masterha_check_repl --conf=/etc/masterha/app1.cnf
Wed Dec 21 12:00:06 2022 - [warning] Global configuration file /etc/masterha_default.cnf not found. Skipping.
..................
(略)
..................
Testing mysqlbinlog output.. done.
Cleaning up test file(s).. done.
Wed Dec 21 12:03:17 2022 - [info] Slaves settings check done.
Wed Dec 21 12:03:17 2022 - [info]
172.16.100.101(172.16.100.101:3306) (current master)
+--172.16.100.102(172.16.100.102:3306)
+--172.16.100.103(172.16.100.103:3306)
Wed Dec 21 12:03:17 2022 - [info] Checking replication health on 172.16.100.102..
Wed Dec 21 12:03:17 2022 - [info] ok.
Wed Dec 21 12:03:17 2022 - [info] Checking replication health on 172.16.100.103..
Wed Dec 21 12:03:17 2022 - [info] ok.
Wed Dec 21 12:03:17 2022 - [warning] master_ip_failover_script is not defined.
Wed Dec 21 12:03:17 2022 - [warning] shutdown_script is not defined.
Wed Dec 21 12:03:17 2022 - [info] Got exit code 0 (Not master dead).
MySQL Replication Health is OK.
[root@snc-product-db-mysql04 bin]#复制
8. MHA manager的启停维护
nohup masterha_manager --conf=/etc/masterha/app1.cnf &
复制
masterha_check_status --conf=/etc/masterha/app1.cnf
复制
cat /var/log/masterha/app1/manager.log
复制
masterha_stop --conf=/etc/masterha/app1.cnf
复制
#!/bin/bash
#file_name:start_monitor.sh
/usr/bin/nohup /usr/bin/masterha_manager --conf=/etc/masterha/app1.cnf --ignore_last_failover > /var/log/masterha/app1/manager.log 2>&1 &复制
或者也可以参照官方资料,使用daemon的方式运行。
1. 主库宕机测试





cat /var/log/masterha/app1/manager.log |grep -i "All other slaves should start"
[root@snc-product-db-mysql04 masterha]# cat /var/log/masterha/app1/manager.log |grep -i "All other slaves should start"
Wed Dec 21 13:36:39 2022 - [info] All other slaves should start replication from here. Statement should be: CHANGE
MASTER TO MASTER_HOST='172.16.100.102', MASTER_PORT=3306,
MASTER_LOG_FILE='mha-server.000004', MASTER_LOG_POS=471,
MASTER_USER='repl', MASTER_PASSWORD='xxx';复制
CHANGE MASTER TO MASTER_HOST='172.16.100.102',
MASTER_PORT=3306, MASTER_LOG_FILE='mha-server.000004',
MASTER_LOG_POS=471, MASTER_USER='repl',复制

2. 角色还原
masterha_stop --conf=/etc/masterha/app1.cnf
复制
masterha_master_switch --conf=/etc/masterha/app1.cnf --
master_state=alive --new_master_host=172.16.100.101 --
new_master_port=3306 --orig_master_is_new_slave --
running_updates_limit=10000复制
[root@snc-product-db-mysql04 masterha]# masterha_master_switch --conf=/etc/masterha/app1.cnf --master_state=alive --new_master_host=172.16.100.101 --new_master_port=3306 --orig_master_is_new_slave --running_updates_limit=10000
Wed Dec 21 15:52:48 2022 - [info] MHA::MasterRotate version 0.56.
Wed Dec 21 15:52:48 2022 - [info] Starting online master switch..
Wed Dec 21 15:52:48 2022 - [info]
.............
(略)
.............
Wed Dec 21 15:52:58 2022 - [info] Waiting to execute all relay logs on 172.16.100.103(172.16.100.103:3306)..
Wed Dec 21 15:52:58 2022 - [info] master_pos_wait(mha-server.000006:154) completed on 172.16.100.103(172.16.100.103:3306). Executed 0 events.
Wed Dec 21 15:52:58 2022 - [info] done.
Wed Dec 21 15:52:58 2022 - [info] Resetting slave 172.16.100.103(172.16.100.103:3306) and starting replication from the new master 172.16.100.101(172.16.100.101:3306)..
Wed Dec 21 15:52:58 2022 - [info] Executed CHANGE MASTER.
Wed Dec 21 15:52:58 2022 - [info] Slave started.
Wed Dec 21 15:52:59 2022 - [info] End of log messages from 172.16.100.103 ...
Wed Dec 21 15:52:59 2022 - [info]
Wed Dec 21 15:52:59 2022 - [info] -- Slave switch on host 172.16.100.103(172.16.100.103:3306) succeeded.
Wed Dec 21 15:52:59 2022 - [info] Unlocking all tables on the orig master:
Wed Dec 21 15:52:59 2022 - [info] Executing UNLOCK TABLES..
Wed Dec 21 15:52:59 2022 - [info] ok.
Wed Dec 21 15:52:59 2022 - [info] Starting orig master as a new slave..
Wed Dec 21 15:52:59 2022 - [info] Resetting slave 172.16.100.102(172.16.100.102:3306) and starting replication from the new master 172.16.100.101(172.16.100.101:3306)..
Wed Dec 21 15:52:59 2022 - [info] Executed CHANGE MASTER.
Wed Dec 21 15:52:59 2022 - [info] Slave started.
Wed Dec 21 15:52:59 2022 - [info] All new slave servers switched successfully.
Wed Dec 21 15:52:59 2022 - [info]
Wed Dec 21 15:52:59 2022 - [info] * Phase 5: New master cleanup phase..
Wed Dec 21 15:52:59 2022 - [info]
Wed Dec 21 15:52:59 2022 - [info] 172.16.100.101: Resetting slave info succeeded.
Wed Dec 21 15:52:59 2022 - [info] Switching master to 172.16.100.101(172.16.100.101:3306) completed successfully.
[root@snc-product-db-mysql04 masterha]#复制

本文作者:张 红(上海新炬中北团队)
本文来源:“IT那活儿”公众号

文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。