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>:绑定网络接口,如eth0virtual_router_id <1-255>:VRRP 组 ID,主备必须一致priority <1-255>:优先级,数值越大越优先成为 Masteradvert_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_script或track_interface以提升故障感知 - 使用单播环境时需增加
unicast_src_ip与unicast_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_int 与 priority 合理
- 脚本不生效:检查 enable_script_security 是否开启、脚本属主是否为 root
- 单播环境无切换:确认 unicast_src_ip 与 unicast_peer 是否配置正确
练习与验证#
1) 写出两台主备配置,要求使用单播模式,并验证 VIP 在故障时漂移。
2) 增加 vrrp_script 检测 Nginx,模拟 systemctl stop nginx 触发 VIP 切换。
3) 开启 log_detail,用 journalctl 找到“Entering MASTER/BACKUP”日志行并记录时间。