2
回答
keepalived mysql服务停止后,VIP ping不通
注册华为云得mate10,2.9折抢先购!>>>   
如题,使用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



master.sh
#!/bin/bash
VIP=10.1.45.123
GATEWAY=10.1.45.126
/sbin/arping -I eth0 -c 5 -s $VIP $GATEWAY &>/dev/null




举报
x木子
发帖于2年前 2回/1K+阅
共有2个答案 最后回答: 2年前
正常情况是开启一台就可以ping通VIP地址,你可以分别关闭其中一台ping下VIP,检查哪个配置不对
--- 共有 2 条评论 ---
xper@x木子 正常是你的MySQL服务停了,就直接结束掉keepalived就好了。网关apr缓存,可能吧,毕竟硬件的软配置都不太一样。 2年前 回复
x木子似乎是由于网关的ARP缓存造成的问题。我现在的解决办法是在主服务器的mysql down后在备用服务器上执行arping命令。从而刷新网关的ARP缓存。 2年前 回复
检查keepalive的日志, 确认notify_master 是否有被执行和执行成功。若不成功,进行调试,查找原因~
--- 共有 1 条评论 ---
x木子执行了也木用啊,在主down后,arping需要在备上执行才能达到刷新网关ARP缓存的目的 2年前 回复
顶部