MYSQL之MHA实现VIP切换用到脚本

目录(?)[+]

在MHA Manager端配置中,如果实现MHA的vip故障切换需要在配置文件/etc/masterha/app1/app1.cnf 中启用下面三个参数:


master_ip_failover_script= /etc/masterha/app1/master_ip_failover   #master failover时执行
#shutdown_script= /etc/masterha/power_manager
report_script= /etc/masterha/app1/send_report    #master failover时执行
master_ip_online_change_script=/etc/masterha/app1/master_ip_online_change   #master switchover时执行


MHA配置见:http://blog.csdn.net/lichangzai/article/details/50470771


脚本具体内容如下:

master_ip_failover(perl)脚本


[root@host8 app1]# cat master_ip_failover

[plain]  view plain  copy
  1. #!/usr/bin/env perl  
  2. use strict;  
  3. use warnings FATAL =>'all';  
  4.   
  5. use Getopt::Long;  
  6.   
  7. my (  
  8. $command,          $ssh_user,        $orig_master_host, $orig_master_ip,  
  9. $orig_master_port, $new_master_host, $new_master_ip,    $new_master_port  
  10. );  
  11.   
  12. my $vip = '10.1.5.21/24';  # Virtual IP  
  13. my $key = "1";  
  14. my $ssh_start_vip = "/sbin/ifconfig eth0:$key $vip";  
  15. my $ssh_stop_vip = "/sbin/ifconfig eth0:$key down";  
  16. my $exit_code = 0;  
  17.   
  18. GetOptions(  
  19. 'command=s'          => \$command,  
  20. 'ssh_user=s'         => \$ssh_user,  
  21. 'orig_master_host=s' => \$orig_master_host,  
  22. 'orig_master_ip=s'   => \$orig_master_ip,  
  23. 'orig_master_port=i' => \$orig_master_port,  
  24. 'new_master_host=s'  => \$new_master_host,  
  25. 'new_master_ip=s'    => \$new_master_ip,  
  26. 'new_master_port=i'  => \$new_master_port,  
  27. );  
  28.   
  29. exit &main();  
  30.   
  31. sub main {  
  32.   
  33. #print "\n\nIN SCRIPT TEST====$ssh_stop_vip==$ssh_start_vip===\n\n";  
  34.   
  35. if ( $command eq "stop" || $command eq "stopssh" ) {  
  36.   
  37.         # $orig_master_host, $orig_master_ip, $orig_master_port are passed.  
  38.         # If you manage master ip address at global catalog database,  
  39.         # invalidate orig_master_ip here.  
  40.         my $exit_code = 1;  
  41.         eval {  
  42.             print "\n\n\n***************************************************************\n";  
  43.             print "Disabling the VIP - $vip on old master: $orig_master_host\n";  
  44.             print "***************************************************************\n\n\n\n";  
  45. &stop_vip();  
  46.             $exit_code = 0;  
  47.         };  
  48.         if ($@) {  
  49.             warn "Got Error: $@\n";  
  50.             exit $exit_code;  
  51.         }  
  52.         exit $exit_code;  
  53. }  
  54. elsif ( $command eq "start" ) {  
  55.   
  56.         # all arguments are passed.  
  57.         # If you manage master ip address at global catalog database,  
  58.         # activate new_master_ip here.  
  59.         # You can also grant write access (create user, set read_only=0, etc) here.  
  60. my $exit_code = 10;  
  61.         eval {  
  62.             print "\n\n\n***************************************************************\n";  
  63.             print "Enabling the VIP - $vip on new master: $new_master_host \n";  
  64.             print "***************************************************************\n\n\n\n";  
  65. &start_vip();  
  66.             $exit_code = 0;  
  67.         };  
  68.         if ($@) {  
  69.             warn $@;  
  70.             exit $exit_code;  
  71.         }  
  72.         exit $exit_code;  
  73. }  
  74. elsif ( $command eq "status" ) {  
  75.         print "Checking the Status of the script.. OK \n";  
  76.         `ssh $ssh_user\@$orig_master_host \" $ssh_start_vip \"`;  
  77.         exit 0;  
  78. }  
  79. else {  
  80. &usage();  
  81.         exit 1;  
  82. }  
  83. }  
  84.   
  85. # A simple system call that enable the VIP on the new master  
  86. sub start_vip() {  
  87. `ssh $ssh_user\@$new_master_host \" $ssh_start_vip \"`;  
  88. }  
  89. # A simple system call that disable the VIP on the old_master  
  90. sub stop_vip() {  
  91. `ssh $ssh_user\@$orig_master_host \" $ssh_stop_vip \"`;  
  92. }  
  93.   
  94. sub usage {  
  95. print  
  96. "Usage: master_ip_failover –command=start|stop|stopssh|status –orig_master_host=host –orig_master_ip=ip –orig_master_port=po  
  97. rt –new_master_host=host –new_master_ip=ip –new_master_port=port\n";  
  98. }  


