nmcli本身不支持VIP漂移,仅能配置secondary IP等底层网络参数;VIP漂移需依赖Keepalived等高可用软件实现VRRP协议交互与自动切换。

nmcli 本身不直接支持“IP地址借用”或 VIP 漂移逻辑,它只是配置和管理本地网卡的 IP 地址与连接状态。真正的 VIP(虚拟 IP)漂移依赖于高可用软件(如 Keepalived 或 Pacemaker/Corosync),而 nmcli 可以作为底层网络配置的辅助工具——比如为 VIP 预先添加 secondary IP、启用/禁用接口、或配合脚本动态调整地址。
理解 VIP 漂移的本质
VIP 不是“借用”,而是由高可用服务在主备节点间动态绑定/解绑到物理网卡上。典型流程是:
- 主节点运行 Keepalived,通过 VRRP 协议宣告自己拥有 VIP(如 192.168.1.100)
- VIP 以 secondary 地址形式添加到主节点网卡(如 enp0s3)上,不干扰原有 primary 地址
- 当主节点故障,备节点接管 VRRP master 角色,并立即将同一 VIP 添加到自身网卡
- 整个过程对客户端透明,流量自动切到新主机
用 nmcli 配置 VIP 所需的底层网络能力
Keepalived 启动前,需确保系统允许非 owner 进程绑定 VIP(即禁用 ARP 响应限制),并让网卡能承载多个 IP。nmcli 可完成以下准备操作:
- 为网卡添加 secondary IPv4 地址(即 VIP):
nmcli connection modify enp0s3 +ipv4.addresses 192.168.1.100/24
注意:+号表示追加,不是覆盖;该地址默认为 secondary,不会影响 primary 路由 - 关闭该连接的 DHCP 自动获取,设为 manual 模式(避免冲突):
nmcli connection modify enp0s3 ipv4.method manual - 允许网卡响应非本机 primary 地址的 ARP 请求(关键):
sysctl -w net.ipv4.conf.enp0s3.arp_ignore=0sysctl -w net.ipv4.conf.enp0s3.arp_announce=2
建议写入 /etc/sysctl.conf 持久化 - 确认 NetworkManager 不会覆盖 Keepalived 的动态地址操作(推荐在 Keepalived 配置中设置
vrrp_skip_check_adv_addr并禁用vrrp_strict)
Keepalived 配置中如何联动 nmcli 状态
虽然 VIP 主要由 Keepalived 管理,但你可以在其 notify 脚本中调用 nmcli 实现协同动作。例如:
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
- 在
notify_master脚本中,用 nmcli 确保连接已激活:nmcli connection up enp0s3 2>/dev/null || true - 在
notify_fault脚本中,可选择性删除 secondary 地址(非必须,Keepalived 退出时通常自动清理):nmcli connection modify enp0s3 -ipv4.addresses 192.168.1.100/24 - 所有 nmcli 修改需配合
nmcli connection reload && nmcli connection down enp0s3 && nmcli connection up enp0s3才实时生效(慎用,可能中断业务)
为什么不直接用 nmcli 实现漂移?
nmcli 是静态连接管理器,不具备以下能力:
- 无法监听网络健康状态或进程存活情况
- 没有内置的 VRRP 协议栈,不能发送/解析 VRRP 报文
- 不支持抢占、优先级选举、通告间隔等高可用核心机制
- 单独执行
nmcli connection modify ... up无法保证跨节点原子性,也无法防止脑裂
所以,nmcli 是“配得准”,Keepalived 是“切得稳”。二者分工明确:nmcli 做好网络就绪,Keepalived 负责智能漂移。










