监控高可用集群主备状态需验证节点逻辑角色、协议认可及协同能力:zabbix执行zabbix_server -r ha_status;mysql+keepalived查vip归属与read_only;rabbitmq用rabbitmqctl cluster_status;redis执行redis-cli cluster nodes;并测试切换机制、配置健康检查、统一采集告警、关注资源瓶颈。

监控高可用集群的主备状态,不能只看进程是否运行或端口是否开放,关键在于确认节点是否真正承担了预期角色(active/standby)、是否被集群协议认可、是否能协同工作。
确认集群内节点角色与在线状态
不同集群类型验证方式不同,但核心是调用其原生命令获取逻辑身份:
-
Zabbix HA:执行zabbix_server -R ha_status,输出中明确显示
state: active或state: standby;同时检查数据库表ha_node_status中status字段和last_seen时间戳是否正常更新 - MySQL + Keepalived(双主/VIP):在各节点分别运行ip a | grep "inet.*192.168"确认VIP归属;再查mysql -e "SHOW SLAVE STATUS\G"或SELECT @@read_only;判断主从角色是否与VIP一致
-
RabbitMQ 镜像队列集群:运行rabbitmqctl cluster_status,查看
running_nodes列表是否完整,并结合rabbitmqctl list_queues name slave_pids确认关键队列是否有同步副本 -
Redis Cluster:执行redis-cli cluster nodes,检查每个节点的flag字段(
master/slave)及connected状态,避免出现fail?或noaddr
验证主备切换机制是否就绪
心跳与故障检测能力必须可测,不能依赖“理论上会切换”:
- 对Keepalived,检查
/var/log/messages或journalctl -u keepalived中是否有VRRP_Instance(VI_1) Entering MASTER STATE类日志;手动停主节点systemctl stop keepalived,观察VIP漂移耗时(通常≤5秒) - 对Zabbix HA,主节点数据库连接中断后,备用节点应在
failover_delay(默认30秒)内完成接管;可通过SELECT * FROM ha_node_status;实时查状态变更 - 所有方案都应配置健康检查脚本(如检测Nginx是否响应、MySQL能否执行简单查询),并确保Keepalived或Zabbix的
track_script已启用且权重设置合理
统一采集与可视化告警
把分散的状态信息收敛到一个看板,避免人工巡检遗漏:
- 用Prometheus + node_exporter采集各节点系统指标(CPU、磁盘、网络),配合mysqld_exporter、rabbitmq_exporter等获取服务层状态
- 在Grafana中建立面板,关键字段包括:
keepalived_state{instance=~".+"}、zabbix_ha_node_status、mysql_slave_status{role="slave"},用颜色区分active/standby/unavailable - 设置告警规则:例如
absent(keepalived_state{state="active"}) == 1(无active节点)、zabbix_ha_node_status == 0(节点失联超2分钟)
关注资源瓶颈对主备状态的隐性影响
资源不足常导致假性“主备异常”,比如:
- MySQL主库磁盘满 → binlog写失败 → 从库IO线程停止 → 被误判为复制中断
- Zabbix Server JVM内存溢出 → 心跳更新卡顿 → 备节点误触发切换
- RabbitMQ磁盘使用率>95% → 自动阻塞生产者 → 连接看似正常但消息积压
- 所有集群都需监控对应存储目录(
/var/lib/mysql、/var/lib/zabbix、/var/lib/rabbitmq)剩余空间,阈值建议设为85%











