虚拟IP(VIP)是Keepalived通过VRRP协议动态绑定并漂移的逻辑地址,用于屏蔽后端节点变更,实现客户端无感故障切换;它从私有网段选取、不依赖DHCP或物理网卡,通过ARP抑制与回环绑定确保稳定接管,且必须避免与物理IP冲突。

虚拟 IP(VIP)在 Nginx 集群中不是物理网卡固有的地址,而是由高可用软件(如 Keepalived)动态绑定、在主备节点间漂移的逻辑地址。它的核心作用是屏蔽后端真实节点的变更,让客户端始终通过同一个 IP 访问服务,实现无感故障切换。
虚拟 IP 的来源与分配方式
VIP 是一个在局域网内可自由使用的私有 IP 地址(如 192.168.136.200),通常从内网预留段(10.0.0.0/8、172.16.0.0/12、192.168.0.0/16)中选取。它不绑定在任何物理设备出厂配置中,也不经 DHCP 分配,而是由 Keepalived 依据 VRRP 协议,在主节点上通过内核接口(如 ip addr add 或 ifconfig eth0:1)临时添加到某块网卡的别名接口上。
- 该 IP 不需要在交换机或路由器上静态路由宣告,仅需保证同网段二层可达
- 不能与现有物理 IP 冲突,也不能被其他服务(如另一套 Keepalived 实例)重复占用
- 对外暴露时,客户端只认这个 VIP,完全不知道背后是哪台 Nginx 在响应
绑定过程依赖的内核机制
VIP 能稳定“挂”在主节点上,靠的是 Linux 内核对 ARP 和路由表的精细控制:
-
ARP 抑制:在 RealServer(即 Nginx 后端节点)上设置
arp_ignore=1和arp_announce=2,防止它们响应针对 VIP 的 ARP 请求,避免多节点同时应答造成网络混乱 -
回环接口绑定:将 VIP 绑定到
lo:1(而非物理网卡),配合route add -host $VIP dev lo:1,确保本机发往 VIP 的流量不走外部网络,直接由本地协议栈处理 - VRRP 状态同步:Keepalived 主节点周期性发送 VRRP 广播包;备用节点监听失败超过阈值(如 3 秒)后触发抢占,执行相同绑定动作并接管 VIP
客户端如何正确访问 VIP
客户端无需特殊配置,只要能路由到达 VIP 所在子网即可。常见场景包括:
- 同局域网内:直接 ping 或 curl VIP,无需额外设置
- 跨子网访问:上游路由器需具备指向 VIP 所在网段的静态路由,或启用代理 ARP
- 域名解析:在 DNS 中将业务域名(如
api.example.com)A 记录指向 VIP;或开发/测试环境在/etc/hosts(Linux/macOS)或C:\Windows\System32\drivers\etc\hosts(Windows)中手动映射
为什么不能直接用物理 IP 做高可用
若客户端直连某台 Nginx 的物理 IP(如 192.168.136.101),一旦该节点宕机,客户端连接立即中断,且无法自动跳转——DNS 缓存、TCP 连接、客户端重试逻辑均不感知后端变化。而 VIP 是一个“服务入口”的抽象,其归属由 Keepalived 动态维护,切换过程对上层透明,真正实现了故障转移的语义闭环。



















