免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3823 | 回复: 3
打印 上一主题 下一主题

keepalived 切换的疑问 [复制链接]

论坛徽章:
1
IT运维版块每日发帖之星
日期:2015-08-30 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-08-27 15:33 |只看该作者 |倒序浏览
本帖最后由 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
  1. #
  2. ! Configuration File for keepalived

  3. global_defs {
  4.    notification_email {
  5.      saup007@qq.com
  6.    }
  7.    notification_email_from root@dbaone
  8.    smtp_server dbaone
  9.    smtp_connect_timeout 30
  10.    router_id MySQL-HA
  11. }

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

  18. vrrp_instance VI_1 {
  19.     state BACKUP
  20.     interface eth1
  21.     virtual_router_id 59
  22.     priority 100
  23.     advert_int 1
  24.     nopreempt  # 非抢占模式,只在优化级高的机器设置,优先级低的不设置
  25.     #mcast_src_ip 172.19.1.201
  26.     authentication {
  27.         auth_type PASS
  28.         auth_pass 1111
  29.     }
  30.     notify_master "/opt/keepalived/script/master.sh"
  31.     notify_backup "/opt/keepalived/script/backup.sh"
  32.     notify_fault  "/opt/keepalived/script/fault.sh"
  33.     notify_stop "/opt/keepalived/script/stop.sh"
  34.     track_script {
  35.         chk_mysql_server
  36.     }
  37.     virtual_ipaddress {
  38.         172.19.1.249/24 dev eth1 scope global label eth1:0
  39.     }
  40. }
复制代码
B:

vim keepalived.conf
  1. #
  2. ! Configuration File for keepalived

  3. global_defs {
  4.    notification_email {
  5.      saup007@qq.com
  6.    }
  7.    notification_email_from root@dbatwo
  8.    smtp_server dbatwo
  9.    smtp_connect_timeout 30
  10.    router_id MySQL-HA
  11. }

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

  18. vrrp_instance VI_1 {
  19.     state BACKUP
  20.     interface eth1
  21.     virtual_router_id 59
  22.     priority 90
  23.     advert_int 1
  24.     #nopreempt  # 非抢占模式,只在优化级高的机器设置,优先级低的不设置
  25.     #mcast_src_ip 172.19.1.202
  26.     authentication {
  27.         auth_type PASS
  28.         auth_pass 1111
  29.     }
  30.     notify_master "/opt/keepalived/script/master.sh"
  31.     notify_backup "/opt/keepalived/script/backup.sh"
  32.     notify_fault  "/opt/keepalived/script/fault.sh"
  33.     notify_stop "/opt/keepalived/script/stop.sh"
  34.     track_script {
  35.         chk_mysql_server
  36.     }
  37.     virtual_ipaddress {
  38.         172.19.1.249/24 dev eth1 scope global label eth1:0
  39.     }
  40. }
复制代码

论坛徽章:
1
IT运维版块每日发帖之星
日期:2015-08-30 06:20:00
2 [报告]
发表于 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

论坛徽章:
7
卯兔
日期:2013-10-24 22:27:29天秤座
日期:2013-11-06 17:30:47午马
日期:2015-01-16 10:16:252015年亚洲杯之乌兹别克斯坦
日期:2015-04-02 14:49:302015年亚洲杯之韩国
日期:2015-04-22 14:28:03青铜圣斗士
日期:2015-11-21 00:06:2915-16赛季CBA联赛之天津
日期:2016-02-29 16:26:43
3 [报告]
发表于 2015-08-28 15:42 |只看该作者
刚好最近也在玩这个,也遇到过这个问题。
1、timeout 5 我的参数是这个值
2、在”把A MySQL启来后,再去停掉B MySQL,VIP却没有飘移到A上“。在B的keepalvie 是不是也没停掉?
在控制脚本中加上,当msql 停掉把keepalved 先停掉,并且把VIP去掉。然后再起keepalive. 这样应该就可以飘过去的。

论坛徽章:
1
IT运维版块每日发帖之星
日期:2015-08-30 06:20:00
4 [报告]
发表于 2015-08-28 17:50 |只看该作者
本帖最后由 saup007 于 2015-08-28 17:50 编辑

回复 3# noshell


    A -> B 是不需要stop keepalive的,只需要优先级就可以完成VIP飘移,但切换回来 B -> A,需要stop或restart keepalvied。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP