千家信息网

MHA集群搭建

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,开篇本文主要介绍如何搭建MHA集群,希望给你带来帮助基本环境介绍Linux:CentOS 7.4MySQL:5.7.21+传统复制(开启GTID不搭建binlog server)VIP:192.168
千家信息网最后更新 2026年11月03日MHA集群搭建

开篇

本文主要介绍如何搭建MHA集群,希望给你带来帮助

基本环境介绍

Linux:CentOS 7.4MySQL:5.7.21+传统复制(开启GTID不搭建binlog server)VIP:192.168.68.100
角色ip地址主机名server_id类型
Master192.168.68.161server11413306写
Candicate master192.168.68.162server21423306读
Manager/Slave192.168.68.163server31433306读/监控/管理

server1

主从复制搭建

#创建复制用户grant replication slave on *.* to 'repl'@'192.168.68.%' identified by 'repl4slave';flush privileges;#创建监控用户grant all privileges on *.* to 'xmm'@'192.168.68.%' identified by 'xmmxmm';flush privileges;

MHA安装

#软件安装yum localinstall -y mha4mysql-node-0.56-0.el6.noarch#SSH登陆检查ssh server2ssh server3

如果不是一个新master

#master导出数据mysqldump --master-data=2 --single-transaction -R --triggers -A >server1-all-180329.sql

VIP手工绑定

绑定:/sbin/ip addr add 192.168.68.100/32 dev ens32解绑:/sbin/ip addr del 192.168.68.100/32 dev ens32 

server2

主从复制搭建

#配置和开启复制change master to master_host='192.168.68.161',master_port=3306,master_user='repl',master_password='repl4slave',master_auto_position=1;start slave;#slave开启read_onlymysql -h227.0.0.1 -p -e 'set global read_only=1'mysql -h227.0.0.1 -p -e 'set global relay_log_purge=0'

MHA安装

#软件安装yum localinstall -y mha4mysql-node-0.56-0.el6.noarch#SSH登陆检查ssh server1ssh server3

如果master不是新的

#导入数据mysql -h227.0.0.1 -uroot -p < /tmp/data/server1-all-180329.sql

server3

主从复制搭建

#导入数据、配置和开启复制mysql -h227.0.0.1 -uroot -p < /tmp/data/server1-all-180329.sqlchange master to master_host='192.168.68.135',master_port=3306,master_user='repl',master_password='repl4slave',master_auto_position=1;start slave;#slave开启read_onlymysql -h227.0.0.1 -p -e 'set global read_only=1'mysql -h227.0.0.1 -p -e 'set global relay_log_purge=0'

MHA安装

#软件安装yum localinstall -y mha4mysql-node-0.56-0.el6.noarchyum localinstall -y mha4mysql-manager-0.56-0.el6.noarch#SSH无密钥验证登陆ssh-keygencd ~/.ssh/cat id_rsa.pub > authorized_keyschmod 600 *scp -r ~/.ssh/ root@192.168.68.161:~/scp -r ~/.ssh/ root@192.168.68.162:~/ssh server2ssh server3#创建MHA工作目录,上传配置文件和脚本mkdir -p /etc/masterhamasterha_default.cnfapp1.cnfmaster_ip_failovermaster_ip_online_changechmod +x master_ip*#开启debugmasterha_default.cnf --> log_level=debug#manager上检查ssh/rple/开启mha进程masterha_check_ssh xxxmasterha_check_repl xxxmasterha_manager xxx

配置文件和脚本详细

