构建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.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 {

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

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

我来评几句
登录后评论

已发表评论数()

相关站点

+订阅
热门文章