Keepalived-配置
keepalived.conf 解析
bash
# ===================== Keepalived 配置文件详解 =====================
# 文件名:/etc/keepalived/keepalived.conf
# --------------------- 全局配置 (global_defs) ---------------------
global_defs {
# 节点唯一标识符(集群内必须唯一)
router_id NODE_01
# 告警邮件配置(需本地邮件服务支持)
notification_email {
admin@example.com
ops@example.com
}
notification_email_from keepalived@example.com
# SMTP服务器配置
smtp_server smtp.example.com
smtp_connect_timeout 30
# VRRP严格模式(生产环境建议关闭)
vrrp_strict off
# 免费ARP报文发送间隔(VIP切换后更新ARP表)
vrrp_garp_interval 0.001
# 脚本安全设置(防止非root用户修改脚本)
enable_script_security
}
# --------------------- 健康检查脚本 (vrrp_script) ---------------------
vrrp_script chk_nginx {
# 健康检查脚本路径
script "/usr/local/bin/check_nginx.sh"
# 检查间隔(秒)
interval 2
# 失败时优先级调整值(-253~253)
weight -5
# 成功/失败次数阈值
rise 2 # 连续2次成功才认为健康
fall 2 # 连续2次失败才认为不健康
# 执行脚本的用户
user root
}
# --------------------- VRRP实例配置 (vrrp_instance) ---------------------
vrrp_instance VI_1 {
# 初始角色(实际由优先级决定)
state MASTER
# 绑定VIP的网络接口
interface eth0
# VRRP组ID(0-255,主备必须一致)
virtual_router_id 51
# 选举优先级(1-255,MASTER需更高)
priority 100
# 心跳间隔(秒)
advert_int 1
# 抢占模式配置
nopreempt # 非抢占模式(可选)
preempt_delay 300 # 抢占延迟时间(秒)
# 非抢占模式(BACKUP节点不主动抢占VIP)
nopreempt
# 认证配置(主备必须一致)
authentication {
auth_type PASS # 认证类型:PASS(密码)或 AH(IPSec)
auth_pass 12345678 # 密码(明文,最多8字符)
}
# 虚拟IP地址配置(可多个)
virtual_ipaddress {
192.168.1.100/24 dev eth0 label eth0:1 # VIP格式:IP/掩码 dev 网卡 [标签]
}
# 关联健康检查脚本
track_script {
chk_nginx
}
# 单播通信配置(网络禁用组播时使用)
unicast_src_ip 192.168.1.2 # 本机IP
unicast_peer {
192.168.1.3 # 对端IP
}
# 状态切换通知脚本
notify_master "/etc/keepalived/master.sh" # 切换为MASTER时执行
notify_backup "/etc/keepalived/backup.sh" # 切换为BACKUP时执行
notify_fault "/etc/keepalived/fault.sh" # 进入故障状态时执行
}
# --------------------- LVS虚拟服务器配置 (virtual_server) ---------------------
virtual_server 192.168.1.100 80 {
# 健康检查间隔(秒)
delay_loop 6
# 调度算法:rr(轮询)、wlc(加权最小连接)
lb_algo rr
# 转发模式:DR(直接路由)、NAT、TUN
lb_kind DR
# 协议类型
protocol TCP
# 持久化连接超时(秒)
persistence_timeout 60
# 真实服务器配置
real_server 192.168.1.101 80 {
# 服务器权重
weight 1
# TCP健康检查
TCP_CHECK {
connect_port 80 # 检查端口
connect_timeout 3 # 连接超时(秒)
retry 3 # 重试次数
delay_before_retry 2 # 重试间隔(秒)
}
# HTTP健康检查(可选)
HTTP_GET {
url {
path /healthz
status_code 200
}
connect_timeout 5
}
}
# 第二个真实服务器
real_server 192.168.1.102 80 {
weight 2
TCP_CHECK {
connect_port 80
connect_timeout 3
}
}
}
# --------------------- 高级配置示例 ---------------------
# 多VRRP实例配置(实现多VIP)
vrrp_instance VI_2 {
state BACKUP
interface eth1
virtual_router_id 52
priority 90
virtual_ipaddress {
10.0.0.100/24 dev eth1
}
}
# ===================== 关键配置说明 =====================
# 1. 主备节点必须一致的配置:
# - virtual_router_id
# - authentication
# - advert_int
#
# 2. 防火墙必须放行:
# - VRRP协议(协议号112)
# - 组播地址224.0.0.18
#
# 3. 健康检查脚本:
# - 需赋予可执行权限(chmod +x)
# - 返回0表示健康,非0表示不健康
#
# 4. 避免脑裂:
# - 使用单播通信(unicast_src_ip/unicast_peer)
# - 部署第三方仲裁脚本关键字段说明表
| 配置块 | 关键字段 | 说明 | 示例值 |
|---|---|---|---|
| global_defs | router_id | 节点唯一标识 | NODE_01 |
vrrp_strict | 严格模式 | off(生产环境建议关闭) | |
vrrp_garp_interval | ARP更新间隔 | 0.001 | |
| vrrp_script | script | 健康检查脚本路径 | /usr/bin/check_nginx.sh |
interval | 检查间隔 | 2(秒) | |
weight | 优先级调整值 | -5(失败时降低优先级) | |
| vrrp_instance | state | 初始角色 | MASTER或 BACKUP |
virtual_router_id | VRRP组ID | 51(0-255) | |
priority | 选举优先级 | 100(MASTER), 90(BACKUP) | |
virtual_ipaddress | 虚拟IP配置 | 192.168.1.100/24 dev eth0 | |
unicast_src_ip | 单播本机IP | 192.168.1.2 | |
unicast_peer | 单播对端IP | 192.168.1.3 | |
| virtual_server | lb_algo | 调度算法 | rr(轮询), wlc(加权最小连接) |
lb_kind | 转发模式 | DR(直接路由), NAT, TUN | |
real_server | 后端服务器 | 192.168.1.101 80 | |
TCP_CHECK | TCP健康检查 | connect_port 80 |