masterha_default.cnf
[server default]#MySQL的用户和密码user=xmmpassword=xmmxmm#系统ssh用户ssh_user=root#复制用户repl_user=replrepl_password=repl4slave#监控ping_interval=1#shutdown_script=""#日志输出log_level=debug#报警脚本report_script=/etc/masterha/send_report    #切换调用的脚本master_ip_failover_script= /etc/masterha/master_ip_failovermaster_ip_online_change_script= /etc/masterha/master_ip_online_change
app1.cnf
[server default]#mha manager工作目录manager_workdir = /var/log/masterha/app1manager_log = /var/log/masterha/app1/app1.logremote_workdir = /var/log/masterha/app1[server1]hostname=node1master_binlog_dir = /data/mysql/mysql3306/logscandidate_master = 0check_repl_delay = 0[server2]hostname=node2master_binlog_dir=/data/mysql/mysql3306/logscandidate_master = 1check_repl_delay = 0[server3]hostname=node1master_binlog_dir = /data/mysql/mysql3306/logscandidate_master = 0check_repl_delay = 0
master_ip_failover
#!/usr/bin/env perl#  Copyright (C) 2011 DeNA Co.,Ltd.##  This program is free software; you can redistribute it and/or modify#  it under the terms of the GNU General Public License as published by#  the Free Software Foundation; either version 2 of the License, or#  (at your option) any later version.##  This program is distributed in the hope that it will be useful,#  but WITHOUT ANY WARRANTY; without even the implied warranty of#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the#  GNU General Public License for more details.##  You should have received a copy of the GNU General Public License#   along with this program; if not, write to the Free Software#  Foundation, Inc.,#  51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA## Note: This is a sample script and is not complete. Modify the script based on your environment.use strict;use warnings FATAL => 'all';use Getopt::Long;use MHA::DBHelper;#自定义该组机器的vipmy $vip = "192.168.68.100";my $if = "ens32";my (  $command,        $ssh_user,         $orig_master_host,  $orig_master_ip, $orig_master_port, $new_master_host,  $new_master_ip,  $new_master_port,  $new_master_user,  $new_master_password);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,  'new_master_user=s'     => \$new_master_user,  'new_master_password=s' => \$new_master_password,);sub add_vip {    my $output1 = `ssh -o ConnectTimeout=15  -o ConnectionAttempts=3 $orig_master_host /sbin/ip addr del $vip/32 dev $if`;    my $output2 = `ssh -o ConnectTimeout=15  -o ConnectionAttempts=3 $new_master_host /sbin/ip addr add $vip/32 dev $if`;}exit &main();sub main {  if ( $command eq "stop" || $command eq "stopssh" ) {    # $orig_master_host, $orig_master_ip, $orig_master_port are passed.    # If you manage master ip address at global catalog database,    # invalidate orig_master_ip here.    my $exit_code = 1;    eval {      # updating global catalog, etc      $exit_code = 0;    };    if ($@) {      warn "Got Error: $@\n";      exit $exit_code;    }    exit $exit_code;  }  elsif ( $command eq "start" ) {    # all arguments are passed.    # If you manage master ip address at global catalog database,    # activate new_master_ip here.    # You can also grant write access (create user, set read_only=0, etc) here.    my $exit_code = 10;    eval {      my $new_master_handler = new MHA::DBHelper();      # args: hostname, port, user, password, raise_error_or_not      $new_master_handler->connect( $new_master_ip, $new_master_port,        $new_master_user, $new_master_password, 1 );      ## Set read_only=0 on the new master      $new_master_handler->disable_log_bin_local();      print "Set read_only=0 on the new master.\n";      $new_master_handler->disable_read_only();      ## Creating an app user on the new master      #print "Creating app user on the new master..\n";      #FIXME_xxx_create_user( $new_master_handler->{dbh} );      $new_master_handler->enable_log_bin_local();      $new_master_handler->disconnect();      ## Update master ip on the catalog database, etc      &add_vip();      $exit_code = 0;    };    if ($@) {      warn $@;      # If you want to continue failover, exit 10.      exit $exit_code;    }    exit $exit_code;  }  elsif ( $command eq "status" ) {    # do nothing    exit 0;  }  else {    &usage();    exit 1;  }}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";}
master_ip_online_change
#!/usr/bin/env perl#  Copyright (C) 2011 DeNA Co.,Ltd.##  This program is free software; you can redistribute it and/or modify#  it under the terms of the GNU General Public License as published by#  the Free Software Foundation; either version 2 of the License, or#  (at your option) any later version.##  This program is distributed in the hope that it will be useful,#  but WITHOUT ANY WARRANTY; without even the implied warranty of#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the#  GNU General Public License for more details.##  You should have received a copy of the GNU General Public License#   along with this program; if not, write to the Free Software#  Foundation, Inc.,#  51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA## Note: This is a sample script and is not complete. Modify the script based on your environment.use strict;use warnings FATAL => 'all';use Getopt::Long;use MHA::DBHelper;use MHA::NodeUtil;use Time::HiRes qw( sleep gettimeofday tv_interval );use Data::Dumper;my $_tstart;my $_running_interval = 0.1;#添加vip定义my $vip = "192.168.68.100";my $if = "ens32";my (  $command,              $orig_master_is_new_slave, $orig_master_host,  $orig_master_ip,       $orig_master_port,         $orig_master_user,  $orig_master_password, $orig_master_ssh_user,     $new_master_host,  $new_master_ip,        $new_master_port,          $new_master_user,  $new_master_password,  $new_master_ssh_user,);GetOptions(  'command=s'                => \$command,  'orig_master_is_new_slave' => \$orig_master_is_new_slave,  'orig_master_host=s'       => \$orig_master_host,  'orig_master_ip=s'         => \$orig_master_ip,  'orig_master_port=i'       => \$orig_master_port,  'orig_master_user=s'       => \$orig_master_user,  'orig_master_password=s'   => \$orig_master_password,  'orig_master_ssh_user=s'   => \$orig_master_ssh_user,  'new_master_host=s'        => \$new_master_host,  'new_master_ip=s'          => \$new_master_ip,  'new_master_port=i'        => \$new_master_port,  'new_master_user=s'        => \$new_master_user,  'new_master_password=s'    => \$new_master_password,  'new_master_ssh_user=s'    => \$new_master_ssh_user,);exit &main();sub drop_vip {        my $output = `ssh -o ConnectTimeout=15  -o ConnectionAttempts=3 $orig_master_host /sbin/ip addr del $vip/32 dev $if`;    #mysql里的连接全部干掉    #FIXME}sub add_vip {        my $output = `ssh -o ConnectTimeout=15  -o ConnectionAttempts=3 $new_master_host /sbin/ip addr add $vip/32 dev $if`;}sub current_time_us {  my ( $sec, $microsec ) = gettimeofday();  my $curdate = localtime($sec);  return $curdate . " " . sprintf( "d", $microsec );}sub sleep_until {  my $elapsed = tv_interval($_tstart);  if ( $_running_interval > $elapsed ) {    sleep( $_running_interval - $elapsed );  }}sub get_threads_util {  my $dbh                    = shift;  my $my_connection_id       = shift;  my $running_time_threshold = shift;  my $type                   = shift;  $running_time_threshold = 0 unless ($running_time_threshold);  $type                   = 0 unless ($type);  my @threads;  my $sth = $dbh->prepare("SHOW PROCESSLIST");  $sth->execute();  while ( my $ref = $sth->fetchrow_hashref() ) {    my $id         = $ref->{Id};    my $user       = $ref->{User};    my $host       = $ref->{Host};    my $command    = $ref->{Command};    my $state      = $ref->{State};    my $query_time = $ref->{Time};    my $info       = $ref->{Info};    $info =~ s/^\s*(.*?)\s*$/$1/ if defined($info);    next if ( $my_connection_id == $id );    next if ( defined($query_time) && $query_time < $running_time_threshold );    next if ( defined($command)    && $command eq "Binlog Dump" );    next if ( defined($user)       && $user eq "system user" );    next      if ( defined($command)      && $command eq "Sleep"      && defined($query_time)      && $query_time >= 1 );    if ( $type >= 1 ) {      next if ( defined($command) && $command eq "Sleep" );      next if ( defined($command) && $command eq "Connect" );    }    if ( $type >= 2 ) {      next if ( defined($info) && $info =~ m/^select/i );      next if ( defined($info) && $info =~ m/^show/i );    }    push @threads, $ref;  }  return @threads;}sub main {  if ( $command eq "stop" ) {    ## Gracefully killing connections on the current master    # 1. Set read_only= 1 on the new master    # 2. DROP USER so that no app user can establish new connections    # 3. Set read_only= 1 on the current master    # 4. Kill current queries    # * Any database access failure will result in script die.    my $exit_code = 1;    eval {      ## Setting read_only=1 on the new master (to avoid accident)      my $new_master_handler = new MHA::DBHelper();      # args: hostname, port, user, password, raise_error(die_on_error)_or_not      $new_master_handler->connect( $new_master_ip, $new_master_port,        $new_master_user, $new_master_password, 1 );      print current_time_us() . " Set read_only on the new master.. ";      $new_master_handler->enable_read_only();      if ( $new_master_handler->is_read_only() ) {        print "ok.\n";      }      else {        die "Failed!\n";      }      $new_master_handler->disconnect();      # Connecting to the orig master, die if any database error happens      my $orig_master_handler = new MHA::DBHelper();      $orig_master_handler->connect( $orig_master_ip, $orig_master_port,        $orig_master_user, $orig_master_password, 1 );      ## Drop application user so that nobody can connect. Disabling per-session binlog beforehand      $orig_master_handler->disable_log_bin_local();     # print current_time_us() . " Drpping app user on the orig master..\n";      print current_time_us() . " drop vip $vip..\n";      #drop_app_user($orig_master_handler);     &drop_vip();      ## Waiting for N * 100 milliseconds so that current connections can exit      my $time_until_read_only = 15;      $_tstart = [gettimeofday];      my @threads = get_threads_util( $orig_master_handler->{dbh},        $orig_master_handler->{connection_id} );      while ( $time_until_read_only > 0 && $#threads >= 0 ) {        if ( $time_until_read_only % 5 == 0 ) {          printf"%s Waiting all running %d threads are disconnected.. (max %d milliseconds)\n",            current_time_us(), $#threads + 1, $time_until_read_only * 100;          if ( $#threads < 5 ) {            print Data::Dumper->new( [$_] )->Indent(0)->Terse(1)->Dump . "\n"              foreach (@threads);          }        }        sleep_until();        $_tstart = [gettimeofday];        $time_until_read_only--;        @threads = get_threads_util( $orig_master_handler->{dbh},          $orig_master_handler->{connection_id} );      }      ## Setting read_only=1 on the current master so that nobody(except SUPER) can write      print current_time_us() . " Set read_only=1 on the orig master.. ";      $orig_master_handler->enable_read_only();      if ( $orig_master_handler->is_read_only() ) {        print "ok.\n";      }      else {        die "Failed!\n";      }      ## Waiting for M * 100 milliseconds so that current update queries can complete      my $time_until_kill_threads = 5;      @threads = get_threads_util( $orig_master_handler->{dbh},        $orig_master_handler->{connection_id} );      while ( $time_until_kill_threads > 0 && $#threads >= 0 ) {        if ( $time_until_kill_threads % 5 == 0 ) {          printf"%s Waiting all running %d queries are disconnected.. (max %d milliseconds)\n",            current_time_us(), $#threads + 1, $time_until_kill_threads * 100;          if ( $#threads < 5 ) {            print Data::Dumper->new( [$_] )->Indent(0)->Terse(1)->Dump . "\n"              foreach (@threads);          }        }        sleep_until();        $_tstart = [gettimeofday];        $time_until_kill_threads--;        @threads = get_threads_util( $orig_master_handler->{dbh},          $orig_master_handler->{connection_id} );      }      ## Terminating all threads      print current_time_us() . " Killing all application threads..\n";      $orig_master_handler->kill_threads(@threads) if ( $#threads >= 0 );      print current_time_us() . " done.\n";      $orig_master_handler->enable_log_bin_local();      $orig_master_handler->disconnect();      ## After finishing the script, MHA executes FLUSH TABLES WITH READ LOCK      $exit_code = 0;    };    if ($@) {      warn "Got Error: $@\n";      exit $exit_code;    }    exit $exit_code;  }  elsif ( $command eq "start" ) {    ## Activating master ip on the new master    # 1. Create app user with write privileges    # 2. Moving backup script if needed    # 3. Register new master's ip to the catalog database# We don't return error even though activating updatable accounts/ip failed so that we don't interrupt slaves' recovery.# If exit code is 0 or 10, MHA does not abort    my $exit_code = 10;    eval {      my $new_master_handler = new MHA::DBHelper();      # args: hostname, port, user, password, raise_error_or_not      $new_master_handler->connect( $new_master_ip, $new_master_port,        $new_master_user, $new_master_password, 1 );      ## Set read_only=0 on the new master      $new_master_handler->disable_log_bin_local();      print current_time_us() . " Set read_only=0 on the new master.\n";      $new_master_handler->disable_read_only();      ## Creating an app user on the new master      #print current_time_us() . " Creating app user on the new master..\n";      print current_time_us() . "Add vip $vip on $if..\n";     # create_app_user($new_master_handler);      &add_vip();      $new_master_handler->enable_log_bin_local();      $new_master_handler->disconnect();      ## Update master ip on the catalog database, etc      $exit_code = 0;    };    if ($@) {      warn "Got Error: $@\n";      exit $exit_code;    }    exit $exit_code;  }  elsif ( $command eq "status" ) {    # do nothing    exit 0;  }  else {    &usage();    exit 1;  }}sub usage {  print"Usage: master_ip_online_change --command=start|stop|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";  die;}
自动删除relay log
#检查软件安装有哪些内容rpm -ql mha4mysql-node-0.56-0.el6.noarch#2台slave上[root@192.168.0.142 ~]# cat purge_relay_log.sh #!/bin/bashuser=xmmpasswd=xmmxmmport=3306log_dir='/data/masterha/log'work_dir='/data'purge='/usr/bin/purge_relay_logs'if [ ! -d $log_dir ]then   mkdir $log_dir -pfi$purge --user=$user --password=$passwd --disable_relay_log_purge --port=$port --workdir=$work_dir >> $log_dir/purge_relay_logs.log 2>&1#添加到crontab定期执行[root@192.168.0.142 ~]# crontab -l0 4 * * * /bin/bash /root/purge_relay_log.sh
自动发送邮件
#!/usr/bin/python# -*- coding: UTF-8 -*-import smtplibfrom email.mime.text import MIMEText#设置服务器所需信息#163邮箱服务器地址mail_host = 'smtp.163.com'#163用户名mail_user = 'xxxx'#密码(部分邮箱为授权码)mail_pass = 'xxxxx'#邮件发送方邮箱地址sender = 'xxxx@163.com'#邮件接受方邮箱地址,注意需要[]包裹,这意味着你可以写多个邮件地址群发receivers = ['xxxx@163.com']#设置email信息#邮件内容设置message = MIMEText('content:这是master故障failover切换时自动发送的邮件','plain','utf-8')#邮件主题message['Subject'] = 'mha邮件'#发送方信息message['From'] = sender#接受方信息message['To'] = receivers[0]#登录并发送邮件try:    smtpObj = smtplib.SMTP()    #连接到服务器    smtpObj.connect(mail_host,25)    #登录到服务器    #smtpObj = smtplib.SMTP_SSL(mail_host)    smtpObj.login(mail_user,mail_pass)    #发送    smtpObj.sendmail(        sender,receivers,message.as_string())    #退出    smtpObj.quit()    print('success')except smtplib.SMTPException as e:    print('error',e) #打印错误

