본문 바로가기

스크립트

MHA master_ip_online_change 스크립트 수정

반응형

MHA master_ip_online_change 스크립트 수정

vim master_ip_online_change
#!/usr/bin/env perl

use strict;
use warnings FATAL => 'all';

use Getopt::Long;

# 명령줄 옵션을 저장할 변수들 선언
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,
);

# 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,
  '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,
);

# 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 "\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" ) {
    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();
      $exit_code = 0;
    };
    if ($@) {
      warn "Got Error: $@\n";
      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;
  }
}

sub start_vip() {
  `ssh $new_master_ssh_user\@$new_master_host \" $ssh_start_vip \"`;
}

sub stop_vip() {
  `ssh $orig_master_ssh_user\@$orig_master_host \" $ssh_stop_vip \"`;
}

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;
}

 

728x90
반응형