一、 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告警
- 兄台了解下图文告警邮件?
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Ajax Design Patterns
Michael Mahemoff / O'Reilly Media / 2006-06-29 / USD 44.99
Ajax, or Asynchronous JavaScript and XML, exploded onto the scene in the spring of 2005 and remains the hottest story among web developers. With its rich combination of technologies, Ajax provides a s......一起来看看 《Ajax Design Patterns》 这本书的介绍吧!
在线进制转换器
各进制数互转换器
图片转BASE64编码
在线图片转Base64编码工具