MySQLMHA重要配置-创新互联

1、集群信息

站在用户的角度思考问题,与客户深入沟通,找到东宁网站设计与东宁网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:成都网站设计、成都网站制作、企业官网、英文网站、手机端网站、网站推广、申请域名、网络空间、企业邮箱。业务覆盖东宁地区。[root@es3 local]# cat /etc/hosts 127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.56.14 es1 192.168.56.15 es2 192.168.56.16 es3

2、MySQL配置:

[root@es3 local]# grep -v ^# /etc/my.cnf [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock symbolic-links=0 log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid server_id = 3 log-bin=mysqlbin binlog_format = row log_slave_updates = 1 enforce_gtid_consistency = ON gtid_mode = ON slave-parallel-type=LOGICAL_CLOCK slave-parallel-workers=16 master_info_repository=TABLE relay_log_info_repository=TABLE relay_log_recovery=ON rpl_semi_sync_master_enabled = 1 rpl_semi_sync_master_timeout = 1000 rpl_semi_sync_slave_enabled = 1 [root@es3 local]#

3、app1.cnf信息

[root@es3 ~]# cat app1.cnf  [server default]  master_ip_failover_script=/usr/local/bin/master_ip_failover master_ip_online_change_script= /usr/local/bin/master_ip_online_change report_script=/usr/local/bin/send_report shutdown_script=/usr/local/bin/power_manager user=repl  password=123456 ssh_user=root  manager_workdir=/data/manager remote_workdir=/tmp repl_user=repl  repl_password=123456  secondary_check_script=masterha_secondary_check -s 192.168.56.16 -s 192.168.56.15 [server1]  hostname=es1 port=3306    [server2]  hostname=es2 port=3306  [server3]  hostname=es3 port=3306  [root@es3 ~]#

4、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.56.191/24';  # Virtual IP my $key = "1"; my $ssh_start_vip = "/sbin/ifconfig enp0s8:$key $vip"; my $ssh_stop_vip = "/sbin/ifconfig enp0s8:$key down"; #my $ssh_Bcast_arp = "arping -c 3 -A 192.168.56.191";   #ARP回复模式,更新邻居。要是不加则服务器会自动等到vip缓存失效,期间VIP会有一定时间的不可用。 my $ssh_Bcast_arp = "arping -c 3 -A 192.168.56.191 -I enp0s8";   #ARP回复模式,更新邻居。要是不加则服务器会自动等到vip缓存失效,期间VIP会有一定时间的不可用 $ssh_user = "root";   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();             &start_arp();             $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 start_arp() {     `ssh $ssh_user\@$new_master_host \" $ssh_Bcast_arp \"`; } 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"; }

5、master_ip_online_change脚本

#!/usr/bin/env perl use strict;   use warnings FATAL =>'all';      use Getopt::Long;      my $vip = '192.168.56.191/24';  # Virtual IP   my $key = "1";   my $ssh_start_vip = "/sbin/ifconfig enp0s8:$key $vip";   my $ssh_stop_vip = "/sbin/ifconfig enp0s8:$key down";   my $exit_code = 0;   my $ssh_Bcast_arp = "arping -c 3 -A 192.168.56.191 -I enp0s8";   #ARP回复模式,更新邻居。要是不加则服务器会自动等到vip缓存失效,期间VIP会有一定时间的不可用。    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,   );      #my $ssh_Bcast_arp = "arping -c 3 -A 192.168.56.191";   #ARP回复模式,更新邻居。要是不加则服务器会自动等到vip缓存失效,期间VIP会有一定时间的不可用。    exit &main();      sub main {      #print "\n\nIN SCRIPT TEST====$ssh_stop_vip==$ssh_start_vip===\n\n";      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 {               print "\n\n\n***************************************************************\n";               print "Disabling the VIP - $vip on old master: $orig_master_host\n";               print "***************************************************************\n\n\n\n";   &stop_vip();               $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 {               print "\n\n\n***************************************************************\n";               print "Enabling the VIP - $vip on new master: $new_master_host \n";               print "***************************************************************\n\n\n\n";   &start_vip();   &start_arp();             $exit_code = 0;           };           if ($@) {               warn $@;               exit $exit_code;           }           exit $exit_code;   }   elsif ( $command eq "status" ) {           print "Checking the Status of the script.. OK \n";           `ssh $orig_master_ssh_user\@$orig_master_host \" $ssh_start_vip \"`;           exit 0;   }   else {   &usage();           exit 1;   }   }      # A simple system call that enable the VIP on the new master   sub start_vip() {   `ssh $new_master_ssh_user\@$new_master_host \" $ssh_start_vip \"`;   }   sub start_arp() {     `ssh $new_master_ssh_user\@$new_master_host \" $ssh_Bcast_arp \"`; } # A simple system call that disable the VIP on the old_master   sub stop_vip() {   `ssh $orig_master_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";   }

