
很多同学在搭建MySQL高可用(比如 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 表示法):
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(Address Resolution Protocol)是把IP地址转换成MAC地址的协议。比如:你想访问192.168.11.100,但交换机和你的电脑需要知道这个IP对应哪台机器的物理网卡(MAC 地址)。
2. 举个栗子
但客户端和交换机还不知道!它们还在往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 缓存默认超时时间 |
|---|---|
Linux 客户端 | 通常30~60秒 |
Windows | 约15~20分钟(但首次失败后可能更快重试) |
交换机/路由器 | 一般5~30分钟 |
所以,如果不主动刷新 ARP,可能要等几十秒甚至几分钟,业务就会中断!
四、总结
根据以往的经验,我总结了3条黄金法则供大家参考:
在工作中你有总结哪些运维经验,欢迎留言区留言交流。
关注微信公众号「数据库干货铺」,获取更多数据库运维干货。