一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

怎样实现 Linux 服务器网络冗余:配置 Keepalived 故障转移

时间:2026-07-12 08:52:03 编辑:袖梨 来源:一聚教程网

实现Linux服务器网络冗余需用Keepalived通过VRRP协议管理VIP,主备节点同网段、开放VRRP组播、配置一致的virtual_router_id和认证,主节点state MASTER/priority高,备节点BACKUP/priority低,并通过健康检查脚本动态调整优先级触发切换。

实现 Linux 服务器网络冗余,关键在于让服务对外的 IP 地址(VIP)不依赖于单台物理机。Keepalived 通过 VRRP 协议让多台服务器“竞争”持有同一个虚拟 IP,主节点故障时,备节点自动接管——整个过程对客户端透明,无需改 DNS 或客户端配置。

准备基础网络环境

Keepalived 依赖底层网络连通性,必须确保主备节点能互通且无防火墙拦截 VRRP 报文:

  • 主备服务器需在同一二层网络(如相同 VLAN 或物理交换机直连),VRRP 默认使用组播地址 224.0.0.18 通信
  • 关闭或放行防火墙中的 VRRP 协议:在 firewalld 中执行 firewall-cmd --add-protocol=vrrp --permanent && firewall-cmd --reload
  • 确认网卡启用了 multicast 支持(默认开启),可用 ip link show eth0 | grep multicast 验证
  • 避免使用云厂商的“弹性公网 IP”直接绑定到 Keepalived VIP——这类 IP 通常由平台托管,需配合云 API 实现漂移,不能仅靠 VRRP

配置 Keepalived 主备角色

核心是定义 vrrp_instance,主备差异仅体现在 statepriority 上,其余参数必须严格一致:

  • 主节点:设置 state MASTERpriority 值更高(如 100)
  • 备节点:设置 state BACKUPpriority 值更低(如 90),且 virtual_router_id 必须与主节点完全相同(0–255 范围内)
  • interface 指定实际承载流量的网卡(如 eth0),不是 bond 接口名(若用了 bonding,此处填 bond0
  • authentication 推荐用 PASS 类型,密码最多取前 8 字符,主备必须一致

加入健康检查保障真实可用性

仅靠心跳无法判断服务是否真正在工作。必须通过自定义脚本探测业务端口或进程状态,并动态调整优先级:

  • /etc/keepalived/check_http.sh 中写检测逻辑,例如:curl -f http://127.0.0.1:80/health || exit 1
  • 在配置中引用:track_script { chk_http },并定义 vrrp_script chk_http { script "/etc/keepalived/check_http.sh" interval 2 weight -20 }
  • 当检测失败时,脚本返回非零值,Keepalived 自动降低本节点优先级(如减 20),触发主备切换
  • 注意:脚本需有可执行权限(chmod +x),且运行用户需有网络访问能力(默认以 root 运行)

验证与日常运维要点

配置生效后,不要只看 VIP 是否飘过去,要验证完整链路:

  • ip addr show 确认 VIP 出现在主节点网卡上;备节点不应出现该地址
  • 从局域网另一台机器 ping VIP,再 telnet 或 curl 测试业务端口,确认响应来自当前主节点
  • 手动停掉主节点的 keepalived:systemctl stop keepalived,观察备节点日志(journalctl -u keepalived -f)是否打印 Transition to MASTER STATE
  • 生产环境建议启用独立日志:log syslog local2 并在 /etc/rsyslog.conf 中添加 local2.* /var/log/keepalived.log,便于快速定位切换原因

热门栏目