Skip to content

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_defsrouter_id节点唯一标识NODE_01
vrrp_strict严格模式off(生产环境建议关闭)
vrrp_garp_intervalARP更新间隔0.001
vrrp_scriptscript健康检查脚本路径/usr/bin/check_nginx.sh
interval检查间隔2(秒)
weight优先级调整值-5(失败时降低优先级)
vrrp_instancestate初始角色MASTERBACKUP
virtual_router_idVRRP组ID51(0-255)
priority选举优先级100(MASTER), 90(BACKUP)
virtual_ipaddress虚拟IP配置192.168.1.100/24 dev eth0
unicast_src_ip单播本机IP192.168.1.2
unicast_peer单播对端IP192.168.1.3
virtual_serverlb_algo调度算法rr(轮询), wlc(加权最小连接)
lb_kind转发模式DR(直接路由), NAT, TUN
real_server后端服务器192.168.1.101 80
TCP_CHECKTCP健康检查connect_port 80