keepalived 实现 mysql 双主高可用

Posted on Posted in mysql
Tips: 本文创建于2015年11月17日,已超过 2 年,内容或图片可能已经失效!

keepalived 实现 mysql 双主高可用

关于[mysql双主互备][1]和[keepalived安装][2],请点击链接

1、master上的keepalived配置

  1. ! Configuration File for keepalived  
  2.   
  3. global_defs {  
  4.    notification_email {  
  5.      acassen@firewall.loc  
  6.      failover@firewall.loc  
  7.      sysadmin@firewall.loc  
  8.    }  
  9.    notification_email_from Alexandre.Cassen@firewall.loc  
  10.    smtp_server 192.168.200.1  
  11.    smtp_connect_timeout 30  
  12.    router_id LVS_DEVEL  
  13. }  
  14.   
  15. vrrp_script check_mysqld {  
  16.     script "/etc/keepalived/mysqlcheck/check_slave.pl 127.0.0.1"  
  17.     interval 2  
  18.     weight 21  
  19. }  
  20.   
  21. vrrp_instance HA_1 {  
  22.     state BACKUP  
  23.     interface eth0  
  24.     virtual_router_id 80  
  25.     priority 100  
  26.     advert_int 2  
  27.     nopreempt  
  28.   
  29.     authentication {  
  30.         auth_type PASS  
  31.         auth_pass 1111  
  32.     }  
  33.     track_script {  
  34.         check_mysqld  
  35.     }  
  36.     virtual_ipaddress {  
  37.         192.168.1.144/24 dev eth0  
  38.     }  
  39. }  

2、slave 上的keepalived 配置

修改priority为90
删掉nopreempt,设置不枪占即可

3、/etc/keepalived/mysqlcheck/check_slave.pl 文件为

  1. #!/usr/bin/perl -w  
  2. use DBI;  
  3. use DBD::mysql;  
  4.   
  5. # CONFIG VARIABLES  
  6. $SBM = 120;  
  7. $db = "ixdba";  
  8. $host = $ARGV[0];  
  9. $port = 3306;  
  10. $user = "root";  
  11. $pw = "abcdefg";  
  12.    
  13. # SQL query  
  14. $query = "show slave status";  
  15.    
  16. $dbh = DBI->connect("DBI:mysql:$db:$host:$port"$user$pw, { RaiseError => 0,PrintError => 0 });   
  17.   
  18. if (!defined($dbh)) {  
  19.     exit 1;  
  20. }   
  21.   
  22. $sqlQuery = $dbh->prepare($query);   
  23. $sqlQuery->execute;  
  24.   
  25. $Slave_IO_Running =  "";   
  26. $Slave_SQL_Running = "";   
  27. $Seconds_Behind_Master = "";   
  28.   
  29. while (my $ref = $sqlQuery->fetchrow_hashref()) {  
  30.     $Slave_IO_Running = $ref->{'Slave_IO_Running'};  
  31.     $Slave_SQL_Running = $ref->{'Slave_SQL_Running'};  
  32.     $Seconds_Behind_Master = $ref->{'Seconds_Behind_Master'};  
  33. }  
  34.   
  35. $sqlQuery->finish;  
  36. $dbh->disconnect();  
  37.   
  38. if ( $Slave_IO_Running eq "No" || $Slave_SQL_Running eq "No" ) {  
  39.     exit 1;  
  40. else {  
  41.     if ( $Seconds_Behind_Master > $SBM ) {  
  42.         exit 1;  
  43.     } else {  
  44.         exit 0;  
  45.     }  
  46. }  

4、测试
直接执行mysql命令即可进入

  1. mysql > mysql -uroot -ppassword -h 192.168.1.144  
  2. mysql > show variables like "%hostname%"  
  3. mysql > show variables like "server_id"  

[1]: http://liuhonghe.me/mysql-backup-each-other.html
[2]: http://liuhonghe.me/keepalive-base-config.html

Leave a Reply

Your email address will not be published. Required fields are marked *

1 × 5 =