ZBLOG

keepalived主节点如何感知到备节点挂了?

Keepalived 中,主节点(Master)通过 VRRP(Virtual Router Redemption Protocol)协议 的机制来感知备节点(Backup)是否存活。具体实现方式如下:


1. VRRP 心跳检测

  • 组播/单播心跳包
    主节点和备节点默认通过组播地址 224.0.0.18(VRRP专用组播地址)定期发送 Advertisement 心跳报文(默认每秒1次)。

    • 如果备节点故障,主节点在 3 * advertisement_interval(默认3秒)内收不到备节点的报文,会认为备节点失效。
    • 可通过配置 vrrp_unicast_bindvrrp_unicast_peer 改为单播模式(适用于禁用组播的网络)。
  • 关键参数

    vrrp_instance VI_1 {
      advert_int 1     # 心跳间隔(秒)
      authentication { # 认证(可选)
          auth_type PASS
          auth_pass <密码>
      }
      unicast_src_ip <主节点IP> # 单播模式下指定源IP
      unicast_peer {
          <备节点IP>            # 单播模式下指向对端IP
      }
    }
    

2. Track Script(跟踪脚本)

Keepalived支持通过自定义脚本检测备节点的状态,例如:

  • ICMP Ping检测:主节点通过脚本定期Ping备节点,失败时触发优先级降低。
  • TCP端口检测:检查备节点的服务端口(如SSH、HTTP)是否存活。

示例配置:

vrrp_script chk_backup {
    script "ping -c2 <备节点IP> || exit1" # Ping检测
    interval2                              #每2秒执行一次
    weight -20                            #失败时优先级降低20
}
vrrp_instance VI_1 {
    track_script {
        chk_backup
    }
}

3. Notify机制

当主节点感知到备节点故障时,可以触发通知脚本(如邮件/日志告警):

vrrp_instance VI_1 {
    notify_master "/path/to/script.sh master"
    notify_backup "/path/to/script.sh backup"
    notify_fault "/path/to/script.sh fault"
}

4. Keepalived日志验证

查看系统日志确认状态切换:

tail -f /var/log/messages | grep Keepalived
# 或使用journalctl(Systemd系统)
journalctl -u keepalived --follow

正常日志示例:

Keepalived_vrrp[PID]: VRRP_Instance(VI_1) Transition to MASTER STATE
Keepalived_vrrp[PID]: VRRP_Instance(VI_1) Backup has failed, assuming mastership.

常见问题排查

  • 防火墙规则:确保放行VRRP协议(IP协议号112)和组播流量。
  • 网络延迟:调整 advert_int (如改为2秒)避免误判。
  • 脑裂问题:优先配置非抢占模式 (nopreempt) + 多监控脚本。

如果需要更详细的配置示例或问题分析,可以提供你的实际场景进一步讨论!


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://sdn.0voice.com/?id=8167

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?