keepalived mysql服务停止后,VIP ping不通
如题,使用keepalived + MySQL主主解决单点故障,但是当其中一台数据库服务器服务停止后,使用VIP就连接不上数据库,ping也不同;网关ARP缓存没有刷新;当我在另外一台未停止的数据库服务器执行
arping -I eth0 -c 3 -s 10.1.45.123 10.1.45.126 &>/dev/null
后,就可以通过客户端使用VIP连接数据库,也能ping通;在网上找了很多方法,老是不行,求大神解救。下面是我服务器的配置信息
mysql1:10.1.45.120
mysql2:10.1.45.121
Vip:10.1.45.123
gateway:10.1.45.126
mysql1:keepalived.conf
#!Configuration File forkeepalived global_defs { notification_email { test@test.com } notification_email_from test@test.com smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id MYSQL_HA } vrrp_sync_group VG1 { group { VI_1 } notify_master /etc/keepalived/master.sh } vrrp_instance VI_1 { state master interface eth0 virtual_router_id 110 priority 100 advert_int 1 nopreempt authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 10.1.45.123 } } virtual_server 10.1.45.123 3306 { delay_loop 2 nat_mask 255.255.255.128 persistence_timeout 50 protocol TCP real_server 10.1.45.120 3306 { weight 3 notify_down /usr/local/keepalived/mysql.sh TCP_CHECK { connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } }mysql2 keepalived.conf
#!Configuration File forkeepalived global_defs { notification_email { test@test.com } notification_email_from test@test.com smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id MYSQL_HA } vrrp_sync_group VG1 { group { VI_1 } notify_master /etc/keepalived/master.sh } vrrp_instance VI_1 { state backup interface eth0 virtual_router_id 110 priority 99 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 10.1.45.123 } } virtual_server 10.1.45.123 3306 { delay_loop 2 nat_mask 255.255.255.128 persistence_timeout 50 protocol TCP real_server 10.1.45.121 3306 { weight 3 notify_down /usr/local/keepalived/mysql.sh TCP_CHECK { connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } }
mysql.sh
#!/bin/bash pkill keepalived
#!/bin/bash VIP=10.1.45.123 GATEWAY=10.1.45.126 /sbin/arping -I eth0 -c 5 -s $VIP $GATEWAY &>/dev/null
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
执行了也木用啊,在主down后,arping需要在备上执行才能达到刷新网关ARP缓存的目的
检查keepalive的日志, 确认notify_master 是否有被执行和执行成功。若不成功,进行调试,查找原因~
似乎是由于网关的ARP缓存造成的问题。我现在的解决办法是在主服务器的mysql down后在备用服务器上执行arping命令。从而刷新网关的ARP缓存。
@x木子 正常是你的MySQL服务停了,就直接结束掉keepalived就好了。网关apr缓存,可能吧,毕竟硬件的软配置都不太一样。
正常情况是开启一台就可以ping通VIP地址,你可以分别关闭其中一台ping下VIP,检查哪个配置不对