12.1.6 高可用拓扑模式与设计取舍

高可用拓扑模式与设计取舍#

本节对Keepalived常见高可用拓扑进行对比,并给出可执行配置示例、关键命令、排错思路与练习。

原理草图(拓扑对比)

文章图片

1) 单活主备:简单、成本低#

适用:业务可接受短暂切换,优先简化运维。
配置示例(两台节点,VIP=10.0.0.10)

/etc/keepalived/keepalived.conf(Master)

vrrp_instance VI_1 {
  state MASTER
  interface eth0
  virtual_router_id 51
  priority 150
  advert_int 1
  authentication {
    auth_type PASS
    auth_pass 123456
  }
  virtual_ipaddress {
    10.0.0.10/24 dev eth0
  }
}

/etc/keepalived/keepalived.conf(Backup)

vrrp_instance VI_1 {
  state BACKUP
  interface eth0
  virtual_router_id 51
  priority 100
  advert_int 1
  authentication {
    auth_type PASS
    auth_pass 123456
  }
  virtual_ipaddress {
    10.0.0.10/24 dev eth0
  }
}

关键命令与预期效果

# 安装并启动(以CentOS/RHEL为例)
yum -y install keepalived
systemctl enable --now keepalived

# 查看VIP是否在Master上
ip addr show dev eth0 | grep 10.0.0.10

# 预期:Master显示VIP,Backup不显示

2) 双活主备:资源利用高,复杂度更高#

适用:上游或应用可访问多VIP,且有会话保持能力。
示例:两台节点分别主各自VIP

NodeA(主VIP1)

vrrp_instance VI_1 {
  state MASTER
  interface eth0
  virtual_router_id 61
  priority 150
  virtual_ipaddress { 10.0.0.10/24 dev eth0 }
}
vrrp_instance VI_2 {
  state BACKUP
  interface eth0
  virtual_router_id 62
  priority 100
  virtual_ipaddress { 10.0.0.11/24 dev eth0 }
}

NodeB(主VIP2)

vrrp_instance VI_1 {
  state BACKUP
  interface eth0
  virtual_router_id 61
  priority 100
  virtual_ipaddress { 10.0.0.10/24 dev eth0 }
}
vrrp_instance VI_2 {
  state MASTER
  interface eth0
  virtual_router_id 62
  priority 150
  virtual_ipaddress { 10.0.0.11/24 dev eth0 }
}

流量验证

# 两台都应有一个VIP
ip addr show dev eth0 | egrep '10.0.0.10|10.0.0.11'

3) 三节点仲裁:降低脑裂风险#

适用:跨机房或链路不稳定场景。
思路示例:通过第三节点做外部检测,结合track_script调整优先级。
/etc/keepalived/keepalived.conf(主备同配)

vrrp_script chk_quorum {
  script "/usr/local/bin/check_quorum.sh"
  interval 2
  weight -50
}
vrrp_instance VI_1 {
  state MASTER
  interface eth0
  virtual_router_id 71
  priority 150
  track_script { chk_quorum }
  virtual_ipaddress { 10.0.0.10/24 dev eth0 }
}

/usr/local/bin/check_quorum.sh

#!/bin/bash
# 能ping通仲裁节点则返回0,反之返回1
ping -c1 -W1 10.0.0.99 >/dev/null 2>&1

预期效果:仲裁不可达时,主节点优先级下降,触发备节点接管。

4) 多VIP分组:业务隔离与故障域缩小#

适用:不同业务域、不同切换策略。
示例:分组与一致性控制

vrrp_instance VI_APP1 {
  state MASTER
  interface eth0
  virtual_router_id 81
  priority 150
  virtual_ipaddress { 10.0.1.10/24 dev eth0 }
}
vrrp_instance VI_APP2 {
  state MASTER
  interface eth0
  virtual_router_id 82
  priority 150
  virtual_ipaddress { 10.0.2.10/24 dev eth0 }
}

设计取舍要点(命令与指标)#

  • 切换时延advert_int、脚本检查频率决定切换速度。
  • 抖动控制:禁抢占或延迟抢占,避免频繁切换。
  • 命令检查
# 查看keepalived状态与日志
systemctl status keepalived
journalctl -u keepalived -f

# 查看VRRP组与VIP
ip -4 addr show dev eth0

排错清单(典型问题)#

  1. VIP不漂移:检查virtual_router_id是否一致、auth_pass是否一致、组播是否被交换机/安全组拦截。
  2. 频繁切换:检查track_script是否返回非0、链路抖动、CPU过高导致心跳延迟。
  3. 双活冲突:检查是否意外开启抢占,或优先级设置错误。

常用排错命令解释

# 抓VRRP报文(确认心跳与选举)
tcpdump -ni eth0 vrrp

# 查看keepalived配置语法
keepalived -t -f /etc/keepalived/keepalived.conf

练习#

  1. 在两台虚拟机上搭建单活主备,模拟关闭Master网卡,记录VIP漂移时间。
  2. 改为双活主备,验证两台各自拥有一个VIP。
  3. 添加track_script并模拟仲裁不可达,观察优先级降低与切换行为。