搭建MySQL高可用集群时,很多朋友在配置VIP(虚拟IP)时,经常会遇到一些困惑。今天这篇文章,就用最通俗的语言,一次性讲清楚!
具体来说,大家在使用MHA、Keepalived或Pacemaker等方案配置VIP时,通常会纠结一个问题:
我的MySQL主机IP是192.168.11.101/24,现在想添加一个VIP 192.168.11.100,那么这个VIP应该写成192.168.11.100/24还是192.168.11.100/32呢?而且为什么VIP漂移到新主机后,客户端会连接不上?是不是有缓存?如果不执行arping命令的话,要等多久才能生效?别急,这篇文章会用最通俗的语言,一次性讲清楚!

一、 /24 和 /32 到底有什么区别?
先说结论:VIP建议配置为/32,也就是192.168.11.100/32。
1. 什么是/24和/32?
这是子网掩码的简写方式(也叫CIDR表示法):
/24表示子网掩码是255.255.255.0,意味着这个网段里有256个IP(192.168.11.0 ~ 192.168.11.255)。/32表示子网掩码是255.255.255.255,只代表这一个IP地址本身,不包含其他 IP。2. 为什么VIP建议用/32?
想象一下:你的真实网卡IP是192.168.11.101/24,它已经“宣称”自己属于192.168.11.0/24这个网段。
如果你再给同一个网卡加一个192.168.11.100/24,系统会认为:“哦,我又多了一个网段!”——这可能导致路由混乱,甚至影响网络通信。
而如果你加的是192.168.11.100/32,系统就知道:“这只是个单独的IP,不用管路由,直接绑在我身上就行。”
所以,VIP本质上是一个“附属地址”,不是独立网段,用/32最安全、最规范。
TIPS:几乎所有高可用方案(如Keepalived最新文档)都推荐VIP使用 /32。
二、VIP 漂移后,为什么客户端连不上?是缓存吗?
是的!问题就出在 ARP 缓存上。
1. 什么是 ARP?
ARP(地址解析协议)是把IP地址转换成MAC地址的协议。比如:你想访问192.168.11.100,但交换机和你的电脑需要知道这个IP对应哪台机器的物理网卡(MAC 地址)。
2. 举个栗子
初始状态VIP 192.168.11.100在服务器A上,MAC地址是AA:AA:AA:AA所有客户端和交换机的ARP表里都记着:192.168.11.100 → AA:AA:AA:AA现在发生故障,VIP漂移到服务器B(MAC地址BB:BB:BB:BB)但客户端和交换机还不知道!它们还在往AA:AA:AA:AA发包,结果当然连不上;这就是ARP缓存未更新导致的问题!
三、不执行arping,VIP要多久才能生效?
如果数据库发生高可用切换,VIP漂移到新主库的服务器上后,经常会出现不能立即访问通,而是需要手动执行arping进行广播后方能访问,例如:
arping -U -c 3 -I eth0 192.168.11.100
或者访问网关:
arping -U -c 3 -I eth0 192.168.11.1
那么如果不执行arping,VIP 要多久才能生效呢?这取决于ARP缓存的过期时间,不同设备不一样,例如:
所以,如果不主动刷新 ARP,可能要等几十秒甚至几分钟,业务就会中断!
四、总结
根据以往的经验,我总结了3条黄金法则供大家参考:
VIP 地址要配成 /32,比如192.168.11.100/32,建议不要用 /24!VIP 漂移后连不上?99% 是ARP缓存问题,不是MySQL没启动!手动切换VIP后,务必执行arping,否则可能要等几十秒甚至几分钟才能恢复!