MHA(Master High Availability)是一个开源的 MySQL 高可用性解决方案,专为 MySQL 主从复制架构设计,旨在提供自动化主故障转移的功能。以下是 MHA 的一些关键特点和实现步骤:
自动化主故障转移: MHA 能够监控主节点的状态,一旦检测到主节点故障,会自动将拥有最新数据的从节点提升为新的主节点。
角色分配: MHA 有两种关键角色,分别是 MHA Manager(管理节点)和 MHA Node(数据节点)。MHA Manager通常部署在独立的机器上,而 MHA Node 则是数据库节点。
提供工具: MHA 提供了多个工具,用于监控、管理和执行主从切换等操作。
以下是 MHA 的主要组成部分:
功能: MHA Manager 是 MHA 的核心组件,负责监控主节点的健康状况、执行故障切换、管理配置文件等任务。
部署: 通常部署在一个独立的服务器上,不直接参与数据库的读写操作。
功能: MHA Node 在每个 MySQL 数据库节点上运行,负责处理从 MHA Manager 接收到的指令,执行主从切换和其他操作。
部署: 在每个 MySQL 数据库节点上都需要部署一个 MHA Node。
功能: MySQL 主节点是整个主从复制架构中的主要写入节点,负责接收写操作并将其同步到从节点。
MHA 角色: 在 MHA 中,MySQL 主节点是通过配置文件中的 masterha_manager
部分指定的。
功能: MySQL 从节点是接收主节点变更并应用到本地数据库的节点。
MHA 角色: 在 MHA 中,MySQL 从节点是通过配置文件中的 serverX
部分指定的,其中 X 是从节点的编号。
功能: MHA 的配置文件包含了 MHA Manager 和 MHA Node 的配置信息,以及 MySQL 主从节点的连接信息、认证信息等。
文件: 通常命名为 masterha.cnf
,需要在 MHA Manager 和每个 MHA Node 上进行配置。
功能: MHA 使用 SSH 连接到 MySQL 主从节点,执行一些管理和维护操作。
配置: 在 MHA 配置文件中,需要指定 SSH 的相关配置信息。
功能: Replication Manager 是 MHA 的一个附加组件,用于提供更灵活的复制拓扑管理,支持多个主节点和链式复制等场景。
部署: 可选部署,根据实际需求选择是否使用。
以上是 MHA 主要的组成部分,通过这些组件的协同工作,MHA 实现了对 MySQL 主从复制的高可用性管理和自动化故障切换。在配置和使用 MHA 时,需要仔细阅读官方文档,并根据具体的环境和需求进行相应的设置。
MHA(Master High Availability)的工作原理涉及多个步骤,主要包括主节点监控、故障检测、差异中继日志的生成和应用、Latest Slave的提升,以及其他从节点的更新。以下是 MHA 的详细工作流程:
1.1. MHA Manager 定期检查主节点状态:
1.2. 监测到主节点异常:
2.1. SSH 连接到从节点进行复制状态查询:
2.2. 选择 Latest Slave:
2.3. 启动主从切换:
3.1. 生成差异中继日志(Relay Log Diff):
3.2. 应用差异中继日志到 Latest Slave:
4.1. 提升 Latest Slave 为新的主节点:
5.1. 通知其他从节点:
5.2. 应用差异中继日志到其他从节点:
6.1. 更新整个复制拓扑:
这个流程展示了 MHA 在主节点故障发生时的自动化故障切换过程。通过这一流程,MHA实现了对 MySQL 主从复制的高可用性管理,确保在主节点故障时,系统可以迅速切换到一个可用的从节点,减小服务中断的风险。
1、从宕机崩溃的master 保存二进制日志事件(binlog events); 2、识别含有最新的更新 slave 日志 3、应用差异的中继日志(relay log)到其他的slave 4、应用从master保存的二进制日志事件 5、提升一个 salve 为新的master 6、使其他的slave连接行的master 进行复制。
Master服务器:192.168.41.11 mysql5.7,MHA node 组件
Slave1 服务器:192.168.41.33 mysql5.7,MHA node 组件
Slave2 服务器:192.168.41.34 mysql5.7,MHA node 组件
MHA manager 节点服务器: 192.168.41.21 安装MHA node 和 manager 组件
关闭防火墙,安全机制
systemctl stop firewalld systemctl disable firewalld setenforce 0
安装服务
Master、Slave1、Slave2 节点上安装 mysql5.7
修改 Master、Slave1、Slave2 节点的 Mysql主配置文件/etc/my.cnf
##Master 节点##
vim /etc/my.cnf
[mysqld]
server-id = 1
log_bin = master-bin #启用二进制日志,并指定前缀
log-slave-updates = true #启用从服务器更新二进制日志的功能
systemctl restart mysqld
##Slave1 节点##
vim /etc/my.cnf
server-id = 2 #三台服务器的 server-id 不能一样
log_bin = master-bin
relay-log = relay-log-bin #指定中继日志文件的前缀
relay-log-index = slave-relay-bin.index #指定中继日志索引文件的名称
systemctl restart mysqld
###Slave2 节点##
vim /etc/my.cnf #三台服务器的 server-id 不能一样
server-id = 3
relay-log = relay-log-bin
relay-log-index = slave-relay-bin.index
systemctl restart mysqld
(1)所有数据库节点进行 mysql 授权
mysql -uroot -p
grant replication slave on *.* to 'myslave'@'192.168.41.%' identified by '123456'; #从数据库同步使用
grant all privileges on *.* to 'mha'@'192.168.41.%' identified by 'manager'; #manager 使用
grant all privileges on *.* to 'mha'@'master' identified by 'manager'; #防止从库通过主机名连接不上主库
grant all privileges on *.* to 'mha'@'slave1' identified by 'manager';
grant all privileges on *.* to 'mha'@'slave2' identified by 'manager';
flush privileges;
(2)在 Master 节点查看二进制文件和同步点
show master status;
+-------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------------+----------+--------------+------------------+-------------------+
| master-bin.000001 | 1745 | | | |
+-------------------+----------+--------------+------------------+-------------------+
(3)在 Slave1、Slave2 节点执行同步操作
change master to master_host='192.168.41.11',master_user='myslave',master_password='123456',master_log_file='master-bin.000001',master_log_pos=1745;
start slave;
(4)在 Slave1、Slave2 节点查看数据同步结果
show slave status\G
//确保 IO 和 SQL 线程都是 Yes,代表同步正常。
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
(5)两个从库必须设置为只读模式:
set global read_only=1;
(6)插入数据测试数据库同步
##在 Master 主库插入条数据,测试是否同步##
create database test_db;
use test_db;
create table test(id int);
insert into test(id) values (1);
//在从服务器上查看发现数据同步
安装 MHA 软件
(1)所有服务器上都安装 MHA 依赖的环境,首先安装 epel 源
yum install epel-release --nogpgcheck -y
yum install -y perl-DBD-MySQL \
perl-Config-Tiny \
perl-Log-Dispatch \
perl-Parallel-ForkManager \
perl-ExtUtils-CBuilder \
perl-ExtUtils-MakeMaker \
perl-CPAN
yum install epel-release --nogpgcheck -y
:这个命令安装了 EPEL 存储库(Extra Packages for Enterprise Linux)。EPEL 存储库包含了一些不在官方发行版中的额外软件包。--nogpgcheck
参数表示在安装时不进行 GPG 密钥检查,-y
参数表示在提示时自动回答 "yes",即自动确认安装。
yum install -y perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker perl-CPAN
:这个命令一次性安装了多个 Perl 模块和工具,包括:
perl-DBD-MySQL
:Perl 数据库驱动程序,用于与 MySQL 数据库交互。
perl-Config-Tiny
:用于解析简单配置文件的 Perl 模块。
perl-Log-Dispatch
:提供灵活的日志记录机制的 Perl 模块。
perl-Parallel-ForkManager
:用于管理并行进程的 Perl 模块。
perl-ExtUtils-CBuilder
和 perl-ExtUtils-MakeMaker
:用于编译和构建 Perl 模块的工具。
perl-CPAN
:CPAN(Comprehensive Perl Archive Network)是 Perl 模块的集中存储库,这里安装了与 CPAN 相关的工具。
安装 MHA 软件包,先在所有服务器上必须先安装 node 组件
在所有服务器上必须先安装 node 组件,最后在 MHA-manager 节点上安装 manager 组件,因为 manager 依赖 node 组件。
cd /opt
tar zxvf mha4mysql-node-0.57.tar.gz
cd mha4mysql-node-0.57
perl Makefile.PL
make && make install
在 MHA manager 节点上安装 manager 组件
cd /opt
tar zxvf mha4mysql-manager-0.57.tar.gz
cd mha4mysql-manager-0.57
perl Makefile.PL
make && make install
perl Makefile.PL
:这个命令通常是在安装 Perl 模块时运行的。它的作用是运行模块的安装配置脚本(通常命名为 Makefile.PL
)。这个脚本负责检查系统环境、依赖项和配置选项,然后生成一个用于构建和安装模块的 Makefile 文件。
具体来说:
perl:指定使用 Perl 解释器来运行脚本。
Makefile.PL:通常是 Perl 模块包中的一个脚本文件,用于配置模块的安装过程。
运行这个命令后,它会检查系统环境,确保所有必要的依赖项都已安装,并生成一个 Makefile 文件。Makefile 包含了一组规则,描述了如何编译、测试和安装 Perl 模块。
在这之后,通常你会运行 make
命令来实际构建模块,然后使用 make install
命令来将其安装到系统中。
masterhacheckssh 检查 MHA 的 SSH 配置状况 masterhacheckrepl 检查 MySQL 复制状况 masterhamanger 启动 manager的脚本 masterhacheckstatus 检测当前 MHA 运行状态 masterhamastermonitor 检测 master 是否宕机 masterhamasterswitch 控制故障转移(自动或者 手动) masterhaconfhost 添加或删除配置的 server 信息 masterhastop 关闭manager
savebinarylogs 保存和复制 master 的二进制日志 applydiffrelaylogs 识别差异的中继日志事件并将其差异的事件应用于其他的 slave filtermysqlbinlog 去除不必要的 ROLLBACK 事件(MHA 已不再使用这个工具) purgerelaylogs 清除中继日志(不会阻塞 SQL 线程)
(1)在 manager 节点上配置到所有数据库节点的无密码认证
ssh-keygen -t rsa #一直回车指导出现选项(yes)
ssh-copy-id 192.168.10.11
ssh-copy-id 192.168.10.33
ssh-copy-id 192.168.10.34
(2)在 master 上配置到数据库节点 slave1 和 slave2 的无密码认证
ssh-keygen -t rsa
ssh-copy-id 192.168.10.33
ssh-copy-id 192.168.10.34
(3)在 slave1 上配置到数据库节点 master 和 slave2 的无密码认证
ssh-keygen -t rsa
ssh-copy-id 192.168.10.11
ssh-copy-id 192.168.10.34
(4)在 slave2 上配置到数据库节点 master 和 slave1 的无密码认证
ssh-keygen -t rsa
ssh-copy-id 192.168.10.11
ssh-copy-id 192.168.10.33
ssh-keygen -t rsa
是一个用于生成 RSA 密钥对的 SSH Key Generation 工具的命令。解析一下这个命令的使用:
ssh-keygen
:这是 SSH 密钥生成工具的主要命令。它用于生成、管理以及转换身份验证密钥。在这个命令中,它被用于生成一个新的密钥对。
-t rsa
:这是命令的选项,指定要生成的密钥的类型。在这里,-t rsa
表示生成 RSA 密钥对。RSA 是一种非对称加密算法,广泛用于安全通信。
-t dsa
或 -t ecdsa
。运行这个命令后,你将会看到一些与密钥生成过程相关的提示和信息。系统会要求你提供一个保存新生成密钥的文件路径,也可以选择为密钥设置密码(passphrase)来增加安全性。
生成的密钥包括两个部分:
私钥(private key): 通常保存在用户本地计算机上,用于身份验证。
公钥(public key): 可以分享给其他人或服务器,用于验证与私钥相对应的身份。
生成密钥对后,你可以将公钥部分添加到需要进行身份验证的服务器上,而私钥则用于本地身份验证。这种密钥对常用于 SSH 连接,提供一种更安全、更方便的身份验证方式。
ssh-copy-id
是一个用于将本地 SSH 公钥复制到远程主机的工具,以实现无密码登录的目的。以下是它的基本使用方法:
ssh-copy-id user@remote_host
解释:
ssh-copy-id
: 这是命令本身,用于复制公钥到远程主机。
user@remote_host
: 指定远程主机的用户名和主机名或 IP 地址。你需要将此替换为实际的登录凭据。
运行这个命令后,它会执行以下操作:
连接到远程主机。
将本地用户的 SSH 公钥追加到远程主机上的 ~/.ssh/authorized_keys
文件中。
这样,在下一次 SSH 登录时,就可以使用私钥进行身份验证,而无需输入密码。这对于自动化脚本、远程操作和自动化部署等场景非常有用。
请注意,ssh-copy-id
在远程主机上的 ~/.ssh
目录必须存在,并且 authorized_keys
文件必须有正确的权限(通常是 600)。如果目录或文件不存在,ssh-copy-id
会尝试创建它们,但如果权限不正确,可能会导致身份验证失败。
1)在 manager 节点上复制相关脚本到/usr/local/bin 目录
cp -rp /opt/mha4mysql-manager-0.57/samples/scripts /usr/local/bin
//拷贝后会有四个执行文件
ll /usr/local/bin/scripts/
----------------------------------------------------------------------------------------------------------
master_ip_failover #自动切换时 VIP 管理的脚本
master_ip_online_change #在线切换时 vip 的管理
power_manager #故障发生后关闭主机的脚本
send_report #因故障切换后发送报警的脚本
----------------------------------------------------------------------------------------------------------
(2)复制上述的自动切换时 VIP 管理的脚本到 /usr/local/bin 目录,这里使用master_ip_failover脚本来管理 VIP 和故障切换
cp /usr/local/bin/scripts/master_ip_failover /usr/local/bin
(3)修改内容如下:(可以删除原有内容,直接复制并修改vip相关参数)
vim /usr/local/bin/master_ip_failover
#!/usr/bin/env perl
use strict;
use warnings FATAL => 'all';
use Getopt::Long;
my (
$command, $ssh_user, $orig_master_host, $orig_master_ip,
$orig_master_port, $new_master_host, $new_master_ip, $new_master_port
);
my $vip = '192.168.41.200'; #指定vip的地址
my $brdc = '192.168.41.255'; #指定vip的广播地址
my $ifdev = 'ens33'; #指定vip绑定的网卡
my $key = '1'; #指定vip绑定的虚拟网卡序列号
my $ssh_start_vip = "/sbin/ifconfig ens33:$key $vip"; #代表此变量值为ifconfig ens33:1 192.168.41.200
my $ssh_stop_vip = "/sbin/ifconfig ens33:$key down"; #代表此变量值为ifconfig ens33:1 192.168.41.200 down
my $exit_code = 0; #指定退出状态码为0
#my $ssh_start_vip = "/usr/sbin/ip addr add $vip/24 brd $brdc dev $ifdev label $ifdev:$key;/usr/sbin/arping -q -A -c 1 -I $ifdev $vip;iptables -F;";
#my $ssh_stop_vip = "/usr/sbin/ip addr del $vip/24 dev $ifdev label $ifdev:$key";
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" ) {
my $exit_code = 1;
eval {
print "Disabling the VIP on old master: $orig_master_host \n";
&stop_vip();
$exit_code = 0;
};
if ($@) {
warn "Got Error: $@\n";
exit $exit_code;
}
exit $exit_code;
}
elsif ( $command eq "start" ) {
my $exit_code = 10;
eval {
print "Enabling the VIP - $vip on the new master - $new_master_host \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";
exit 0;
}
else {
&usage();
exit 1;
}
}
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 {
print
"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";
}
(4)创建 MHA 软件目录并拷贝配置文件,这里使用app1.cnf配置文件来管理 mysql 节点服务器
mkdir /etc/masterha
cp /opt/mha4mysql-manager-0.57/samples/conf/app1.cnf /etc/masterha
vim /etc/masterha/app1.cnf #可以删除原有内容,直接复制并修改节点服务器的IP地址
[server default]
manager_log=/var/log/masterha/app1/manager.log
manager_workdir=/var/log/masterha/app1
master_binlog_dir=/usr/local/mysql/data
master_ip_failover_script=/usr/local/bin/master_ip_failover
master_ip_online_change_script=/usr/local/bin/master_ip_online_change
password=manager
ping_interval=1
remote_workdir=/tmp
repl_password=123456
repl_user=myslave
secondary_check_script=/usr/local/bin/masterha_secondary_check -s 192.168.41.33 -s 192.168.41.34
shutdown_script=""
ssh_user=root
user=mha
[server1]
hostname=192.168.41.11
port=3306
[server2]
candidate_master=1
check_repl_delay=0
hostname=192.168.41.33
port=3306
[server3]
hostname=192.168.41.34
port=3306
----------------------------------------------------------------------------------------------------------
[server default]
manager_log=/var/log/masterha/app1/manager.log #manager日志
manager_workdir=/var/log/masterha/app1 #manager工作目录
master_binlog_dir=/usr/local/mysql/data/ #master保存binlog的位置,这里的路径要与master里配置的binlog的路径一致,以便MHA能找到
master_ip_failover_script=/usr/local/bin/master_ip_failover #设置自动failover时候的切换脚本,也就是上面的那个脚本
master_ip_online_change_script=/usr/local/bin/master_ip_online_change #设置手动切换时候的切换脚本
password=manager #设置mysql中root用户的密码,这个密码是前文中创建监控用户的那个密码
ping_interval=1 #设置监控主库,发送ping包的时间间隔,默认是3秒,尝试三次没有回应的时候自动进行failover
remote_workdir=/tmp #设置远端mysql在发生切换时binlog的保存位置
repl_password=123 #设置复制用户的密码
repl_user=myslave #设置复制用户的用户
report_script=/usr/local/send_report #设置发生切换后发送的报警的脚本
secondary_check_script=/usr/local/bin/masterha_secondary_check -s 192.168.41.33 -s 192.168.10.34 #指定检查的从服务器IP地址
shutdown_script="" #设置故障发生后关闭故障主机脚本(该脚本的主要作用是关闭主机防止发生脑裂,这里没有使用)
ssh_user=root #设置ssh的登录用户名
user=mha #设置监控用户root
[server1]
hostname=192.168.41.11
port=3306
[server2]
hostname=192.168.41.33
port=3306
candidate_master=1
#设置为候选master,设置该参数以后,发生主从切换以后将会将此从库提升为主库,即使这个从库不是集群中最新的slave
check_repl_delay=0
#默认情况下如果一个slave落后master 超过100M的relay logs的话,MHA将不会选择该slave作为一个新的master, 因为对于这个slave的恢复需要花费很长时间;通过设置check_repl_delay=0,MHA触发切换在选择一个新的master的时候将会忽略复制延时,这个参数对于设置了candidate_master=1的主机非常有用,因为这个候选主在切换的过程中一定是新的master
[server3]
hostname=192.168.41.34
port=3306
第一次配置需要在 Master 节点上手动开启虚拟IP
/sbin/ifconfig ens33:1 192.168.10.200/24
在 manager 节点上测试 ssh 无密码认证,如果正常最后会输出 successfully
masterha_check_ssh -conf=/etc/masterha/app1.cnf
在 manager 节点上测试 mysql 主从连接情况,最后出现 MySQL Replication Health is OK
masterha_check_repl -conf=/etc/masterha/app1.cnf
nohup masterha_manager --conf=/etc/masterha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /var/log/masterha/app1/manager.log 2>&1 &
这是一个使用 nohup
命令启动 masterha_manager
工具的命令,并将输出重定向到日志文件的操作。逐步解析这个命令:
nohup
: 这是一个 Unix/Linux 命令,用于在后台运行其他命令,并且不受终端退出的影响。nohup
的作用是忽略 HUP(hangup)信号,允许命令在终端关闭后继续运行。
masterha_manager
: 这是一个 MySQL 主从复制管理工具,通常用于管理 MariaDB Replication。它被用来监控主从复制集群的状态,并在需要时执行故障转移。
--conf=/etc/masterha/app1.cnf
: 指定了配置文件的路径。配置文件 app1.cnf
应该包含有关主从复制集群的配置信息,包括节点、监控参数等。
--remove_dead_master_conf
: 这个选项告诉 masterha_manager
在启动时删除死亡(不可用)的主服务器的配置。这是为了防止以前故障的主服务器再次加入集群。
--ignore_last_failover
: 这个选项告诉 masterha_manager
忽略最后一次的故障转移记录。这可以用于避免在启动时重新执行上一次的故障转移。
< /dev/null
: 将输入重定向为 /dev/null
,这意味着从标准输入中不再读取任何内容。
> /var/log/masterha/app1/manager.log
: 将标准输出重定向到指定的日志文件 manager.log
。这是为了记录 masterha_manager
工具的输出信息。
2>&1
: 将标准错误(stderr)也重定向到标准输出,这样错误信息也会写入到日志文件中。
&
: 在命令末尾的 &
表示将该命令放到后台运行,从而允许你在终端继续执行其他命令。
综合起来,这个命令的作用是以后台方式启动 masterha_manager
工具,忽略最后一次的故障转移记录,并将输出写入日志文件。
nohup java -jar 微服务名称-( war jar) &
//若要关闭 manager 服务,可以使用如下命令。
masterha_stop --conf=/etc/masterha/app1.cnf
查看 MHA 状态,可以看到当前的 master 是 master 节点。
masterha_check_status --conf=/etc/masterha/app1.cnf
查看 MHA 日志,也以看到当前的 master 是 192.168.10.16,如下所示。
cat /var/log/masterha/app1/manager.log | grep "current master"
查看master 的 VIP 地址 192.168.10.200 是否存在,这个 VIP 地址不会因为 manager 节点停止 MHA 服务而消失。
ifconfig
#在 manager 节点上监控观察日志记录
tail -f /var/log/masterha/app1/manager.log
#在 Master 节点 master 上停止mysql服务
systemctl stop mysqld
或
pkill -9 mysql
#正常自动切换一次后,MHA 进程会退出。HMA 会自动修改 app1.cnf 文件内容,将宕机的 master 节点删除。查看 slave1 是否接管 VIP
ifconfig
故障切换备选主库的算法: 1.一般判断从库的是从(position/GTID)判断优劣,数据有差异,最接近于master的slave,成为备选主。 2.数据一致的情况下,按照配置文件顺序,选择备选主库。 3.设定有权重(candidatemaster=1),按照权重强制指定备选主。 (1)默认情况下如果一个slave落后master 100M的relay logs的话,即使有权重,也会失效。 (2)如果checkrepl_delay=0的话,即使落后很多日志,也强制选择其为备选主。
1.修复mysql
systemctl restart mysqld
2.修复主从
#在现主库服务器 Mysql2 查看二进制文件和同步点
show master status;
#在原主库服务器 mysql1 执行同步操作
change master to master_host='192.168.10.14',master_user='myslave',master_password='123456',master_log_file='master-bin.000001',master_log_pos=1745;
start slave;
3.在 manager 节点上修改配置文件app1.cnf(再把这个记录添加进去,因为它检测掉失效时候会自动消失)
vi /etc/masterha/app1.cnf
......
secondary_check_script=/usr/local/bin/masterha_secondary_check -s 192.168.41.33 -s 192.168.41.34
......
[server1]
hostname=192.168.41.11
port=3306
[server2]
candidate_master=1
check_repl_delay=0
hostname=192.168.41.33
port=3306
[server3]
hostname=192.168.41.34
port=3306
4.在 manager 节点上启动 MHA
nohup masterha_manager --conf=/etc/masterha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /var/log/masterha/app1/manager.log 2>&1 &
dos2unix /usr/local/bin/masteripfailover