6、report_script脚本

#!/bin/bash echo `hostname`   `hostname -i` >> mail.txt echo `date` >mail.txt echo "the mha has been switched" >>mail.txt mail -s "the mha has been switched on `hostname -i` " xxxxxxx@163.com 

7、power_manager 防止脑裂脚本

#!/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 Pod::Usage; use Net::Telnet; use MHA::ManagerConst; use MHA::ManagerUtil; my $SSH_STOP_OK           = 10; my $COMMAND_NOT_SUPPORTED = 20; my $ILO_ADMIN             = 'Administrator'; my $DRAC_ADMIN            = 'root'; my $PASSWORD              = 'xxx'; my $max_retries           = 10; exit &main(); sub get_power_status_drac_internal {   my $telnet = shift;   my $prompt = shift;   $telnet->print("racadm serveraction powerstatus");   ($_) = $telnet->waitfor($prompt);   my $power_state = "void";   my @cmd_out     = split /\n/;   # discard command sent to DRAC   $_ = shift @cmd_out;   #strip ansi control chars   s/\e\[(([0-9]+;)*[0-9]+)*[ABCDfHJKmsu]//g;   s/^.*\x0D//;   foreach (@cmd_out) {     s/^\s+//g;     s/\s+$//g;     if (m/^Server power status: (\w+)/) {       $power_state = lc($1);       last;     }   }   return $power_state; } sub power_off_drac_internal {   my $telnet = shift;   my $prompt = shift;   $telnet->print("racadm serveraction powerdown");   $telnet->waitfor($prompt); } sub power_on_drac_internal {   my $telnet = shift;   my $prompt = shift;   $telnet->print("racadm serveraction powerup");   $telnet->waitfor($prompt); } sub login_drac_internal {   my $drac_addr = shift;   my $prompt    = '/admin1|\$/';   my $telnet    = new Net::Telnet(     Timeout => 10,     Prompt  => $prompt,   );   $telnet->open($drac_addr);   $telnet->waitfor('/login/i');   $telnet->print($DRAC_ADMIN);   $telnet->waitfor('/password/i');   $telnet->print($PASSWORD);   $telnet->waitfor($prompt);   return ( $telnet, $prompt ); } sub power_off_drac {   my $drac_addr    = shift;   my $power_status = "void";   local $@;   eval {     my ( $telnet, $prompt ) = login_drac_internal($drac_addr);     power_off_drac_internal( $telnet, $prompt );     $power_status = get_power_status_drac_internal( $telnet, $prompt );     $telnet->close;   };   if ($@) {     warn $@;   }   return $power_status; } sub power_on_drac {   my $drac_addr    = shift;   my $power_status = "void";   local $@;   eval {     my ( $telnet, $prompt ) = login_drac_internal($drac_addr);     power_on_drac_internal( $telnet, $prompt );     $power_status = get_power_status_drac_internal( $telnet, $prompt );     $telnet->close;   };   if ($@) {     warn $@;   }   return $power_status; } sub power_status_drac {   my $drac_addr    = shift;   my $power_status = "void";   local $@;   eval {     my ( $telnet, $prompt ) = login_drac_internal($drac_addr);     $power_status = get_power_status_drac_internal( $telnet, $prompt );     $telnet->close;   };   if ($@) {     warn $@;   }   return $power_status; } sub power_status_ilo {   my $ilo_addr     = shift;   my $power_status = "void";   local $@;   eval {     my $ipmi_out = `ipmitool -H $ilo_addr -U $ILO_ADMIN -P $PASSWORD -I lanplus  power status`;     die "Failed to get power status from ipmitool. Maybe you need to upgrade ILO firmware version.\n"       if ($?);     chomp($ipmi_out);     if ( $ipmi_out =~ m/^Chassis Power is (\w+)/ ) {       $power_status = lc($1);     }   };   if ($@) {     warn $@;   }   return $power_status; } sub power_on_ilo {   my $ilo_addr     = shift;   my $power_status = "void";   local $@;   eval {     $power_status = power_status_ilo($ilo_addr);     if ( $power_status ne "off" ) {       die "Power from ipmitool is already on.\n" if ( $power_status eq "on" );       return $power_status;     }     `ipmitool -H $ilo_addr -U $ILO_ADMIN -P $PASSWORD -I lanplus  power on`;     $power_status = power_status_ilo($ilo_addr);   };   if ($@) {     warn $@;   }   return $power_status; } sub power_off_ilo {   my $ilo_addr     = shift;   my $power_status = "void";   local $@;   eval {     $power_status = power_status_ilo($ilo_addr);     if ( $power_status ne "on" ) {       die "Power from ipmitool is already off.\n" if ( $power_status eq "off" );       return $power_status;     }     `ipmitool -H $ilo_addr -U $ILO_ADMIN -P $PASSWORD -I lanplus  power off`;     $power_status = power_status_ilo($ilo_addr);   };   if ($@) {     warn $@;   }   return $power_status; } sub get_power_status {   my ( $admin_addr, $server_type ) = @_;   my $power_status = "void";   if ( $server_type eq "ilo" ) {     $power_status = power_status_ilo($admin_addr);   }   elsif ( $server_type eq "drac" ) {     $power_status = power_status_drac($admin_addr);   }   return $power_status; } sub stop {   my ( $real_host, $admin_addr, $server_type ) = @_;   my $power_status = "void";   if ( $server_type eq "ilo" ) {     $power_status = power_off_ilo($admin_addr);   }   elsif ( $server_type eq "drac" ) {     $power_status = power_off_drac($admin_addr);   }   if ( $power_status eq "off" ) {     print "Power of $real_host was successfully turned off.\n";     return 0;   }   elsif ( $power_status ne "on" ) {     return $COMMAND_NOT_SUPPORTED;   }   my $retry_count = 0;   while ( $retry_count < $max_retries ) {     $power_status = get_power_status( $admin_addr, $server_type );     last if ( $power_status eq "off" );     print "Waiting until power status becomes 'off'. Current status is $power_status ...\n";     sleep 3;     $retry_count++;   }   if ( $power_status eq "off" ) {     print "Power of $real_host was successfully turned off.\n";     return 0;   }   else {     print       "Power of $real_host was not turned off. Check the host for detail.\n";     return 1;   } } sub stopssh {   my ( $ssh_user, $real_host, $real_ip, $pid_file ) = @_;   my $ssh_user_host = $ssh_user . '@';   if ($real_ip) {     $ssh_user_host .= $real_ip;   }   else {     $ssh_user_host .= $real_host;   }   my $command;   my ( $high_ret, $low_ret );   if ($pid_file) {     $command = "\"if [ ! -e $pid_file ]; then exit 1; fi; pid=\\\`cat $pid_file\\\`; rm -f $pid_file; kill -9 \\\$pid; a=\\\`ps ax | grep $pid_file | grep -v grep | wc | awk {'print \\\$1'}\\\`; if [ \"a\\\$a\" = \"a0\" ]; then exit 10; fi; sleep 1; a=\\\`ps ax | grep $pid_file | grep -v grep | wc | awk {'print \\\$1'}\\\`; if [ \"a\\\$a\" = \"a0\" ]; then exit 10; else exit 1; fi\"";     ( $high_ret, $low_ret ) = MHA::ManagerUtil::exec_system(       "ssh $ssh_user_host $MHA::ManagerConst::SSH_OPT_CHECK $command");     if ( $high_ret == $SSH_STOP_OK && $low_ret == 0 ) {       print "ssh reachable. mysqld stopped. power off not needed.\n";       return $high_ret;     }     print "Killing mysqld instance based on $pid_file failed.\n";   }   print "Killing all mysqld instances on $real_host..\n";   $command = "\"killall -9 mysqld mysqld_safe; a=\\\`pidof mysqld\\\`; if [ \\\"a\\\$a\\\" = \\\"a\\\" ]; then exit 10; fi; sleep 1; a=\\\`pidof mysqld\\\`; if [ \\\"a\\\$a\\\" = \\\"a\\\" ]; then exit 10; else exit 1; fi\"";   ( $high_ret, $low_ret ) = MHA::ManagerUtil::exec_system(     "ssh $ssh_user_host $MHA::ManagerConst::SSH_OPT_CHECK $command");   if ( $high_ret == $SSH_STOP_OK && $low_ret == 0 ) {     print "ssh reachable. mysqld stopped. power off not needed.\n";     return $high_ret;   }   else {     print       "ssh NOT reachable. Power off needed (rc1=$high_ret, rc2=$low_ret).\n";     return 1;   } } sub start {   my ( $real_host, $admin_addr, $server_type ) = @_;   my $power_status = "void";   if ( $server_type eq "ilo" ) {     $power_status = power_on_ilo($admin_addr);   }   elsif ( $server_type eq "drac" ) {     $power_status = power_on_drac($admin_addr);   }   if ( $power_status eq "on" ) {     print "Power of $real_host was successfully turned on.\n";     return 0;   }   elsif ( $power_status ne "off" ) {     return $COMMAND_NOT_SUPPORTED;   }   my $retry_count = 0;   while ( $power_status ne "on" && $retry_count < $max_retries ) {     $power_status = get_power_status( $admin_addr, $server_type );     last if ( $power_status eq "on" );     print "Waiting until power status becomes 'on'. Current status is $power_status ...\n";     sleep 3;     $retry_count++;   }   if ( $power_status eq "on" ) {     print "Power of $real_host was successfully turned on.\n";     return 0;   }   else {     print "Power of $real_host was not turned on. Check the host for detail.\n";     return 1;   } } sub status {   my ( $real_host, $admin_addr, $server_type ) = @_;   my $power_status = get_power_status( $admin_addr, $server_type );   print "Current power status on $real_host : $power_status\n";   if ( $power_status eq "on" ) {     return 0;   }   elsif ( $power_status eq "off" ) {     return 0;   }   else {     return $COMMAND_NOT_SUPPORTED;   } } # If ssh is reachable and mysqld process does not exist, exit with 2 and # do not power off. If ssh is not reachable, do power off and exit with 0 # if successful. Otherwise exit with 1. sub main {   my ( $command, $ssh_user, $host, $ip, $port, $pid_file, $help );   GetOptions(     'command=s'  => \$command,     'ssh_user=s' => \$ssh_user,     'host=s'     => \$host,     'ip=s'       => \$ip,     'port=i'     => \$port,     'pid_file=s' => \$pid_file,     'help'       => \$help,   );   if ($help) {     pod2usage(0);   }   pod2usage(1) unless ($command);   my $rc            = 1;   my $ssh_stop_fail = 0;   if ( $command eq "stopssh" || $command eq "stopssh3" ) {     pod2usage(1) unless ($ssh_user);     pod2usage(1) unless ($host);     $rc = stopssh( $ssh_user, $host, $ip, $pid_file );     if ( $rc == $SSH_STOP_OK ) {       exit $rc;     }     else {       exit 1 if ( $command eq "stopssh3" );       $ssh_stop_fail = 1;     }   }   # Get server type (ilo/drac, etc) and administrative IP address.   my ( $admin_addr, $server_type ) = FIXME_xxx( $host, $ip );   if ( $command eq "start" ) {     $rc = start( $host, $admin_addr, $server_type );   }   elsif ( $command eq "stop" || $ssh_stop_fail ) {     $rc = stop( $host, $admin_addr, $server_type );   }   elsif ( $command eq "status" ) {     $rc = status( $host, $admin_addr, $server_type );   }   else {     pod2usage(1);   }   # Do other way to stop host   if ( $rc == $COMMAND_NOT_SUPPORTED ) {     $rc = FIXME_xxx( $command, $host, $ip );   }   if ( $rc == 0 ) {     exit 0;   }   else {     exit 1;   } } ############################################################################# =head1 NAME Main purpose of this command is node fencing so that split brain never happens. =head1 SYNOPSIS # power off power_manager --command=stop --host=master_server # killing mysqld and mysqld_safe at first. If not successful, forcing power off power_manager --command=stopssh --host=master_server --ssh_user=root # killing mysqld and mysqld_safe. If not successful, just exit. power_manager --command=stopssh3 --host=master_server --ssh_user=root # killing mysqld with specified pid file. This is useful when you run multiple MySQL instances and want to stop only specified instance power_manager --command=stopssh --host=master_server --ssh_user=root --pid_file=/var/lib/mysql/mysqld.pid # power on power_manager --command=start --host=master_server # checking power status power_manager --command=status --host=master_server

