MHA是Master High Availability的缩写,它是目前MySQL高可用方面的一个相对成熟的解决方案,其核心是使用perl语言编写的一组脚本,是一套优秀的作为MySQL高可用性环境下故障切换和主从提升的高可用软件。在MySQL故障切换过程中,MHA能做到在0~ 30秒之内自动完数据库的故障切换操作,并且能在最大程度上保证数据的一致性,以达到真正意义上的高可用。
my ( $command, $orig_master_host, $orig_master_ip,$ssh_user, $orig_master_port, $new_master_host, $new_master_ip,$new_master_port, $orig_master_ssh_port,$new_master_ssh_port,$new_master_user,$new_master_password );
# 这里定义的虚拟IP可以根据实际情况进行修改 my $vip'192.168.0.111/24'; my $brdc'192.168.0.255'; my $ifdev'eth0'; my $key'1'; # 这里的网卡名称 “eth0” 需要根据你机器的网卡名称进行修改 my $ssh_start_vipsudo /sbin/ifconfig eth0:$key$vip ; my $ssh_stop_vipsudo /sbin/ifconfig eth0:$key down ; my $ssh_Bcast_arpsudo /sbin/arping -I bond0 -c 3 -A $vip ;
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, 'orig_master_ssh_port i' > \$orig_master_ssh_port, 'new_master_host s' > \$new_master_host, 'new_master_ip s' > \$new_master_ip, 'new_master_port i' > \$new_master_port, 'new_master_ssh_port' > \$new_master_ssh_port, 'new_master_user' > \$new_master_user, 'new_master_password' > \$new_master_password
);
exit &main();
sub main { $ssh_user defined $ssh_user ? $ssh_user : 'root'; print \n\nIN SCRIPT TEST $ssh_user|$ssh_stop_vip$ssh_user|$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; } }
Mon Apr 816:54:402024- [info] GTID failover mode 1 Mon Apr 816:54:402024- [info] Dead Servers: Mon Apr 816:54:402024- [info] Alive Servers: Mon Apr 816:54:402024- [info] 192.168.0.104(192.168.0.104:3306) Mon Apr 816:54:402024- [info] 192.168.0.103(192.168.0.103:3306) Mon Apr 816:54:402024- [info] 192.168.0.102(192.168.0.102:3306) Mon Apr 816:54:402024- [info] Alive Slaves: Mon Apr 816:54:402024- [info] 192.168.0.103(192.168.0.103:3306) Version 8.0.36 (oldest major version between slaves) log-bin:enabled Mon Apr 816:54:402024- [info] GTID ON Mon Apr 816:54:402024- [info] Replicating from192.168.0.104(192.168.0.104:3306) Mon Apr 816:54:402024- [info] Primary candidate for the new Master (candidate_master isset) Mon Apr 816:54:402024- [info] 192.168.0.102(192.168.0.102:3306) Version 8.0.36 (oldest major version between slaves) log-bin:enabled Mon Apr 816:54:402024- [info] GTID ON Mon Apr 816:54:402024- [info] Replicating from192.168.0.104(192.168.0.104:3306) Mon Apr 816:54:402024- [info] Not candidate for the new Master (no_master isset) Mon Apr 816:54:402024- [info] Current Alive Master: 192.168.0.104(192.168.0.104:3306) Mon Apr 816:54:402024- [info] Checking slave configurations.. Mon Apr 816:54:402024- [info] Checking replication filtering settings.. Mon Apr 816:54:402024- [info] binlog_do_db , binlog_ignore_db Mon Apr 816:54:402024- [info] Replication filtering check ok. Mon Apr 816:54:402024- [info] GTID (with auto-pos) is supported. Skipping all SSH and Node package checking. Mon Apr 816:54:402024- [info] Checking SSH publickey authentication settings on the current master.. Mon Apr 816:54:402024- [info] HealthCheck: SSH to192.168.0.104is reachable. Mon Apr 816:54:402024- [info] 192.168.0.104(192.168.0.104:3306) (current master) --192.168.0.103(192.168.0.103:3306) --192.168.0.102(192.168.0.102:3306)
Mon Apr 816:54:402024- [info] Checking replication health on192.168.0.103.. Mon Apr 816:54:402024- [info] ok. Mon Apr 816:54:402024- [info] Checking replication health on192.168.0.102.. Mon Apr 816:54:402024- [info] ok. Mon Apr 816:54:402024- [info] Checking master_ip_failover_script status: Mon Apr 816:54:402024- [info] /usr/local/bin/master_ip_failover --command status --ssh_user root --orig_master_host 192.168.0.104 --orig_master_ip 192.168.0.104 --orig_master_port 3306
IN SCRIPT TEST root|sudo /sbin/ifconfig eth0:1 down root|sudo /sbin/ifconfig eth0:1192.168.0.111/24
Checking the Status of the script.. OK Mon Apr 816:54:402024- [info] OK. Mon Apr 816:54:402024- [warning] shutdown_script isnot defined. Mon Apr 816:54:402024- [info] Got exit code 0 (Not master dead).