MHA集群搭建
发表于:2025-01-31 作者:千家信息网编辑
千家信息网最后更新 2025年01月31日,开篇本文主要介绍如何搭建MHA集群,希望给你带来帮助基本环境介绍Linux:CentOS 7.4MySQL:5.7.21+传统复制(开启GTID不搭建binlog server)VIP:192.168
千家信息网最后更新 2025年01月31日MHA集群搭建
开篇
本文主要介绍如何搭建MHA集群,希望给你带来帮助
基本环境介绍
Linux:CentOS 7.4MySQL:5.7.21+传统复制(开启GTID不搭建binlog server)VIP:192.168.68.100
角色 | ip地址 | 主机名 | server_id | 类型 |
---|---|---|---|---|
Master | 192.168.68.161 | server1 | 1413306 | 写 |
Candicate master | 192.168.68.162 | server2 | 1423306 | 读 |
Manager/Slave | 192.168.68.163 | server3 | 1433306 | 读/监控/管理 |
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安全错误
数据库的锁怎样保障安全
福星科技社区互联网公司
流媒体服务器软件多少钱
大学网络安全协会社团
服务器运维性能优化
差分定位服务器
服务器管理系统 目的
生信数据库网站
服务器900w电源
服务器多大
数据库 ash
弹性云服务器有和特点
国家数据库保存论文
达梦数据库登入后不显示模式
数据库数据的表现形式
网络安全手抄报防诈骗
高智能移动软件开发专业
互联网专业和网络技术有区别吗
小米软件开发 面试
虚拟网络技术研究报告
dns服务器掉包
福星科技社区互联网公司
信息技术选修三网络技术应用教案
擎天系统数据库代码更新失败
消费机数据库按照
数据库主码外码可以一样吗
互联网公司服务器多少钱
南京网络技术研究
改革开放40周年与网络安全
干不下去回来做软件开发
服务器最多能插多少盘