启动三步骤与日志

ssh检查
[root@server3 16:20:38 /usr/bin]#masterha_check_ssh --global_conf=/etc/masterha/masterha_default.cnf --conf=/etc/masterha/app1.cnf Tue Apr  3 16:28:59 2018 - [info] Reading default configuration from /etc/masterha/masterha_default.cnf..Tue Apr  3 16:28:59 2018 - [info] Reading application default configuration from /etc/masterha/app1.cnf..Tue Apr  3 16:28:59 2018 - [info] Reading server configuration from /etc/masterha/app1.cnf..Tue Apr  3 16:28:59 2018 - [info] Starting SSH connection tests..Tue Apr  3 16:29:01 2018 - [debug] Tue Apr  3 16:29:00 2018 - [debug]  Connecting via SSH from root@server3(192.168.68.163:22) to root@server1(192.168.68.161:22)..Tue Apr  3 16:29:00 2018 - [debug]   ok.Tue Apr  3 16:29:00 2018 - [debug]  Connecting via SSH from root@server3(192.168.68.163:22) to root@server2(192.168.68.162:22)..Tue Apr  3 16:29:00 2018 - [debug]   ok.Tue Apr  3 16:29:04 2018 - [debug] Tue Apr  3 16:28:59 2018 - [debug]  Connecting via SSH from root@server1(192.168.68.161:22) to root@server2(192.168.68.162:22)..Tue Apr  3 16:28:59 2018 - [debug]   ok.Tue Apr  3 16:28:59 2018 - [debug]  Connecting via SSH from root@server1(192.168.68.161:22) to root@server3(192.168.68.163:22)..Tue Apr  3 16:29:04 2018 - [debug]   ok.Tue Apr  3 16:29:04 2018 - [debug] Tue Apr  3 16:28:59 2018 - [debug]  Connecting via SSH from root@server2(192.168.68.162:22) to root@server1(192.168.68.161:22)..Tue Apr  3 16:29:00 2018 - [debug]   ok.Tue Apr  3 16:29:00 2018 - [debug]  Connecting via SSH from root@server2(192.168.68.162:22) to root@server3(192.168.68.163:22)..Tue Apr  3 16:29:04 2018 - [debug]   ok.Tue Apr  3 16:29:04 2018 - [info] All SSH connection tests passed successfully.
复制检查
[root@server3 16:29:04 /usr/bin]#masterha_check_repl --global_conf=/etc/masterha/masterha_default.cnf --conf=/etc/masterha/app1.cnf                 Tue Apr  3 16:29:12 2018 - [info] Reading default configuration from /etc/masterha/masterha_default.cnf..Tue Apr  3 16:29:12 2018 - [info] Reading application default configuration from /etc/masterha/app1.cnf..Tue Apr  3 16:29:12 2018 - [info] Reading server configuration from /etc/masterha/app1.cnf..Tue Apr  3 16:29:12 2018 - [info] MHA::MasterMonitor version 0.56.Tue Apr  3 16:29:12 2018 - [debug] Connecting to servers..Tue Apr  3 16:29:13 2018 - [debug]  Connected to: server1(192.168.68.161:3306), user=xmmTue Apr  3 16:29:13 2018 - [debug]  Number of slave worker threads on host server1(192.168.68.161:3306): 0Tue Apr  3 16:29:13 2018 - [debug]  Connected to: server2(192.168.68.162:3306), user=xmmTue Apr  3 16:29:13 2018 - [debug]  Number of slave worker threads on host server2(192.168.68.162:3306): 0Tue Apr  3 16:29:13 2018 - [debug]  Connected to: server3(192.168.68.163:3306), user=xmmTue Apr  3 16:29:13 2018 - [debug]  Number of slave worker threads on host server3(192.168.68.163:3306): 0Tue Apr  3 16:29:13 2018 - [debug]  Comparing MySQL versions..Tue Apr  3 16:29:13 2018 - [debug]   Comparing MySQL versions done.Tue Apr  3 16:29:13 2018 - [debug] Connecting to servers done.Tue Apr  3 16:29:13 2018 - [info] GTID failover mode = 1Tue Apr  3 16:29:13 2018 - [info] Dead Servers:Tue Apr  3 16:29:13 2018 - [info] Alive Servers:Tue Apr  3 16:29:13 2018 - [info]   server1(192.168.68.161:3306)Tue Apr  3 16:29:13 2018 - [info]   server2(192.168.68.162:3306)Tue Apr  3 16:29:13 2018 - [info]   server3(192.168.68.163:3306)Tue Apr  3 16:29:13 2018 - [info] Alive Slaves:Tue Apr  3 16:29:13 2018 - [info]   server2(192.168.68.162:3306)  Version=5.7.21-log (oldest major version between slaves) log-bin:enabledTue Apr  3 16:29:13 2018 - [info]     GTID ONTue Apr  3 16:29:13 2018 - [debug]    Relay log info repository: FILETue Apr  3 16:29:13 2018 - [info]     Replicating from 192.168.68.161(192.168.68.161:3306)Tue Apr  3 16:29:13 2018 - [info]     Primary candidate for the new Master (candidate_master is set)Tue Apr  3 16:29:13 2018 - [info]   server3(192.168.68.163:3306)  Version=5.7.21-log (oldest major version between slaves) log-bin:enabledTue Apr  3 16:29:13 2018 - [info]     GTID ONTue Apr  3 16:29:13 2018 - [debug]    Relay log info repository: FILETue Apr  3 16:29:13 2018 - [info]     Replicating from 192.168.68.161(192.168.68.161:3306)Tue Apr  3 16:29:13 2018 - [info] Current Alive Master: server1(192.168.68.161:3306)Tue Apr  3 16:29:13 2018 - [info] Checking slave configurations..Tue Apr  3 16:29:13 2018 - [info] Checking replication filtering settings..Tue Apr  3 16:29:13 2018 - [info]  binlog_do_db= , binlog_ignore_db= Tue Apr  3 16:29:13 2018 - [info]  Replication filtering check ok.Tue Apr  3 16:29:13 2018 - [info] GTID (with auto-pos) is supported. Skipping all SSH and Node package checking.Tue Apr  3 16:29:13 2018 - [info] Checking SSH publickey authentication settings on the current master..Tue Apr  3 16:29:13 2018 - [debug] SSH connection test to server1, option -o StrictHostKeyChecking=no -o PasswordAuthentication=no -o BatchMode=yes -o ConnectTimeout=5, timeout 5Tue Apr  3 16:29:13 2018 - [info] HealthCheck: SSH to server1 is reachable.Tue Apr  3 16:29:13 2018 - [info] server1(192.168.68.161:3306) (current master) +--server2(192.168.68.162:3306) +--server3(192.168.68.163:3306)Tue Apr  3 16:29:13 2018 - [info] Checking replication health on server2..Tue Apr  3 16:29:13 2018 - [info]  ok.Tue Apr  3 16:29:13 2018 - [info] Checking replication health on server3..Tue Apr  3 16:29:13 2018 - [info]  ok.Tue Apr  3 16:29:13 2018 - [info] Checking master_ip_failover_script status:Tue Apr  3 16:29:13 2018 - [info]   /etc/masterha/master_ip_failover --command=status --ssh_user=root --orig_master_host=server1 --orig_master_ip=192.168.68.161 --orig_master_port=3306 Tue Apr  3 16:29:13 2018 - [info]  OK.Tue Apr  3 16:29:13 2018 - [warning] shutdown_script is not defined.Tue Apr  3 16:29:13 2018 - [debug]  Disconnected from server1(192.168.68.161:3306)Tue Apr  3 16:29:13 2018 - [debug]  Disconnected from server2(192.168.68.162:3306)Tue Apr  3 16:29:13 2018 - [debug]  Disconnected from server3(192.168.68.163:3306)Tue Apr  3 16:29:13 2018 - [info] Got exit code 0 (Not master dead).MySQL Replication Health is OK.
启动MHA
[root@server3 16:29:13 /usr/bin]#masterha_manager --global_conf=/etc/masterha/masterha_default.cnf --conf=/etc/masterha/app1.cnf > /var/log/masterha/app1/app1.log 2>&1 &[2] 4406

压测与故障切换

有关故障切换参考另外一篇博文

邮件 用户 检查 地址 信息 服务器 脚本 软件 邮箱 切换 服务 配置 主从 故障 数据 登陆 监控 内容 密码 接受方 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 深圳市人人互联网科技有限公司 互联网科技工作委员会副主任毛军 互联网和科技创新 互联网科技有限公司图片 科技信息互联网 宁夏众和广鑫互联网科技有限公司 来此购互联网科技有限公司 昊天互联网科技有限公司 移动互联网科技公司 坤平互联网科技 呼和浩特新华互联网科技学院 民营互联网公司国防科技 上海京穆互联网科技有限公司 黑科技 体验场景 互联网大会 厦门江牛科技互联网 从那以后互联网科技有限公司 郑州欣桑互联网科技有限公司 广州燕处互联网科技有限公司 信承诺互联网科技有限公司 湖北辰鑫科技互联网 互联网科技图片 互联网核心科技是什么 互联网科技公司官网 无线互联网科技 狮子座互联网科技培训 金融科技与互联网金融相同和不同 来此购互联网科技有限公司 国大互联网教育科技有限公司工作 互联网营销推广黑科技 美国互联网科技公司
0