8、遇到问题

[root@es3 bin]# masterha_check_repl --conf=/root/app1.cnf  Tue Aug 20 10:45:29 2019 - [warning] Global configuration file /etc/masterha_default.cnf not found. Skipping. Tue Aug 20 10:45:29 2019 - [info] Reading application default configuration from /root/app1.cnf.. Tue Aug 20 10:45:29 2019 - [info] Reading server configuration from /root/app1.cnf.. Tue Aug 20 10:45:29 2019 - [info] MHA::MasterMonitor version 0.58. Tue Aug 20 10:45:30 2019 - [info] GTID failover mode = 1 Tue Aug 20 10:45:30 2019 - [info] Dead Servers: Tue Aug 20 10:45:30 2019 - [info] Alive Servers: Tue Aug 20 10:45:30 2019 - [info]   es1(192.168.56.14:3306) Tue Aug 20 10:45:30 2019 - [info]   es2(192.168.56.15:3306) Tue Aug 20 10:45:30 2019 - [info]   es3(192.168.56.16:3306) Tue Aug 20 10:45:30 2019 - [info] Alive Slaves: Tue Aug 20 10:45:30 2019 - [info]   es2(192.168.56.15:3306)  Version=5.7.24-log (oldest major version between slaves) log-bin:enabled Tue Aug 20 10:45:30 2019 - [info]     GTID ON Tue Aug 20 10:45:30 2019 - [info]     Replicating from 192.168.56.14(192.168.56.14:3306) Tue Aug 20 10:45:30 2019 - [info]   es3(192.168.56.16:3306)  Version=5.7.24-log (oldest major version between slaves) log-bin:enabled Tue Aug 20 10:45:30 2019 - [info]     GTID ON Tue Aug 20 10:45:30 2019 - [info]     Replicating from es1(192.168.56.14:3306) Tue Aug 20 10:45:30 2019 - [info] Current Alive Master: es1(192.168.56.14:3306) Tue Aug 20 10:45:30 2019 - [info] Checking slave configurations.. Tue Aug 20 10:45:30 2019 - [info]  read_only=1 is not set on slave es2(192.168.56.15:3306). Tue Aug 20 10:45:30 2019 - [info]  read_only=1 is not set on slave es3(192.168.56.16:3306). Tue Aug 20 10:45:30 2019 - [info] Checking replication filtering settings.. Tue Aug 20 10:45:30 2019 - [info]  binlog_do_db= , binlog_ignore_db=  Tue Aug 20 10:45:30 2019 - [info]  Replication filtering check ok. Tue Aug 20 10:45:30 2019 - [info] GTID (with auto-pos) is supported. Skipping all SSH and Node package checking. Tue Aug 20 10:45:30 2019 - [info] Checking SSH publickey authentication settings on the current master.. Tue Aug 20 10:45:31 2019 - [info] HealthCheck: SSH to es1 is reachable. Tue Aug 20 10:45:31 2019 - [info]  es1(192.168.56.14:3306) (current master)  +--es2(192.168.56.15:3306)  +--es3(192.168.56.16:3306) Tue Aug 20 10:45:31 2019 - [info] Checking replication health on es2.. Tue Aug 20 10:45:31 2019 - [info]  ok. Tue Aug 20 10:45:31 2019 - [info] Checking replication health on es3.. Tue Aug 20 10:45:31 2019 - [info]  ok. Tue Aug 20 10:45:31 2019 - [info] Checking master_ip_failover_script status: Tue Aug 20 10:45:31 2019 - [info]   /usr/local/bin/master_ip_failover --command=status --ssh_user=root --orig_master_host=es1 --orig_master_ip=192.168.56.14 --orig_master_port=3306  /usr/local/bin/master_ip_failover:行3: use: 未找到命令 /usr/local/bin/master_ip_failover:行4: use: 未找到命令 /usr/local/bin/master_ip_failover:行6: use: 未找到命令 /usr/local/bin/master_ip_failover:行8: 未预期的符号 `newline' 附近有语法错误 /usr/local/bin/master_ip_failover:行8: `my (' Tue Aug 20 10:45:31 2019 - [error][/usr/share/perl5/vendor_perl/MHA/MasterMonitor.pm, ln229]  Failed to get master_ip_failover_script status with return code 2:0. Tue Aug 20 10:45:31 2019 - [error][/usr/share/perl5/vendor_perl/MHA/MasterMonitor.pm, ln427] Error happened on checking configurations.  at /usr/bin/masterha_check_repl line 48. Tue Aug 20 10:45:31 2019 - [error][/usr/share/perl5/vendor_perl/MHA/MasterMonitor.pm, ln525] Error happened on monitoring servers. Tue Aug 20 10:45:31 2019 - [info] Got exit code 1 (Not master dead). MySQL Replication Health is NOT OK! [root@es3 bin]#

