构建MariaDB MHA高可用集群,实现VIP漂移和邮件告警

一、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.rpmhttps://github.com/yoshinorim/mha4mysql-node/releases下载的mha4mysql-node-0.58-0.el7.centos.noarch.rpm,目前最新版本均为0.58MHA0.58版本开始增加了super_read_only功能,而MariaDB-10.3.15中没有super_read_only这个变量:

构建MariaDB MHA高可用集群,实现VIP漂移和邮件告警

执行命令# 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-managermha4mysql-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;

构建MariaDB MHA高可用集群,实现VIP漂移和邮件告警

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

构建MariaDB MHA高可用集群,实现VIP漂移和邮件告警

备注:

(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

构建MariaDB MHA高可用集群,实现VIP漂移和邮件告警

构建MariaDB MHA高可用集群,实现VIP漂移和邮件告警

备注:

(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

构建MariaDB MHA高可用集群,实现VIP漂移和邮件告警

构建MariaDB MHA高可用集群,实现VIP漂移和邮件告警

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;

构建MariaDB MHA高可用集群,实现VIP漂移和邮件告警


四、构建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

master_binlog_dir=/var/lib/mysql

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 {

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";

}

# 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

构建MariaDB MHA高可用集群,实现VIP漂移和邮件告警

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

构建MariaDB MHA高可用集群,实现VIP漂移和邮件告警

备注:如果要停止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

构建MariaDB MHA高可用集群,实现VIP漂移和邮件告警

4、查看备选master节点网卡信息:# ip a l ens160

构建MariaDB MHA高可用集群,实现VIP漂移和邮件告警

备注:VIP已从master节点漂移至备选master节点

5、slave节点自动将Master_Host的地址指向备选master节点(192.168.1.146):

MariaDB [(none)]> show slave status\G

构建MariaDB MHA高可用集群,实现VIP漂移和邮件告警

6、备选master节点查看全局变量read_only的值,已变为OFF:

MariaDB [(none)]> show global variables like 'read_only';

构建MariaDB MHA高可用集群,实现VIP漂移和邮件告警

7、备选master节点查看slave节点的相关信息:

MariaDB [(none)]> show slave hosts;

构建MariaDB MHA高可用集群,实现VIP漂移和邮件告警

8、故障转移后,MHA服务自动停止运行,且在/data/mha目录中生成app1.failover.complete文件:

# masterha_check_status --conf=/etc/mha/app1.cnf

构建MariaDB MHA高可用集群,实现VIP漂移和邮件告警

9、查收告警邮件:

构建MariaDB MHA高可用集群,实现VIP漂移和邮件告警

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

构建MariaDB MHA高可用集群,实现VIP漂移和邮件告警

构建MariaDB MHA高可用集群,实现VIP漂移和邮件告警

(5)master节点查看与半同步复制相关的状态值:

MariaDB [(none)]> show global status like 'rpl_semi_sync%';

备注:

a、Rpl_semi_sync_master_clients的值变为0

b、Rpl_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;

构建MariaDB MHA高可用集群,实现VIP漂移和邮件告警

备注:新的主从复制构建完成

(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漂移和邮件告警


上一篇:mysql高可用MHA+Atlas读写分离


下一篇:MHA-结合MySQL半同步复制高可用集群(Centos7)