12.3.3 基础配置文件结构与关键参数

配置文件位置与整体结构#

Keepalived 主配置文件通常为 /etc/keepalived/keepalived.conf,采用块级结构,常见由三大模块组成:
- global_defs:全局参数与通知配置
- vrrp_instance:VRRP 实例定义(主备与VIP)
- virtual_server:LVS 负载均衡配置(可选,启用时需要)

原理草图(VRRP + VIP 漂移):

文章图片

快速查看配置文件与语法检查:

# 查看默认配置文件是否存在
ls -l /etc/keepalived/keepalived.conf

# 语法检查(报错会提示行号)
keepalived -t -f /etc/keepalived/keepalived.conf

global_defs 关键参数#

用于定义全局行为与告警通知:

  • router_id <ID>:节点标识,建议主备唯一(如 LVS_MASTER/LVS_BACKUP
  • notification_email/notification_email_from/smtp_server:邮件通知配置
  • enable_script_security:启用脚本安全校验(推荐)
  • script_user:指定执行健康检查脚本的用户
  • vrrp_strict:严格 VRRP 校验(如不使用多播需谨慎开启)
  • log_detail/log_facility:日志详细级别与 facility

示例(全局配置完整片段):

global_defs {
    router_id LVS_MASTER
    notification_email {
        ops@example.com
    }
    notification_email_from keepalived@example.com
    smtp_server 10.0.0.10
    enable_script_security
    script_user root
    log_detail
    log_facility LOCAL0
}

命令解释:

# 将 keepalived 日志单独写入 /var/log/keepalived.log
echo "local0.* /var/log/keepalived.log" > /etc/rsyslog.d/keepalived.conf
systemctl restart rsyslog

vrrp_instance 结构与关键参数#

定义 VRRP 实例,决定主备切换与 VIP 漂移:

  • state MASTER|BACKUP:初始角色(实际由优先级决定)
  • interface <NIC>:绑定网络接口,如 eth0
  • virtual_router_id <1-255>:VRRP 组 ID,主备必须一致
  • priority <1-255>:优先级,数值越大越优先成为 Master
  • advert_int <秒>:VRRP 通告间隔
  • authentication:认证方式(PASS + auth_pass
  • virtual_ipaddress:VIP 列表,可含多 IP/网段
  • track_interface:接口检测,接口故障触发降级
  • track_script:健康检查脚本集
  • nopreempt:不抢占(备节点不主动抢占已存在 Master)

可执行配置示例(主节点):

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 120
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.0.0.100/24 dev eth0 label eth0:1
    }
    track_interface {
        eth0
    }
    track_script {
        chk_nginx
    }
}

备节点差异示例(仅改 state/priority):

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.0.0.100/24 dev eth0 label eth0:1
    }
    track_interface {
        eth0
    }
    track_script {
        chk_nginx
    }
}

验证 VIP 漂移:

# Master 上应出现 VIP
ip addr show dev eth0 | grep 10.0.0.100

# 停止 Master,观察备机 VIP 是否接管
systemctl stop keepalived

健康检查脚本与触发参数#

若需要对服务状态联动切换,可在 vrrp_script 中定义:

  • script:脚本路径
  • interval:执行间隔(秒)
  • weight:健康影响权重(负值降低优先级)

脚本与配置示例(检测 Nginx):

# /etc/keepalived/check_nginx.sh
#!/bin/bash
pgrep -x nginx >/dev/null 2>&1
vrrp_script chk_nginx {
    script "/etc/keepalived/check_nginx.sh"
    interval 2
    weight -20
}

脚本权限与安全:

chmod +x /etc/keepalived/check_nginx.sh
# 若启用了 enable_script_security,则脚本需 root 拥有
chown root:root /etc/keepalived/check_nginx.sh

virtual_server(LVS)基础参数(可选)#

启用 LVS 负载均衡时使用:

  • virtual_server <VIP> <PORT>:虚拟服务定义
  • delay_loop:健康检查间隔
  • lb_algo:调度算法(rr/wrr/lc/wlc
  • lb_kind:转发模式(NAT/DR/TUN
  • protocol:协议(TCP/UDP
  • real_server:后端节点定义
  • TCP_CHECK/HTTP_GET:健康检查方式

最小可用示例(LVS DR):

virtual_server 10.0.0.100 80 {
    delay_loop 2
    lb_algo rr
    lb_kind DR
    protocol TCP

    real_server 10.0.0.101 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 2
        }
    }
    real_server 10.0.0.102 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 2
        }
    }
}

配置要点与建议#

  • VRRP 主备必须保持 virtual_router_id、认证一致
  • 优先级差值建议 ≥ 10,便于判定主备
  • 建议开启 track_scripttrack_interface 以提升故障感知
  • 使用单播环境时需增加 unicast_src_ipunicast_peer
  • 生产环境建议配合 log_detail 与系统日志定位切换事件

单播模式示例:

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 120
    advert_int 1
    unicast_src_ip 10.0.0.11
    unicast_peer {
        10.0.0.12
    }
    virtual_ipaddress {
        10.0.0.100/24
    }
}

常见排错与命令解释#

排错步骤:

# 1) 检查配置语法
keepalived -t -f /etc/keepalived/keepalived.conf

# 2) 查看服务状态与最近日志
systemctl status keepalived -l
journalctl -u keepalived --no-pager -n 50

# 3) 查看 VRRP 通告与 VIP
ip addr show dev eth0
tcpdump -i eth0 vrrp

常见问题定位:
- VIP 不漂移:检查 virtual_router_id/auth_pass 是否一致,确认 advert_intpriority 合理
- 脚本不生效:检查 enable_script_security 是否开启、脚本属主是否为 root
- 单播环境无切换:确认 unicast_src_ipunicast_peer 是否配置正确


练习与验证#

1) 写出两台主备配置,要求使用单播模式,并验证 VIP 在故障时漂移。
2) 增加 vrrp_script 检测 Nginx,模拟 systemctl stop nginx 触发 VIP 切换。
3) 开启 log_detail,用 journalctl 找到“Entering MASTER/BACKUP”日志行并记录时间。