saup007 发表于 2015-08-27 15:33

keepalived 切换的疑问

本帖最后由 saup007 于 2015-08-27 15:33 编辑

A:172.19.1.201
B:172.19.1.202
VIP:172.19.1.249

# /opt/keepalived/sbin/keepalived -v
Keepalived v1.2.19 (08/21,2015)

当停掉A的MySQL,正常切换到B,当把A MySQL启来后,vip依然在B,这个符合逻辑,但把A MySQL启来后,再去停掉B MySQL,VIP却没有飘移到A上,why?

若在B节点重启keepalived,VIP会飘移到A的。


A:

vim keepalived.conf#
! Configuration File for keepalived

global_defs {
   notification_email {
   saup007@qq.com
   }
   notification_email_from root@dbaone
   smtp_server dbaone
   smtp_connect_timeout 30
   router_id MySQL-HA
}

vrrp_script chk_mysql_server {
   #script "/opt/keepalived/script/chk_mysql_server.sh"
   script "killall -0 mysqld"
   interval 30# 检测时间为30s
   weight 21
}

vrrp_instance VI_1 {
    state BACKUP
    interface eth1
    virtual_router_id 59
    priority 100
    advert_int 1
    nopreempt# 非抢占模式,只在优化级高的机器设置,优先级低的不设置
    #mcast_src_ip 172.19.1.201
    authentication {
      auth_type PASS
      auth_pass 1111
    }
    notify_master "/opt/keepalived/script/master.sh"
    notify_backup "/opt/keepalived/script/backup.sh"
    notify_fault"/opt/keepalived/script/fault.sh"
    notify_stop "/opt/keepalived/script/stop.sh"
    track_script {
      chk_mysql_server
    }
    virtual_ipaddress {
      172.19.1.249/24 dev eth1 scope global label eth1:0
    }
}B:

vim keepalived.conf#
! Configuration File for keepalived

global_defs {
   notification_email {
   saup007@qq.com
   }
   notification_email_from root@dbatwo
   smtp_server dbatwo
   smtp_connect_timeout 30
   router_id MySQL-HA
}

vrrp_script chk_mysql_server {
   #script "/opt/keepalived/script/chk_mysql_server.sh"
   script "killall -0 mysqld"
   interval 30# 检测时间为30s
   weight 21
}

vrrp_instance VI_1 {
    state BACKUP
    interface eth1
    virtual_router_id 59
    priority 90
    advert_int 1
    #nopreempt# 非抢占模式,只在优化级高的机器设置,优先级低的不设置
    #mcast_src_ip 172.19.1.202
    authentication {
      auth_type PASS
      auth_pass 1111
    }
    notify_master "/opt/keepalived/script/master.sh"
    notify_backup "/opt/keepalived/script/backup.sh"
    notify_fault"/opt/keepalived/script/fault.sh"
    notify_stop "/opt/keepalived/script/stop.sh"
    track_script {
      chk_mysql_server
    }
    virtual_ipaddress {
      172.19.1.249/24 dev eth1 scope global label eth1:0
    }
}

saup007 发表于 2015-08-27 16:55

本帖最后由 saup007 于 2015-08-27 16:56 编辑

暂时通过shell的方式实现 B->A的飘移VIP ,不知能否通过keepalived本身来实现。

#
! Configuration File for keepalived

global_defs {
   notification_email {
   saup007@qq.com
   }
   notification_email_from root@dbatwo
   smtp_server dbatwo
   smtp_connect_timeout 30
   router_id MySQL-HA
}

vrrp_script chk_mysql_server {
   script "/opt/keepalived/script/chk_mysql_server.sh"
   #script "killall -0 mysqld"
   interval 30# 检测时间为30s
   weight -21
}

vrrp_instance VI_1 {
    state BACKUP
    interface eth1
    virtual_router_id 59
    priority 90
    advert_int 1
    #nopreempt# 非抢占模式,只在优化级高的机器设置,优先级低的不设置
    #mcast_src_ip 172.19.1.202
    authentication {
      auth_type PASS
      auth_pass 1111
    }
    notify_master "/opt/keepalived/script/master.sh"
    notify_backup "/opt/keepalived/script/backup.sh"
    notify_fault"/opt/keepalived/script/fault.sh"
    notify_stop "/opt/keepalived/script/stop.sh"
    track_script {
      chk_mysql_server
    }
    virtual_ipaddress {
      172.19.1.249/24 dev eth1 scope global label eth1:0
    }
}

# cat /opt/keepalived/script/chk_mysql_server.sh
#!/bin/bash
killall -0 mysqld

if [[ $? -eq 0 ]]
then
   if [[ /tmp/keepalived ]]
   then
      rm -rf /tmp/keepalived
      exit 0;
   else
      exit 0;
   fi
else
   if [[ ! -f /tmp/keepalived ]]
   then
      /etc/init.d/keepalived restart
      echo "`date +%Y-%m-%d` keepalived" >> /tmp/keepalived
      exit 1;
   else
      exit 1;
   fi
fi

noshell 发表于 2015-08-28 15:42

刚好最近也在玩这个,也遇到过这个问题。
1、timeout 5 我的参数是这个值
2、在”把A MySQL启来后,再去停掉B MySQL,VIP却没有飘移到A上“。在B的keepalvie 是不是也没停掉?
在控制脚本中加上,当msql 停掉把keepalved 先停掉,并且把VIP去掉。然后再起keepalive. 这样应该就可以飘过去的。

saup007 发表于 2015-08-28 17:50

本帖最后由 saup007 于 2015-08-28 17:50 编辑

回复 3# noshell


    A -> B 是不需要stop keepalive的,只需要优先级就可以完成VIP飘移,但切换回来 B -> A,需要stop或restart keepalvied。
页: [1]
查看完整版本: keepalived 切换的疑问