Keepalived 通过自定义 track_script 脚本探测 Memcached 状态实现双机热备,脚本返回0/非0码控制 VIP 漂移;配置需差异化设置 state、priority 和 router_id,其余保持一致。

Keepalived 本身不直接监控 Memcached 进程或端口,但可以通过自定义健康检查脚本(track_script)实现对 Memcached 状态的主动探测,再结合 VRRP 协议完成 VIP 漂移,从而达成缓存集群的双机热备。关键不是 Keepalived “内置支持”,而是它提供了可扩展的机制——只要脚本能返回正确退出码(0 表示健康,非 0 表示异常),VIP 就只在 Memcached 正常运行的节点上生效。
Memcached 健康检查脚本编写
在两台 Memcached 服务器(如 node1/node2)上均部署同一检测脚本,例如:
/etc/keepalived/check_memcached.sh
- 使用
nc -z或echo "stats" | nc -w1 127.0.0.1 11211测试端口连通性与服务响应 - 添加超时控制(
-w1)避免阻塞,脚本执行时间必须短于advert_int(建议 ≤0.5 秒) - 赋予可执行权限:
chmod +x /etc/keepalived/check_memcached.sh - 手动运行测试:成功时返回 0,失败时返回 1(可用
echo $?验证)
Keepalived 配置中集成检测逻辑
在 /etc/keepalived/keepalived.conf 的全局段和实例段中补充以下内容:
- 在
global_defs下方添加:vrrp_script chk_memcached {<br> script "/etc/keepalived/check_memcached.sh"<br> interval 2<br> weight -20<br> fall 2<br> rise 2<br>} - 在
vrrp_instance块内加入:track_script {<br> chk_memcached<br>} - 注意:
weight -20表示当检测失败时,当前节点优先级自动减 20;若主节点 priority 原为 100,失败后变为 80,低于备节点的 90,触发 VIP 切换
主备角色与 VIP 行为逻辑
确保两节点配置仅在以下三项有差异,其余完全一致:
-
state:主节点设为MASTER,备节点设为BACKUP -
priority:主节点设为较高值(如 100),备节点略低(如 90),但差值应小于weight绝对值,否则健康检查失效 -
router_id:必须全局唯一(如memcache-node1/memcache-node2) - VIP(
virtual_ipaddress)需相同,且绑定到真实网卡(如eth0),子网掩码需明确(如192.168.73.203/24)
验证与故障模拟要点
部署后按顺序确认:
- 启动 Keepalived:
systemctl enable --now keepalived(两节点均执行) - 检查 VIP 归属:
ip addr show eth0 | grep 192.168.73.203—— 应仅出现在健康节点 - 停掉主节点 Memcached:
systemctl stop memcached,观察 2–3 秒内 VIP 是否漂移到备节点(journalctl -u keepalived -n 20 -f可见状态切换日志) - 客户端持续访问 VIP 地址的 11211 端口,应无连接中断或超时(需应用层支持重试或长连接复用)

















