4-3-Keepalived 配置完成后 VIP ping 不通的解决方案

熊 0 阅读 Linux集群服务

问题根源

默认情况下 keepalived.conf 中会启用 vrrp_strict 模式 , 该配置会导致 VIP 不处理发给其的请求。

在 Master 抓包结果如下 , 能收到来自外部发给 VIP 的请求 , 但是没有回应 :

f4a9967612216f41e76671ba44339481a3d6ff

正常响应对比:

c6f930256488de40e4d53756b3e0c691267e10

vrrp_strict 模式说明 Keepalived 基于 vrrp 来实现网关高可用 , 但会有一些自己的私有实现 , 为了保证 Keepalived 完全兼容 vrrp 协议 , 引入了 vrrp_strict 这一模式。

开启此模式后 , Keepalived 下列配置会被禁止 :

  • 0 VIP( 未配置 VIP)

  • 单播邻居

  • vrrp_version 为 2 时使用 IPv6 地址

  • 认证( 可以配置 , 但不生效)

除了上述三个点 , 开启 vrrp_strict 还会导致不接受发给 VIP 的请求 , 除非 :

vrrp 优先级为 255 , 这时 VIP 就可以接受流量 vrrp_version 为 3 时 , 支持设置 Accept_mode(vrrp3 的一个功能) , 这时就允许 VIP 接受流量

所以解决办法就是对症下药 , 总共有三种方式 :

解决方法1 : 关掉 vrrp_strict 模式

简单粗暴的一种办法 , 禁用 vrrp_strict 模式 , 配置示例如下 :

b874d53123e7da6c0fd355068ad59dfd93b810
976905335df0e3669ae185356fa293c056a023

启用服务后完整的主节点日志如下(journalctl -f -u keepalived) :

696d7aa066cb1733b0f085ac4ed5e5c04fd1ba

备节点日志:

899e8298617459463026126a4bf1e322f358fe

外部客户端访问 VIP 时 , 主节点响应请求 :

35e78a001315c13207b136bc0efcf8cd3c39cb

解决方法2 : 使用 vrrp v3 + accept 模式

配置示例如下 :

17125ca67b817c988b4147f3809f37b4d3e15b

主节点日志如下:

72ba1a35342ccd25f8099318c44857f4ec6558

备节点日志:

b6d1eb4989695de8ba6185685218a635cccf22

解决方法3 : vrrp 优先级使用 255 这种模式并不推荐 , 因为需要每个节点都是用 255 的优先级 , 不能固定主备状态。

配置方式如下:

e1e48018876e7652a959500dff37d828942d61

在测试中会发现 , 一开始 keepalived1 节点成为了主 , 但一旦 Keepalived2 上线 , 日志会提示优先级一致 , Keepalived2 又成为了主 :

4282b5182a3d91328383106c73ae0ea3dc8a89

虽然故障切换正常 , 但生产环境还是尽量不要这样配置。


参考链接

Keepalived 配置完成后 VIP ping 不通的解决方案dyadin112的技术博客51CTO博客