본문 바로가기

스크립트

MHA master_ip_failover 스크립트 수정

반응형

MHA master_ip_failover 스크립트 수정

vim master_ip_failover
#!/usr/bin/env perl

use strict;
use warnings;
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, $new_master_user,
    $new_master_password
);

# VIP와 관련된 변수들 초기화
my $vip = '192.168.56.200/24';
my $key = "1";
my $if  = 'enp0s8';
my $ssh_start_vip = "sudo ifconfig $if:$key $vip";
my $ssh_stop_vip = "sudo ifconfig $if:$key down";
my $ssh_bcast_arp= "sudo arping -I $if -c 3 -A 192.168.56.200";

# 명령줄 옵션을 파싱하여 변수에 저장
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,
);

# main 함수 실행 및 결과 반환
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 the 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 {
    `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";
}

 

728x90
반응형