master_ip_online_change(perl)脚本


[root@host8 app1]# cat master_ip_online_change

[plain]  view plain  copy
  1. #!/usr/bin/env perl  
  2. use strict;  
  3. use warnings FATAL =>'all';  
  4.   
  5. use Getopt::Long;  
  6.   
  7. my $vip = '10.1.5.21/24';  # Virtual IP  
  8. my $key = "1";  
  9. my $ssh_start_vip = "/sbin/ifconfig eth0:$key $vip";  
  10. my $ssh_stop_vip = "/sbin/ifconfig eth0:$key down";  
  11. my $exit_code = 0;  
  12.   
  13. my (  
  14.   $command,              $orig_master_is_new_slave, $orig_master_host,  
  15.   $orig_master_ip,       $orig_master_port,         $orig_master_user,  
  16.   $orig_master_password, $orig_master_ssh_user,     $new_master_host,  
  17.   $new_master_ip,        $new_master_port,          $new_master_user,  
  18.   $new_master_password,  $new_master_ssh_user,  
  19. );  
  20. GetOptions(  
  21.   'command=s'                => \$command,  
  22.   'orig_master_is_new_slave' => \$orig_master_is_new_slave,  
  23.   'orig_master_host=s'       => \$orig_master_host,  
  24.   'orig_master_ip=s'         => \$orig_master_ip,  
  25.   'orig_master_port=i'       => \$orig_master_port,  
  26.   'orig_master_user=s'       => \$orig_master_user,  
  27.   'orig_master_password=s'   => \$orig_master_password,  
  28.   'orig_master_ssh_user=s'   => \$orig_master_ssh_user,  
  29.   'new_master_host=s'        => \$new_master_host,  
  30.   'new_master_ip=s'          => \$new_master_ip,  
  31.   'new_master_port=i'        => \$new_master_port,  
  32.   'new_master_user=s'        => \$new_master_user,  
  33.   'new_master_password=s'    => \$new_master_password,  
  34.   'new_master_ssh_user=s'    => \$new_master_ssh_user,  
  35. );  
  36.   
  37.   
  38. exit &main();  
  39.   
  40. sub main {  
  41.   
  42. #print "\n\nIN SCRIPT TEST====$ssh_stop_vip==$ssh_start_vip===\n\n";  
  43.   
  44. if ( $command eq "stop" || $command eq "stopssh" ) {  
  45.   
  46.         # $orig_master_host, $orig_master_ip, $orig_master_port are passed.  
  47.         # If you manage master ip address at global catalog database,  
  48.         # invalidate orig_master_ip here.  
  49.         my $exit_code = 1;  
  50.         eval {  
  51.             print "\n\n\n***************************************************************\n";  
  52.             print "Disabling the VIP - $vip on old master: $orig_master_host\n";  <li
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值