Keepalived高可用配置指南

Keepalived 实验环境与配置笔记

概览 / 拓扑

  • Keepalived 节点
    • KA1: 172.25.254.50 (MASTER)
    • KA2: 172.25.254.60 (BACKUP)
  • 后端 Web 服务
    • rs1: 172.25.254.10
    • rs2: 172.25.254.20
  • 虚拟 IP (VIP):172.25.254.100(通过 VRRP 发布)
  • 网络模式:单网卡 NAT(eth0)

环境准备

1. 部署后端 web(rs1、rs2)

在 rs1:

bash 复制代码
vmset.sh eth0 172.25.254.10 rs1
dnf install httpd -y
echo "RS1 - 172.25.254.10" > /var/www/html/index.html
systemctl enable --now httpd

在 rs2:

bash 复制代码
vmset.sh eth0 172.25.254.20 rs2
dnf install httpd -y
echo "RS2 - 172.25.254.20" > /var/www/html/index.html
systemctl enable --now httpd

测试:

bash 复制代码
curl 172.25.254.10   # 应显示 RS1 - 172.25.254.10
curl 172.25.254.20   # 应显示 RS2 - 172.25.254.20

2. 部署 Keepalived 节点(KA1、KA2)

在 KA1:

bash 复制代码
vmset.sh eth0 172.25.254.50 KA1

在 KA2(示例中有笔误 KA6,应为 KA2):

bash 复制代码
vmset.sh eth0 172.25.254.60 KA2

3. 同步 /etc/hosts

在 KA1 编辑 /etc/hosts:

text 复制代码
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
172.25.254.50     KA1
172.25.254.60     KA2
172.25.254.10     rs1
172.25.254.20     rs2

从 KA1 分发到其它主机:

bash 复制代码
for i in 60 10 20; do
  scp /etc/hosts 172.25.254.$i:/etc/hosts
done

时间同步(Chrony)

在 KA1 提供时间同步

编辑 /etc/chrony.conf,添加:

text 复制代码
allow 0.0.0.0/0
local stratum 10

然后:

bash 复制代码
systemctl restart chronyd
systemctl enable --now chronyd

在 KA2 使用 KA1 作为上游

/etc/chrony.conf 中添加:

text 复制代码
pool 172.25.254.50 iburst

然后:

bash 复制代码
systemctl restart chronyd
systemctl enable --now chronyd
chronyc sources -v

Keepalived 安装

在两台节点上:

bash 复制代码
dnf install keepalived.x86_64 -y
systemctl enable --now keepalived.service

主配置(/etc/keepalived/keepalived.conf 示例)

建议把全局设置放在主配置,具体 VRRP 实例放在子文件中,通过 include 加载,便于维护。

主配置示例:

text 复制代码
! Configuration File for keepalived

global_defs {
   notification_email {
     timinglee_zln@163.com
   }
   notification_email_from timinglee_zln@163.com
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id KA1
   vrrp_skip_check_adv_addr
   #vrrp_strict
   vrrp_garp_interval 1
   vrrp_gna_interval 1
   vrrp_mcast_group4 224.0.0.44
}

