目录
🚀 Keepalived 高可用实战:VIP 是如何在内网“生效”的?
▶️ 主节点配置 /etc/keepalived/keepalived.conf
✅ 答案:Keepalived 会主动发送 ARP 通告包(gratuitous ARP)
🚀 Keepalived 高可用实战:VIP 是如何在内网“生效”的?
本文将带你从零配置 Keepalived 实现主备切换,并深入剖析虚拟 IP(VIP)为何能在局域网内被其他机器访问,而无需任何交换机或路由器手动配置。
🧩 一、什么是 Keepalived?
Keepalived 是一款轻量级高可用(HA)工具,常用于实现主备冗余、高可用 IP(VIP)漂移。它通过内置的 VRRP(Virtual Router Redundancy Protocol)协议在多台机器之间协调一个虚拟 IP,保障服务始终在线。
典型应用:
-
高可用 Nginx 网关
-
高可用 Redis、MySQL 主备部署
-
Kubernetes 节点 VIP 绑定
🛠 二、主备架构配置案例
▶️ 环境设置
角色 | 主机名 | IP 地址 | VIP(虚拟IP) |
---|---|---|---|
主 | node1 | 192.168.1.101 | 192.168.1.100 |
备 | node2 | 192.168.1.102 | 192.168.1.100 |
VIP 会在主节点上绑定,如果主节点宕机,VIP 会自动“漂移”到备节点。
▶️ 安装 Keepalived
# CentOS/RHEL
sudo yum install -y keepalived
# Ubuntu/Debian
sudo apt-get install -y keepalived
▶️ 主节点配置 /etc/keepalived/keepalived.conf
vrrp_instance VI_1 {
state MASTER
interface eth0 # 当前网卡名
virtual_router_id 51 # VRRP 实例 ID,主备一致
priority 100 # 优先级高表示为主
advert_int 1 # 心跳间隔(秒)
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
192.168.1.100 # 这里是 VIP
}
}
▶️ 备节点配置
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
192.168.1.100
}
}
▶️ 启动服务
systemctl enable keepalived
systemctl start keepalived
🌐 三、VIP 是如何“被客户端看到”的?
❓ 疑问一:客户端如何访问 192.168.1.100?
假设你的客户端是 192.168.1.200,它为什么可以访问 192.168.1.100?
✅ 答案:靠的是 ARP 协议!
-
局域网中,当客户端访问某个 IP(如 192.168.1.100)时,系统会先发起 ARP 请求:
谁拥有 192.168.1.100?请告诉我你的 MAC 地址。
-
当前持有 VIP 的主节点会回应这个请求,告诉客户端自己的 MAC 地址。
-
客户端获得 MAC 后,直接通过二层以太网通信。
❓ 疑问二:VIP 没有物理网卡,怎么被“注册进网络”的?
✅ 答案:Keepalived 会主动发送 ARP 通告包(gratuitous ARP)
-
当 Keepalived 在主节点上绑定 VIP 时,会调用系统命令将 VIP 加入网卡:
ip addr add 192.168.1.100 dev eth0
-
然后主动向局域网广播 ARP 通告:
广播:192.168.1.100 的 MAC 是 XX:XX:XX:XX:XX:XX
-
所有网关、交换机、其他主机都会更新它们的 ARP 缓存,从而知道 VIP 应该转发到这台主机。
❓ 疑问三:主挂了怎么办?VIP 自动切换吗?
✅ 答案:是的!这是 Keepalived 的核心能力。
-
主节点宕机后,备节点发现心跳中断,抢占 VIP。
-
抢占成功后,它也会发出 ARP 通告,告诉全网:“现在 192.168.1.100 在我这里!”
客户端几秒钟内即可重新连接成功,业务不中断。
🔍 四、验证 VIP 是否可达
-
在主节点查看 VIP 是否绑定:
ip addr | grep 192.168.1.100
-
在客户端(192.168.1.200)查看 ARP 表:
arp -a | grep 192.168.1.100
你将看到一条绑定了真实 MAC 的记录。
-
停掉主节点 Keepalived:
systemctl stop keepalived
-
几秒后在备节点执行:
ip addr | grep 192.168.1.100
VIP 自动漂移成功。
📌 五、总结:VIP 是如何无感接管服务访问的?
项目 | 说明 |
---|---|
VIP 漂移原理 | VRRP + ARP 通告 |
客户端访问方式 | 局域网 ARP 获取 VIP 所属 MAC |
主备切换机制 | 主挂后,备节点抢占 VIP,并发 ARP 通知 |
网络设备是否需配置 | 不需要!完全基于 Linux + ARP 工作 |
跨网段部署 | 需额外方案,如 LVS DR/BGP/arping(不在本文范围,可另开专题讲解) |
📚 延伸阅读
-
Keepalived + HAProxy 高可用
-
使用健康检查脚本防止“假活着”节点接管
-
跨三层部署 VIP 的高级方案(arping + arptables)