属于大家的
VPS知识分享站

两台云服务器高可用:Keepalived、VIP 与切换演练

先说结论:两台云服务器做高可用,核心不是装个 Keepalived,而是解决四件事:浮动 IP 能不能用、健康检查准不准、脑裂怎么防、数据怎么同步。云环境经常不支持组播和免费 ARP,很多方案最后要落到云负载均衡或 DNS 切换上。

先明确目标:

  • RTO:故障后多久恢复,30 秒和 5 分钟方案完全不同
  • RPO:能接受丢多少数据,决定要不要同步复制
  • 范围:只是入口高可用,还是应用、数据库都要

两种常见架构

主备:一台跑业务,一台待命,故障时切 VIP 或 DNS。简单、成本低,但备机平时闲着。

双活:两台都跑业务,前面用负载均衡分流。资源利用率高,但要求应用无状态、数据层能处理并发写。

主备服务器与浮动 VIP、心跳链路的架构
先定主备还是双活,再谈 Keepalived 和 VIP。

Keepalived 怎么做

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 换成长密码
    }
    virtual_ipaddress {
        10.0.0.100/24
    }
}

两台配置一样,优先级不同;优先级高的持有 VIP,心跳断了就切换。注意 virtual_router_id 不能和同网段其他集群冲突,密码别用默认值。

云上 VIP 的坑

传统 IDC 里 Keepalived 靠 VRRP 组播和免费 ARP 漂移 IP;云网络通常不支持组播,或者不允许随意发 ARP。结果就是:配置看起来正常,VIP 切不过去,或者切过去回不来。

  • 先确认云厂商是否支持“浮动 IP/高可用 IP”
  • 不支持就用云负载均衡,或 DNS + 健康检查切换
  • 用 DNS 切换时把 TTL 调低,接受分钟级 RTO
浮动 IP 从故障节点切到备用节点
云网络可能不支持 VRRP,VIP 切不过去就先查网络能力。

健康检查

别只 ping 主机。主机活着但应用挂了,切了也没用。健康检查脚本要检查:

#!/bin/bash
curl -fsS --max-time 2 http://127.0.0.1:8080/health || exit 1
systemctl is-active --quiet nginx || exit 1

脚本返回非 0 就降优先级,触发切换。检查频率和超时要调好,太敏感会抖,太迟钝恢复慢。

脑裂怎么防

两台都以为自己是主,就是脑裂。常见原因:心跳网络断、防火墙拦了 VRRP、优先级配置错。防法:

  • 心跳走独立网卡或独立链路
  • 加仲裁节点或检查网关可达性
  • 切换脚本做幂等,避免重复挂载、重复启动
  • 数据库只允许一个写节点,别让两边都写
两个节点之间的脑裂警告与仲裁护盾
脑裂会让两边都写数据,必须有仲裁和幂等切换脚本。

数据层怎么办

应用无状态可以随便切,数据层不行。数据库做主从,应用写主读从;Redis 做主从或哨兵;文件放对象存储或共享盘。切换时先确认主从延迟,别把旧主的数据覆盖掉。

切换演练

  1. 停掉主机服务,观察 VIP/DNS 是否切换
  2. 确认应用、数据库、队列都恢复
  3. 记录切换耗时和失败点
  4. 恢复主机,确认不会来回抖
  5. 每季度演练一次

没演练过的高可用,等于没有。

常见坑

  • 云网络不支持 VRRP,Keepalived 起不来
  • 健康检查只 ping,应用挂了不切
  • 脑裂后两边都写数据库
  • VIP 切了但 ARP 缓存没更新
  • 备机配置和主机不一致,切过去跑不起来

DNS 切换方案

云网络不支持 VIP 时,可以用 DNS + 健康检查:监控发现主机故障,把域名解析切到备机。TTL 调到 60 秒以内,切换通常在几分钟内生效。缺点是依赖 DNS 缓存,RTO 比 VIP 长。

双活的数据一致性

双活最难的是数据。两台都写同一个数据库,容易冲突;写各自本地库,又要同步。常见做法是应用无状态、数据库单主、文件放对象存储,所谓“双活”只活应用层。

监控和告警

监控 VIP 是否在主机、健康检查是否通过、切换次数、主从延迟。切换次数突然变多,说明网络或应用在抖,先查原因再谈优化。

成本

主备要两台机器,双活也要两台,加上负载均衡、共享存储和监控,成本至少翻倍。按业务中断损失算,值不值要提前想清楚。

备机要不要跑业务

备机可以跑只读、备份、监控、批处理,但别跑会抢 CPU、内存和带宽的核心业务。切换时备机要能立刻接管,资源得留出来。

切换脚本注意

切换脚本要幂等:重复执行不会重复挂载、重复启动、重复改 DNS。脚本里加锁和日志,出问题能看出执行到哪一步。

演练频率

至少每季度一次,业务大促前再加一次。演练要覆盖主机宕机、网络断开、数据库主从切换三种场景。

VIP 漂移失败怎么查

先看 Keepalived 日志和 VRRP 状态,再确认云网络是否允许组播和免费 ARP;然后查防火墙、安全组和网卡。很多“配置没问题”的切换失败,最后都是云平台不支持 VRRP。

高可用的目标是业务不中断,不是机器不宕机;机器一定会坏,关键是坏了能多快恢复。

切换时间要写进 SLA,和业务方对齐预期。

最后,别把高可用做成“看起来有”,切换不动等于没有。

演练记录要存档。

高可用是持续投入,不是一次性项目。

,别忘。

常见问题 FAQ

Q1:两台机器一定要 Keepalived 吗?

不一定。云负载均衡、DNS 故障转移都能做入口高可用,取决于云厂商能力和你能接受的 RTO。

Q2:Keepalived 在云上能用吗?

看网络。支持浮动 IP/组播的可以用;不支持的要用云产品,别硬配。

Q3:主备浪费一台机器吗?

是成本换可用性。备机可以跑只读任务、备份、监控,但别跑会抢资源的业务。

Q4:数据库怎么做高可用?

主从 + 自动切换(MHA/Orchestrator/云数据库),或直接用云数据库。自己搭要处理延迟和脑裂。

Q5:切换要多久?

Keepalived 秒级到几十秒;DNS 切换取决于 TTL,通常几分钟。按业务能接受的时间选方案。

总结

两台云服务器做高可用,先确认云网络支不支持 VIP,再定主备还是双活;健康检查要查应用,脑裂要有仲裁,数据层要有主从。最后,必须演练。

需要两台机器做切换演练,可以按小时开萤光云香港 CN2 VPS,先把 Keepalived 和健康检查跑通。

相关推荐

赞(0)
未经允许不得转载:VPS知识分享站 » 两台云服务器高可用:Keepalived、VIP 与切换演练