一、 MHA 相关概念及原理:
1、 MHA 简介:
MHA ( Master High Availability )是开源的 MariaDB 高可用解决方案。 MHA 在监控 master 节点故障时,会提升其中拥有最新数据的 slave 节点成为新的 master 节点。 MHA 还提供了 master 节点的在线切换功能,即按需切换 master/slave 节点。构建 MHA 的前提条件是要先构建主从复制。 MHA 集群中的各节点彼此之间均需要基于 SSH 互信通信,以实现远程控制及数据管理功能。
2、 MHA 工作原理:
MHA 的目的在于维持 MariaDB 主从复制中 master 节点的高可用性,其最大特点是可以修复多个 slave 节点之间的差异日志,最终使所有 slave 节点保持数据一致,然后从中选择一个作为新的 master 节点,并将其它 slave 节点指向它。当 master 节点出现故障时,可以通过对比 slave 节点之间 I/O 线程读取 master 节点二进制日志的 position 事件位置,选取最接近的 slave 节点作为备选 master 节点,其它的 slave 节点可以通过与备选 master 节点对比生成差异的中继日志,在备选 master 节点上应用从原来 master 节点保存的二进制日志,同时将备选 master 节点提升为新的 master 节点,最后在其它 slave 节点上应用相应的差异中继日志并从新的 master 节点开始复制。
3、 MHA 的两种角色:
(1) MHA manager :管理节点,通常单独部署在一台独立的服务器上,用来管理多个 master/slave 集群,也可部署在一台 slave 节点上,每个 master/slave 集群称为一个 application 。 MHA Manager 会定时探测集群中的 master 节点,当发现 master 节点出现故障时,它可以自动将具有最新数据的 slave 节点提升为新的 master 节点,然后将所有其它的 slave 节点重新指向新的 master 节点。整个故障转移过程对应用程序完全透明,完成故障转移(即主从切换)后, MHA manager 会自动停止。
(2) MHA node :数据节点,运行在每台 MariaDB 服务器上( manager/master/slave ),它通过监控具备解析和清理 logs 功能的脚本来加快故障转移。
4、 MHA 组件:
(1) manager 管理节点:
a、 masterha_check_ssh :检测 SSH 环境
b、 masterha_check_repl :检测 MariaDB 主从复制环境
c、 masterha_manager : MHA 服务主程序
d、 masterha_check_status :检测 MHA 运行状态
e、 masterha_master_monitor :监测 master 节点可用性
f、 masterha_master_switch : master 节点切换
g、 masterha_conf_host :添加或删除已配置节点
h、 masterha_stop :停止 MHA 服务
(2) node 数据节点:
a、 save_binary_logs :保存和复制 master 节点二进制日志
b、 apply_diff_relay_logs :识别差异的中继日志事件,并应用于其它 slave 节点
c、 filter_mysqlbinlog :去除不必要 rollback 事件的工具
d、 purge_relay_logs :清除中继日志工具(不会阻塞 SQL 线程)
(3) 自定义扩展:
a、 secondary_check_script :通过多条网络路由检测 master 节点的可用性脚本
b、 master_ip_failover_script :故障转移脚本
c、 shutdown_script :强制关闭 master 节点脚本
d、 report_script :以邮件告警的方式来发送 failover 报告脚本
e、 init_conf_load_script :加载初始配置参数脚本
f、 master_ip_online_change_script :在线切换主从节点脚本
二、 准备工作:
1、 演示环境:
IP |
操作系统 |
主机名 |
角色 |
数据库版本 |
安装方式 |
复制方式 |
server id |
192.168.1.143 |
CentOS 7.6 |
node1 |
MHA manager |
无 |
无 |
无 |
无 |
192.168.1.144 |
CentOS 7.6 |
node2 |
master |
MariaDB-10.3.15 |
yum |
半同步 |
1 |
192.168.1.145 |
CentOS 7.6 |
node3 |
slave |
MariaDB-10.3.15 |
yum |
异步 |
2 |
192.168.1.146 |
CentOS 7.6 |
node4 |
slave (备选 master ) |
MariaDB-10.3.15 |
yum |
半同步 |
3 |
实现效果:一旦 master 节点宕机, VIP ( 192.168.1.130 )自动漂移至备选 master 节点,将其提升为新的 master 节点,并将 slave 节点 Master_Host 中的 IP 指向它。
2、 配置四个节点的 epel 源
3、 配置四个节点的服务器时间同步
4、 配置四个节点的主机名
5、 配置四个节点的 /etc/hosts 文件:
# vim /etc/hosts
192.168.1.143 node1
192.168.1.144 node2
192.168.1.145 node3
192.168.1.146 node4
6、 配置四个节点 SSH 互信通信(除了第( 4 )步,其余都在 manager 节点中执行):
(1) 生成密钥对,基于密钥认证: # ssh-keygen -t rsa -P "" --> 回车
(2) 将公钥文件中的内容追加写入 authorized_keys 文件: # cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
备注:由于四个节点两两之间都需要基于密钥认证实现互信通信,所以此处不使用 ssh-copy-id 命令,太过麻烦
(3) 修改 authorized_keys 文件的权限为 600 : # chmod 600 ~/.ssh/authorized_keys
(4) 其它三个节点创建目录: # mkdir -pv ~/.ssh
(5) 将私钥和 authorized_keys 文件复制至其它三个节点:
# scp -p ~/.ssh/id_rsa ~/.ssh/authorized_keys root@node2:/root/.ssh
# scp -p ~/.ssh/id_rsa ~/.ssh/authorized_keys root@node3:/root/.ssh
# scp -p ~/.ssh/id_rsa ~/.ssh/authorized_keys root@node4:/root/.ssh
(6) 测试免密登录: # for (( i=1; i<=4; i++)); do ssh node$i 'ifconfig ens160'; done
备注:其它三个节点也需要进行测试
7、 下载 MHA 相关软件包: mha4mysql-manager-0.57-0.el7.noarch.rpm 、 mha4mysql-node-0.57-0.el7.noarch.rpm
特别注意: https://github.com/yoshinorim/mha4mysql-manager/releases 下载的 mha4mysql-manager-0.58-0.el7.centos.noarch.rpm 和 https://github.com/yoshinorim/mha4mysql-node/releases 下载的 mha4mysql-node-0.58-0.el7.centos.noarch.rpm ,目前最新版本均为 0.58 , MHA 从 0.58 版本开始增加了 super_read_only 功能,而 MariaDB-10.3.15 中没有 super_read_only 这个变量:
执行命令 # masterha_check_repl --conf=/etc/mha/app1.cnf 时会提示如下错误信息:
Checking if super_read_only is defined and turned on..DBD::mysql::st execute failed: Unknown system variable 'super_read_only' at /usr/share/perl5/vendor_perl/MHA/SlaveUtil.pm line 245.
所以最新 0.58 版本的 mha4mysql-manager 和 mha4mysql-node 不能使用,只能使用 0.57 版本
三、 配置主从复制:
1、 master 节点修改 server.cnf 配置文件: # vim /etc/my.cnf.d/server.cnf
[mysqld]
port=3306
socket=/var/lib/mysql/mysql.sock
datadir=/var/lib/mysql
log_error=/var/log/mariadb.log
lower_case_table_names=1
character_set_server=utf8mb4
collation_server=utf8mb4_general_ci
innodb_file_per_table=1
skip_name_resolve=1
slow_query_log=1
slow_query_log_file=mariadb-slow.log
rpl_semi_sync_master_enabled=1
rpl_semi_sync_slave_enabled=1
log_bin=mysql-bin
log_bin_index=mysql-bin.index
binlog_format=mixed
relay_log=relay-log
relay_log_index=relay-log.index
server_id=1
sync_binlog=1
innodb_flush_log_at_trx_commit=1
2、 master 节点创建拥有复制权限的用户:
MariaDB [(none)]> grant replication slave on *.* to 'repluser'@'192.168.1.%' identified by '123456';
MariaDB [(none)]> flush privileges;
3、 master 节点创建拥有管理 MHA 权限的用户:
MariaDB [(none)]> grant all on *.* to 'mhauser'@'192.168.1.%' identified by '123456';
MariaDB [(none)]> flush privileges;
4、 master 节点查看正在使用的二进制日志文件名称及事件位置:
MariaDB [(none)]> show master status;
5、 slave 节点修改 server.cnf 配置文件: # vim /etc/my.cnf.d/server.cnf
[mysqld]
port=3306
socket=/var/lib/mysql/mysql.sock
datadir=/var/lib/mysql
log_error=/var/log/mariadb.log
lower_case_table_names=1
character_set_server=utf8mb4
collation_server=utf8mb4_general_ci
innodb_file_per_table=1
skip_name_resolve=1
slow_query_log=1
slow_query_log_file=mariadb-slow.log
relay_log=relay-log
relay_log_index=relay-log.index
server_id=2
relay_log_purge=0
read_only=1
备注:
(1) slave 节点只能读不能写
(2) 中继日志默认不存在,只有当复制启动时才会自动生成
(3) relay_log_purge=0 ,表示在默认情况下, slave 节点的中继日志会在 SQL 线程执行完毕后被自动删除,但是在 MHA 环境中,这些中继日志在恢复其它 slave 节点时可能会被用到,因此需要禁用中继日志的自动删除功能。
6、 slave 节点创建拥有管理 MHA 权限的用户:
MariaDB [(none)]> grant all on *.* to 'mhauser'@'192.168.1.%' identified by '123456';
MariaDB [(none)]> flush privileges;
7、 slave 节点使用拥有复制权限的用户连接至 master 节点:
MariaDB [(none)]> change master to master_host='192.168.1.144',master_user='repluser',master_password='123456',master_port=3306, master_log_file='mysql-bin.000001',master_log_pos=2320;
MariaDB [(none)]> show slave status\G
备注:
(1) Slave_IO_Running 和 Slave_SQL_Running 的值,默认为 No
(2) 自动在数据目录 /var/lib/mysql 中创建 relay-log.000001 、 relay-log.index 和 relay-log.info 文件
(3) Master_Log_File 的值为 master 节点的二进制日志文件名称
(4) Read_Master_Log_Pos 的值为 master 节点二进制日志事件的位置
8、 slave 节点启动复制线程:
MariaDB [(none)]> start slave;
备注:
(1) start slave 等同于分别执行 start slave io_thread 和 start slave sql_thread
(2) stop slave 表示停止主从复制线程
(3) 重启 slave 节点所在的服务器,复制线程会自动启动
MariaDB [(none)]> show slave status\G
备注:
(1) 只有当 Slave_IO_Running 和 Slave_SQL_Running 的值都为 Yes 时,复制线程才算启动成功
(2) Seconds_Behind_Master 的值为 0 ,说明 slave 节点没有落后于 master 节点
(3) 复制时的详细信息记录在 slave 节点的错误日志 /var/log/mariadb.log 中
9、 备选 master 节点修改 server.cnf 配置文件: # vim /etc/my.cnf.d/server.cnf
[mysqld]
port=3306
socket=/var/lib/mysql/mysql.sock
datadir=/var/lib/mysql
log_error=/var/log/mariadb.log
lower_case_table_names=1
character_set_server=utf8mb4
collation_server=utf8mb4_general_ci
innodb_file_per_table=1
skip_name_resolve=1
slow_query_log=1
slow_query_log_file=mariadb-slow.log
rpl_semi_sync_master_enabled=1
rpl_semi_sync_slave_enabled=1
log_bin=mysql-bin
log_bin_index=mysql-bin.index
binlog_format=mixed
relay_log=relay-log
relay_log_index=relay-log.index
server_id=3
sync_binlog=1
innodb_flush_log_at_trx_commit=1
relay_log_purge=0
read_only=1
10、 备选 master 节点创建拥有复制权限的用户:
MariaDB [(none)]> grant replication slave on *.* to 'repluser'@'192.168.1.%' identified by '123456';
MariaDB [(none)]> flush privileges;
11、 备选 master 节点创建拥有管理 MHA 权限的用户:
MariaDB [(none)]> grant all on *.* to 'mhauser'@'192.168.1.%' identified by '123456';
MariaDB [(none)]> flush privileges;
12、 备选 master 节点使用拥有复制权限的用户连接至 master 节点:
MariaDB [(none)]> change master to master_host='192.168.1.144',master_user='repluser',master_password='123456',master_port=3306, master_log_file='mysql-bin.000001',master_log_pos=2320;
13、 备选 master 节点启动复制线程:
MariaDB [(none)]> start slave;
MariaDB [(none)]> show slave status\G
14、 master 节点查看与半同步复制相关的变量和状态值:
MariaDB [(none)]> show global variables like 'rpl_semi_sync%';
备注:
(1) rpl_semi_sync_master_enabled 的值为 ON
(2) rpl_semi_sync_slave_enabled 的值为 ON
MariaDB [(none)]> show global status like 'rpl_semi_sync%';
备注:
(1) Rpl_semi_sync_master_clients 的值变为 1
(2) Rpl_semi_sync_master_status 的值变为 ON
(3) Rpl_semi_sync_slave_status 的值为 OFF
(4) 同时满足( 1 )和( 2 )说明半同步主从复制启动成功
15、 备选 master 节点查看与半同步复制相关的变量和状态值:
MariaDB [(none)]> show global variables like 'rpl_semi_sync%';
备注:
(1) rpl_semi_sync_master_enabled 的值为 ON
(2) rpl_semi_sync_slave_enabled 的值为 ON
MariaDB [(none)]> show global status like 'rpl_semi_sync%';
备注:
(1) Rpl_semi_sync_master_clients 的值为 0
(2) Rpl_semi_sync_master_status 的值为 OFF
(3) Rpl_semi_sync_slave_status 的值变为 ON
16、 master 节点查看异步的 slave 节点和半同步的备选 master 节点的相关信息:
MariaDB [(none)]> show slave hosts;
四、 构建 MHA 高可用集群:
1、 manager 节点安装 mha4mysql-manager 和 mha4mysql-node :
# yum -y localinstall mha4mysql-manager-0.57-0.el7.noarch.rpm mha4mysql-node-0.57-0.el7.noarch.rpm
2、 其它三个节点安装 mha4mysql-node : # yum -y localinstall mha4mysql-node-0.57-0.el7.noarch.rpm
3、 manager 节点创建目录及 MHA 配置文件:
manager 节点需要为每个监控的 master/slave 集群提供一个专用的配置文件,而所有的 master/slave 集群也可共享全局配置。全局配置文件默认为 /etc/masterha_default.cnf ,为可选配置。如果仅监控一组 master/slave 集群,也可直接通过 application 配置来提供各主机的默认配置信息,而每个 application 的配置文件路径可自定义。
# mkdir -pv /data/mha
# mkdir -pv /scripts
# mkdir -pv /etc/mha
# vim /etc/mha/app1.cnf
[server default]
user=mhauser
password=123456
manager_workdir=/data/mha
manager_log=/data/mha/manager.log
remote_workdir=/data/mha
ssh_user=root
repl_user=repluser
repl_password=123456
ping_interval=1
master_ip_failover_script=/scripts/master_ip_failover
report_script=/scripts/send_report
[server1]
hostname=192.168.1.144
ssh_port=22
port=3306
master_binlog_dir=/var/lib/mysql
candidate_master=1
check_repl_delay=0
[server2]
hostname=192.168.1.145
ssh_port=22
port=3306
no_master=1
[server3]
hostname=192.168.1.146
ssh_port=22
port=3306
master_binlog_dir=/var/lib/mysql
candidate_master=1
check_repl_delay=0
备注:配置参数详解
(1) user :管理 MHA 用户的名称
(2) password :管理 MHA 用户的密码
(3) manager_workdir : MHA manager 使用的工作目录
(4) manager_log : MHA manager 生成日志的保存路径及文件名
(5) remote_workdir :每一个 MHA node 保存从 master 节点复制而来的二进制日志的工作目录
(6) ssh_user : MHA manager 和 MHA node 通过此用户连接至 MariaDB 所在的主机
(7) repl_user :主从复制时使用的用户名称
(8) repl_password :主从复制时使用的用户密码
(9) ping_interval : MHA manager ping master 节点的时间间隔,单位为秒,当连续 3 次 ping 失败后, MHA manager 认为此 master 节点宕机
(10) master_ip_failover_script :故障转移脚本
(11) master_ip_online_change_script :在线切换主从节点脚本
(12) report_script :以邮件告警的方式来发送 failover 报告脚本
(13) hostname :目标实例的主机名或 IP
(14) ssh_port :目标数据库的 SSH 端口号,默认为 22
(15) port :目标数据库的 mysqld 端口号,默认为 3306
(16) master_binlog_dir : master 节点生成二进制日志的目录
(17) candidate_master :从不同的 slave 节点中,提升一个可靠的节点作为新的 master 节点,如果此值设置为 1 ,此 slave 节点会优先成为新的 master 节点,即使这个 slave 节点的事件不是最新的
(18) check_repl_delay :默认情况下如果一个 slave 节点落后 master 节点 100M 的中继日志, MHA 将不会选择该 slave 节点作为一个新的 master 节点,因为对于这个 slave 节点的恢复需要花费很长时间,通过设置 check_repl_delay=0 , MHA 在选择一个新的 master 节点时将会忽略复制延时,此参数对于设置了 candidate_master=1 的主机非常有用,因为此备选 master 节点在切换过程中一定是新的 master 节点
(19) no_master :此 slave 节点永远不会成为新的 master 节点
17、 创建 master_ip_failover 脚本:
# vim /scripts/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.1.130';
my $key = '0';
my $ssh_start_vip = "/usr/sbin/ifconfig ens160:$key $vip";
my $ssh_stop_vip = "/usr/sbin/ifconfig ens160:$key down";
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 \"`;
}
sub stop_vip() {
return 0 unless ($ssh_user);
`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";
}
# chmod +x /scripts/master_ip_failover
18、 创建 send_report 脚本:
# vim /scripts/send_report
#!/usr/bin/env perl
use strict;
use warnings FATAL => 'all';
use Mail::Sender;
use Getopt::Long;
my ( $dead_master_host, $new_master_host, $new_slave_hosts, $subject, $body );
my $smtp='smtp.qq.com';
my $mail_from='83xxxxx08@qq.com';
my $mail_user='83xxxxx08@qq.com';
my $mail_pass=' 邮箱授权码 ';
my $mail_to='83xxxxx08@qq.com';
GetOptions(
'orig_master_host=s' => \$dead_master_host,
'new_master_host=s' => \$new_master_host,
'new_slave_hosts=s' => \$new_slave_hosts,
'subject=s' => \$subject,
'body=s' => \$body,
);
mailToContacts( $smtp, $mail_from, $mail_user, $mail_pass, $mail_to, $subject, $body );
sub mailToContacts {
my ( $smtp, $mail_from, $mail_user, $mail_pass, $mail_to, $subject, $msg ) = @_;
open my $DEBUG, "> /var/log/mhamail.log"
or die "Can't open the debug file:$!\n";
my $sender = new Mail::Sender {
ctype => 'text/plain;charset=utf-8',
encoding => 'utf-8',
smtp => $smtp,
from => $mail_from,
auth => 'LOGIN',
TLS_allowed => '0',
authid => $mail_user,
authpwd => $mail_pass,
to => $mail_to,
subject => $subject,
debug => $DEBUG
};
$sender->MailMsg(
{
msg => $msg,
debug => $DEBUG
}
) or print $Mail::Sender::Error;
return 1;
}
exit 0;
# chmod +x /scripts/send_report
19、 manager 节点检测四个节点 SSH 互信通信配置: # masterha_check_ssh --conf=/etc/mha/app1.cnf
备注:提示 - [info] All SSH connection tests passed successfully.
20、 manager 节点检测 MariaDB 主从复制配置: # masterha_check_repl --conf=/etc/mha/app1.cnf
备注:提示
- [info] MHA::MasterMonitor version 0.57.
- [info] Master MHA Node version is 0.57.
192.168.1.144(192.168.1.144:3306) (current master)
+--192.168.1.145(192.168.1.145:3306)
+--192.168.1.146(192.168.1.146:3306)
Checking the Status of the script.. OK
MySQL Replication Health is OK.
21、 master 节点添加 VIP (第一次需手动添加):
# ifconfig ens160:0 192.168.1.130
# ip a l ens160
22、 manager 节点后台启动 MHA 服务:
# nohup masterha_manager --conf=/etc/mha/app1.cnf &> /data/mha/manager.log &
23、 manager 节点查看 master 节点的状态: # masterha_check_status --conf=/etc/mha/app1.cnf
备注:如果要停止 MHA 服务,可以使用命令 # masterha_stop --conf=/etc/mha/app1.cnf
五、 测试 MHA 高可用集群:
1、 master 节点停止 mariadb 服务,模拟故障: # mysqladmin -uroot -p shutdown
2、 manager 节点查看 /data/mha/manager.log 日志文件
备注:提示
- [info] Master is down!
- [info] * Phase 1: Configuration Check Phase..
- [info] ** Phase 1: Configuration Check Phase completed.
- [info] * Phase 2: Dead Master Shutdown Phase..
- [info] * Phase 2: Dead Master Shutdown Phase completed.
- [info] * Phase 3: Master Recovery Phase..
- [info] * Phase 3.1: Getting Latest Slaves Phase..
- [info] * Phase 3.2: Saving Dead Master's Binlog Phase..
- [info] * Phase 3.3: Determining New Master Phase..
From:
192.168.1.144(192.168.1.144:3306) (current master)
+--192.168.1.145(192.168.1.145:3306)
+--192.168.1.146(192.168.1.146:3306)
To:
192.168.1.146(192.168.1.146:3306) (new master)
+--192.168.1.145(192.168.1.145:3306)
- [info] * Phase 3.3: New Master Diff Log Generation Phase..
- [info] * Phase 3.4: Master Log Apply Phase..
- [info] ** Finished master recovery successfully.
- [info] * Phase 3: Master Recovery Phase completed.
- [info] * Phase 4: Slaves Recovery Phase..
- [info] * Phase 4.1: Starting Parallel Slave Diff Log Generation Phase..
- [info] * Phase 4.2: Starting Parallel Slave Log Apply Phase..
- [info] All relay logs were successfully applied.
- [info] All new slave servers recovered successfully.
- [info] * Phase 5: New master cleanup phase..
- [info] 192.168.1.146: Resetting slave info succeeded.
- [info] Master failover to 192.168.1.146(192.168.1.146:3306) completed successfully.
3、 查看 master 节点网卡信息: # ip a l ens160
4、 查看备选 master 节点网卡信息: # ip a l ens160
备注: VIP 已从 master 节点漂移至备选 master 节点
5、 slave 节点自动将 Master_Host 的地址指向备选 master 节点( 192.168.1.146 ):
MariaDB [(none)]> show slave status\G
6、 备选 master 节点查看全局变量 read_only 的值,已变为 OFF :
MariaDB [(none)]> show global variables like 'read_only';
7、 备选 master 节点查看 slave 节点的相关信息:
MariaDB [(none)]> show slave hosts;
8、 故障转移后, MHA 服务自动停止运行,且在 /data/mha 目录中生成 app1.failover.complete 文件:
# masterha_check_status --conf=/etc/mha/app1.cnf
9、 查收告警邮件:
10、 修复宕机的 master 节点( 192.168.1.144 ),使其以新的 slave 节点身份重新上线:
(1) master 节点修改 server.cnf 配置文件,新增 relay_log_purge=0 和 read_only=1 选项,并启动 mariadb 服务
(2) manager 节点查看复制起始位置: # grep -i "All other slaves should start" /data/mha/manager.log
- [info] All other slaves should start replication from here. Statement should be: CHANGE MASTER TO MASTER_HOST='192.168.1.146', MASTER_PORT=3306, MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=2320, MASTER_USER='repluser', MASTER_PASSWORD='xxx';
(3) master 节点使用拥有复制权限的用户连接至备选 master 节点:
MariaDB [(none)]> change master to master_host='192.168.1.146',master_user='repluser',master_password='123456',master_port=3306,master_log_file='mysql-bin.000001',master_log_pos=2320;
(4) master 节点启动复制线程:
MariaDB [(none)]> start slave;
MariaDB [(none)]> show slave status\G
(5) master 节点查看与半同步复制相关的状态值:
MariaDB [(none)]> show global status like 'rpl_semi_sync%';
备注:
a、 Rpl_semi_sync_master_clients 的值变为 0
b、R pl_semi_sync_master_status 的值变为 ON
c、 Rpl_semi_sync_slave_status 的值为 ON
(6) 备选 master 节点查看与半同步复制相关的状态值:
MariaDB [(none)]> show global status like 'rpl_semi_sync%';
备注:
a、 Rpl_semi_sync_master_clients 的值变为 1
b、 Rpl_semi_sync_master_status 的值变为 ON
c、 Rpl_semi_sync_slave_status 的值变为 OFF
(7) 备选 master 节点查看异步的 slave 节点和半同步的 master 节点的相关信息:
MariaDB [(none)]> show slave hosts;
备注:新的主从复制构建完成
(8) manager 节点删除 app1.failover.complete 文件: # rm -rf /data/mha/app1.failover.complete
(9) manager 节点后台启动 MHA 服务:
# nohup masterha_manager --conf=/etc/mha/app1.cnf &> /data/mha/manager.log &
(10) manager 节点查看备选 master 节点的状态: # masterha_check_status --conf=/etc/mha/app1.cnf
以上所述就是小编给大家介绍的《构建MariaDB MHA高可用集群,实现VIP漂移和邮件告警 荐》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 【火炉炼AI】机器学习022-使用均值漂移聚类算法构建模型
- 告警系统主脚本,告警系统配置文件,告警系统监控项目
- 监控告警成长之路
- 【技术】聊聊告警
- 配置zabbix+telegram告警
- 兄台了解下图文告警邮件?
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
JS 压缩/解压工具
在线压缩/解压 JS 代码
Base64 编码/解码
Base64 编码/解码