include /etc/keepalived/conf.d/*.conf

说明:

  • include /etc/keepalived/conf.d/*.conf 用于拆分子配置。
  • vrrp_skip_check_adv_addr 用于某些网络环境避免地址检查失败(使用前理解其影响)。

子配置(/etc/keepalived/conf.d/webvip.conf 示例)

conf.d 下单独写 VRRP 实例:

text 复制代码
vrrp_instance WEB_VIP {
    state MASTER           # MASTER 节点写 MASTER,备节点写 BACKUP
    interface eth0
    virtual_router_id 51
    priority 100           # MASTER 优先级高(例如 100),BACKUP 较低(例如 80)
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.100/24 dev eth0 label eth0:0
    }
}

备节点 (KA2) 修改为:

  • state BACKUP
  • priority 80

测试配置并重启:

bash 复制代码
keepalived -t -f /etc/keepalived/keepalived.conf
systemctl restart keepalived.service

VIP 验证

  • 查看接口(应该看到 eth0:0 或 ip addr 中的 secondary address):
bash 复制代码
ifconfig
# 或
ip addr show eth0
  • 抓包查看 VRRP 广播包:
bash 复制代码
tcpdump -i eth0 -nn host 224.0.0.44
# 将看到 VRRP Advertisement 报文,如 vrid 51, prio 100 ...
  • 客户端测试 VIP:
bash 复制代码
curl 172.25.254.100

故障演练(Failover)

  1. 在 MASTER(KA1)上模拟故障:
bash 复制代码
systemctl stop keepalived.service
  1. 在 BACKUP(KA2)上检查 VIP 是否被迁移(ifconfig / ip addr)。
  2. 恢复 MASTER:
bash 复制代码
systemctl start keepalived.service

日志分离(把 keepalived 日志单独写文件)

  1. 设置 Keepalived 启动参数以指定 syslog facility(示例使用 local6):
    编辑 /etc/sysconfig/keepalived,添加或修改:
bash 复制代码
KEEPALIVED_OPTIONS="-D -S 6"

说明:参数语义可能随发行版/版本有所差异,-S 指定 syslog facility(6 对应 local6);请参考本机 keepalived 的 man 文档或发行版说明。

  1. 配置 rsyslog:
    /etc/rsyslog.conf 或新建 /etc/rsyslog.d/keepalived.conf 中加入:
text 复制代码
local6.*    /var/log/keepalived.log

重启 rsyslog:

bash 复制代码
systemctl restart rsyslog.service

查看日志:

bash 复制代码
ls -l /var/log/keepalived.log
tail -f /var/log/keepalived.log

常用命令速查

  • 配置测试: keepalived -t -f /etc/keepalived/keepalived.conf
  • 启停服务: systemctl enable --now keepalived.service / systemctl stop/start keepalived.service
  • 日志查看: tail -f /var/log/keepalived.logjournalctl -u keepalived -f
  • 抓包: tcpdump -i eth0 -nn host 224.0.0.44
  • 网络接口: ifconfigip addr
  • Chrony 状态: chronyc sources -v

注意事项与排障建议

  • auth_pass 必须在所有参与 VRRP 的节点上相同。
  • 同一 VIP 的 virtual_router_id 必须相同;不同 VIP 必须使用不同 ID。
  • priority 越大优先成为 MASTER。
  • interface 必须填写正确的物理接口名称(���拟化环境可能是 ens33、eth0 等)。
  • VIP 无法出现时,检查:
    • keepalived 配置语法(keepalived -t
    • keepalived 日志(/var/log/keepalived.logjournalctl
    • 系统或网络管理工具(NetworkManager、systemd-networkd)是否干预地址别名
    • 多播(multicast)是否被宿主或虚拟网络阻断
  • 与 ARP、gratuitous ARP 相关的问题可通过调整 vrrp_garp_intervalvrrp_gna_interval 等参数尝试改善。
  • 在某些网络环境下可使用 vrrp_skip_check_adv_addr 绕开地址检查问题(谨慎使用)。

简要复查清单(运行前)

  1. /etc/hosts 已同步到所有节点
  2. rs1/rs2 web 服务��运行并可访问
  3. chronyd/ntp 同步正常(尤其是时钟偏差)
  4. keepalived 已安装并启用,主/备配置正确(MASTER/BACKUP 与 priority)
  5. rsyslog 已配置(若需要单独日志)
  6. 执行一次配置语法校验: keepalived -t -f /etc/keepalived/keepalived.conf

相关推荐
m0_737302581 小时前
腾讯云TDSQL-C+CVM软硬协同,数据库性能三倍跃升
服务器
2401_832298101 小时前
腾讯云第九代CVM,玄灵网卡加持重构算力新范式
网络
掘根1 小时前
【jsonRpc项目】Registry-Discovery模块
运维·服务器·数据库
图扑可视化1 小时前
HT 技术实现数字孪生智慧服务器信息安全监控平台
服务器·信息可视化·数字孪生·三维可视化
Cloud Traveler1 小时前
Archcraft携手cpolar打造轻量化远程开发环境
网络·云原生·eureka
j_xxx404_2 小时前
Linux:进程优先级与进程切换与调度
linux·运维·服务器
七夜zippoe2 小时前
网络安全实战:从TLS/SSL到JWT与OAuth2.0的完整防御体系构建
网络·安全·web安全·ssl·tls
咚为2 小时前
Rust Cell使用与原理
开发语言·网络·rust
never_go_away2 小时前
linux Socket限制
linux·运维·服务器