主节点持有vip,是说keepalived软件 给主节点对应网口 添加了这个ip吗,类型ip addr add ip_address eth0,这样的命令
是的,你的理解完全正确!
在基于 Keepalived + VRRP 的高可用架构中,所谓的"主节点持有 VIP",其底层实现机制就是:
Keepalived 软件通过调用 Linux 系统命令(如
ip addr add
)将虚拟 IP(VIP)动态绑定到主节点的指定网络接口上。
✅ 一、详细解释:Keepalived 如何"持有" VIP
1. VIP 不是静态配置的 IP
- VIP(如
192.168.1.100
)不会 像普通 IP 那样写在/etc/network/interfaces
或NetworkManager
配置中。 - 它是由 Keepalived 进程在运行时动态添加和删除的。
2. Keepalived 内部调用 ip
命令
当主节点选举成功后,Keepalived 会执行类似以下的系统调用:
csharp
bash
深色版本
ip addr add 192.168.1.100/32 dev eth0
或者更完整的配置(带 label):
csharp
bash
深色版本
ip addr add 192.168.1.100/24 dev eth0 label eth0:0
🔍 这正是你在
keepalived.conf
中配置的:
cssconf 深色版本 virtual_ipaddress { 192.168.1.100/24 dev eth0 label eth0:0 }
3. 验证方法:在主节点上执行
sql
bash
深色版本
ip addr show eth0
你会看到输出中包含:
sql
深色版本
inet 192.168.1.10/24 ...
inet 192.168.1.100/24 scope global secondary eth0:0
这说明 VIP 已成功添加到网卡。
✅ 二、备节点的状态
- 备节点 不会 执行
ip addr add
- 它只是监听 VRRP 广播,等待主节点失效
- 一旦主节点宕机或失联,备节点会自己执行
ip addr add
,将 VIP 添加到自己的网卡上
✅ 三、切换过程中的关键动作
阶段 | 主节点动作 | 备节点动作 |
---|---|---|
正常运行 | ip addr add VIP 周期性发送 VRRP 广播 |
监听 VRRP 广播 不添加 VIP |
主节点故障 | Keepalived 停止 → VRRP 广播消失 | 检测到超时 → 执行 ip addr add VIP 发送 GARP 刷新 ARP 表 |
切换完成 | VIP 从主节点消失 | 备节点成为新主,处理流量 |
✅ 四、Keepalived 是如何实现的?(源码级理解)
Keepalived 底层使用 Linux netlink socket 与内核通信,而不是直接调用 system("ip addr add ...")
。
- 它通过 RTM_NEWADDR 消息向内核发送请求,添加 IP 地址
- 这比直接执行 shell 命令更高效、更安全
- 但效果等价于你手动执行
ip addr add
✅ 五、手动模拟:你可以自己测试
1. 停止 Keepalived
arduino
bash
深色版本
systemctl stop keepalived
2. 手动添加 VIP
csharp
bash
深色版本
ip addr add 192.168.1.100/24 dev eth0 label eth0:0
3. 此时该节点就能响应 VIP 的请求
- 客户端访问
192.168.1.100
,流量会到达此节点 - 但没有 VRRP 协商,存在脑裂风险
4. 启动 Keepalived 后,它会接管管理
sql
bash
深色版本
systemctl start keepalived
✅ 六、面试回答建议
面试官问:"主节点'持有'VIP,是怎么实现的?"
你可以这样答:
"是的,所谓'持有 VIP',本质上是 Keepalived 软件在主节点上通过系统调用,执行类似
ip addr add 192.168.1.100/24 dev eth0
的命令,将虚拟 IP 动态绑定到网卡上。备节点不会添加这个 IP。当主节点故障时,备节点检测到 VRRP 心跳消失,就会自己执行同样的命令,把 VIP '漂移'到本地,从而实现故障切换。这个过程是自动的,对客户端透明。"
✅ 七、延伸知识:为什么需要 label
?
css
conf
深色版本
label eth0:0
-
label
是为了逻辑区分同一个网卡上的多个 IP -
传统方式使用
eth0:0
、eth0:1
等别名(虽然现代 Linux 已不强制) -
主要用于:
ifconfig
显示更清晰- 某些旧脚本或监控工具识别方便
- 语义清晰,表明这是"附加 IP"
⚠️ 注意:
label
不影响功能,ip addr
不显示 label,但ifconfig
会。
✅ 总结
问题 | 回答 |
---|---|
主节点持有 VIP 是什么意思? | Keepalived 将 VIP 动态添加到主节点网卡 |
是不是 ip addr add ? |
✅ 是的,等价于执行该命令 |
备节点有没有这个 IP? | ❌ 没有,只有主节点有 |
切换时发生了什么? | 备节点执行 ip addr add ,主节点(若存活)执行 ip addr del |
是否需要手动配置? | ❌ 不需要,Keepalived 自动管理 |
你的直觉非常准确------Keepalived 就是通过 ip addr add/del
这类机制来管理 VIP 的,这是理解高可用网络的核心基础。