原因:文件多了一个空行,这个错误我犯了好多次,哎……

MySQL MHA 重要配置

MySQL MHA 重要配置

[root@es3 bin]# masterha_check_repl --conf=/root/app1.cnf  Tue Aug 20 10:49:24 2019 - [warning] Global configuration file /etc/masterha_default.cnf not found. Skipping. Tue Aug 20 10:49:24 2019 - [info] Reading application default configuration from /root/app1.cnf.. Tue Aug 20 10:49:24 2019 - [info] Reading server configuration from /root/app1.cnf.. Tue Aug 20 10:49:24 2019 - [info] MHA::MasterMonitor version 0.58. Tue Aug 20 10:49:25 2019 - [info] GTID failover mode = 1 Tue Aug 20 10:49:25 2019 - [info] Dead Servers: Tue Aug 20 10:49:25 2019 - [info] Alive Servers: Tue Aug 20 10:49:25 2019 - [info]   es1(192.168.56.14:3306) Tue Aug 20 10:49:25 2019 - [info]   es2(192.168.56.15:3306) Tue Aug 20 10:49:25 2019 - [info]   es3(192.168.56.16:3306) Tue Aug 20 10:49:25 2019 - [info] Alive Slaves: Tue Aug 20 10:49:25 2019 - [info]   es2(192.168.56.15:3306)  Version=5.7.24-log (oldest major version between slaves) log-bin:enabled Tue Aug 20 10:49:25 2019 - [info]     GTID ON Tue Aug 20 10:49:25 2019 - [info]     Replicating from 192.168.56.14(192.168.56.14:3306) Tue Aug 20 10:49:25 2019 - [info]   es3(192.168.56.16:3306)  Version=5.7.24-log (oldest major version between slaves) log-bin:enabled Tue Aug 20 10:49:25 2019 - [info]     GTID ON Tue Aug 20 10:49:25 2019 - [info]     Replicating from es1(192.168.56.14:3306) Tue Aug 20 10:49:25 2019 - [info] Current Alive Master: es1(192.168.56.14:3306) Tue Aug 20 10:49:25 2019 - [info] Checking slave configurations.. Tue Aug 20 10:49:25 2019 - [info]  read_only=1 is not set on slave es2(192.168.56.15:3306). Tue Aug 20 10:49:25 2019 - [info]  read_only=1 is not set on slave es3(192.168.56.16:3306). Tue Aug 20 10:49:25 2019 - [info] Checking replication filtering settings.. Tue Aug 20 10:49:25 2019 - [info]  binlog_do_db= , binlog_ignore_db=  Tue Aug 20 10:49:25 2019 - [info]  Replication filtering check ok. Tue Aug 20 10:49:25 2019 - [info] GTID (with auto-pos) is supported. Skipping all SSH and Node package checking. Tue Aug 20 10:49:25 2019 - [info] Checking SSH publickey authentication settings on the current master.. Tue Aug 20 10:49:26 2019 - [info] HealthCheck: SSH to es1 is reachable. Tue Aug 20 10:49:26 2019 - [info]  es1(192.168.56.14:3306) (current master)  +--es2(192.168.56.15:3306)  +--es3(192.168.56.16:3306) Tue Aug 20 10:49:26 2019 - [info] Checking replication health on es2.. Tue Aug 20 10:49:26 2019 - [info]  ok. Tue Aug 20 10:49:26 2019 - [info] Checking replication health on es3.. Tue Aug 20 10:49:26 2019 - [info]  ok. Tue Aug 20 10:49:26 2019 - [info] Checking master_ip_failover_script status: Tue Aug 20 10:49:26 2019 - [info]   /usr/local/bin/master_ip_failover --command=status --ssh_user=root --orig_master_host=es1 --orig_master_ip=192.168.56.14 --orig_master_port=3306  IN SCRIPT TEST====/sbin/ifconfig enp0s8:1 down==/sbin/ifconfig enp0s8:1 192.168.56.191/24=== Checking the Status of the script.. OK  Tue Aug 20 10:49:26 2019 - [info]  OK. Tue Aug 20 10:49:26 2019 - [info] Checking shutdown script status: Tue Aug 20 10:49:26 2019 - [info]   /usr/local/bin/stop_report --command=status --ssh_user=root --host=es1 --ip=192.168.56.14  Tue Aug 20 10:49:26 2019 - [info]  OK. Tue Aug 20 10:49:26 2019 - [info] Got exit code 0 (Not master dead). MySQL Replication Health is OK. [root@es3 bin]#

另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


分享文章:MySQLMHA重要配置-创新互联
本文路径:http://hbruida.cn/article/gpjoj.html