跳转到主内容
websoft网络软件专家 - 深耕网络技术,打造实用软件!

如何配置 Keepalived 监控后端 Go 语言微服务实现集群高可用方案

Keepalived通过自定义脚本实现Go微服务健康检查:Go服务需暴露/health端点返回200,脚本用curl检测并返回退出码,Keepalived在vrrp_instance中通过track_script调用该脚本,依据结果调整优先级触发VIP漂移。 Keepalived 本身不直接监控应用层服务(比如 Go 微服务),它依赖外部脚本或健康检查机制来判断后端是否存活。要实现对 Go 微服务的高可用集群,核心思路是:用 Keepalived 管理 VIP 漂移,用自定义健康检查脚本探测 Go 服务的 HTTP/HTTPS 或 TCP 端口状态,并根据结果触发主备切换。 Go 微服务需暴露健康检查接口 你的 Go 服务必须提供一个轻量、稳定、无副作用的健康探针端点,例如 /health 或 /ping ,返回 HTTP 200 即可。推荐使用标准库
net/http
实现: 监听固定端口(如 :8080 ) 响应 GET 请求,不依赖数据库或下游服务 避免耗时操作,超时控制在 1 秒内 示例响应:
HTTP/1.1 200 OK
+ 纯文本
ok
编写 Keepalived 健康检查脚本 在每台服务器上创建检测脚本(如 /usr/local/bin/check_go.sh ),用 curl 或 wget 验证 Go 服务是否可访问: 脚本需有执行权限:
chmod +x /usr/local/bin/check_go.sh
检测失败时返回非零退出码(Keepalived 仅认 exit code) 建议加超时和重试,避免瞬时抖动误判 示例内容:
#!/bin/bash curl -f -m 2 http://127.0.0.1:8080/health >/dev/null 2>&1 exit $?
Keepalived 配置中启用 track_script 在 /etc/keepalived/keepalived.conf 的
vrrp_instance
段中引用该脚本: 定义脚本块:
vrrp_script chk_go { script "/usr/local/bin/check_go.sh" interval 2 }
在实例中绑定:
track_script { chk_go }
确保
state MASTER
和
state BACKUP
的 priority 设置合理(如 100 和 90)
virtual_router_id
主备必须一致,
interface
填实际网卡名(如 eth0、ens33) 验证与注意事项 配置完成后需验证关键行为: 手动停掉 Go 服务,观察 keepalived 日志(
journalctl -u keepalived -f
)是否触发切换 检查 VIP 是否已漂移到 backup 节点:
ip addr show | grep 172.25.254.88
确认 backup 节点上的 Go 服务已启动(脚本不负责启停,需自行保障) 避免“脑裂”:确保主备间网络互通,VRRP 组播包(224.0.0.18)不被防火墙拦截

相关文章