导读:本期聚焦于林则安创作的《如何用 crm_mon 实现 Pacemaker 集群的实时监控与故障排查》,敬请观看详情。当生产环境的 Pacemaker 集群突然发生资源切换,运维人员往往需要在几十秒内看清是哪个节点掉线、哪条约束失效。crm_mon 作为 Pacemaker 自带的命令行监控工具,能够实时输出集群状态、节点健康度与资源运行位置。它支持交互式刷新、XML 格式导出以及仅显示变更事件等多种模式,既可以在终端直接观察,也能被脚本周期性调用。理解其输出字段含义与常见参数组合,是构建高可用巡检体系的第一步。不少人误以为必须部署图形界面才能监控集群,其实单靠 crm_mon 配合系统日志就能完成绝大多数日常观测任务。

Pacemaker 作为 Linux 高可用集群资源管理器,负责在多个节点间调度和故障转移资源。在真实运维场景中,管理员最关心的就是集群此刻是否健康、资源跑在哪个节点、有没有待处理的失败操作。crm_mon 是 Pacemaker 套件里专门用于实时监控集群状态的命令行工具,不需要额外安装组件,只要集群软件正常运行就能使用。它直接读取 CIB(集群信息库)并通过内部的事件流推送更新,因此看到的几乎是最新的决策结果。

如何用 crm_mon 实现 Pacemaker 集群的实时监控与故障排查

一、crm_mon 的基础输出结构与字段解析

直接执行 crm_mon 命令,工具会进入全屏交互模式,默认每秒刷新一次。屏幕顶部展示集群名称、栈类型(如 corosync)、以及当前 DC(Designated Controller)节点。中间部分按节点列出在线状态,再往下是资源段,每一个资源会显示其目标角色、实际运行节点和最近操作返回码。理解这些字段是排查问题的前提,例如节点后若出现 lost 标记,说明该节点在 corosync 层已经不通。

资源行中最容易忽视的是 Failed Actions 区域。当某个资源启动超时或被监控系统查出异常,这里会列出失败的操作名与退出原因。很多初学者只盯着资源是否 Started,却漏掉隐藏的失败尝试,导致下次切换时旧错误被触发。建议在使用时加上 -f 参数强制展开失败动作,或者在非交互模式用 -r 显示资源明细。

除了人类可读格式,crm_mon 还能输出机器友好形式。例如 crm_mon -X 会打印当前 CIB 的 XML 快照,便于被其他程序解析;crm_mon -x 则以精简 XML 呈现差异。对于需要接入自有监控平台的团队,用定时任务抓取 -X 输出并比对节点计数,是最轻量的健康探测方案,不必引入额外 agent。

二、常用参数组合与脚本化监控实践

在自动化场景中,我们通常不会保留交互界面,而是让 crm_mon 跑一次就退出。参数 -1 表示只输出当前状态并结束进程,非常适合写进 shell 脚本。配合 -r 显示资源、-n 显示节点、-t 设置超时,可以构造出稳定的巡检命令。下面示例展示如何检查集群是否全节点在线,并在异常时记录日志:

#!/bin/bash
# 使用 crm_mon 一次性输出并提取离线节点
OUTPUT=$(crm_mon -1 -n 2>/dev/null)
OFFLINE=$(echo "$OUTPUT" | grep -c "Offline")
if [ "$OFFLINE" -gt 0 ]; then
    echo "$(date) 集群存在离线节点,请检查 corosync 服务" >> /var/log/cluster_check.log
    exit 1
fi
echo "$(date) 集群节点全部在线" >> /var/log/cluster_check.log

上述脚本把标准错误丢弃,避免权限警告干扰解析。实际生产里,还要注意运行身份:crm_mon 读取 CIB 需要足够的 pacemaker 权限,一般通过 sudo 或者放在 root 的 cron 中执行。如果集群启用了 ACL,普通用户可能只能看到被授权的资源,此时脚本取到的结果并不代表全局状态,这一点在跨团队共享监控时要特别说明。

另一个实用参数是 -e,它让 crm_mon 只显示自启动以来发生变化的事件,类似增量日志。把它和 -1 结合,可以做“变更捕获”:当有人手动迁移资源或节点重启,事件行会立刻出现。对于安全审计,这种增量流比全量快照更容易追踪谁在什么时候动了集群。下面的代码展示如何用管道过滤出迁移类事件:

# 捕获资源迁移事件并告警
crm_mon -e -1 | grep -i "migrate" > /tmp/migrate_event.log
if [ -s /tmp/migrate_event.log ]; then
    echo "检测到资源迁移,内容如下:" 
    cat /tmp/migrate_event.log
fi

三、基于 crm_mon 的故障排查思路与误区

当集群发生脑裂或资源反复重启,第一步应是退出花哨的面板,直接用 crm_mon -rf 看失败动作与节点权重。常见误区是看到资源不在首选节点就断定配置错,其实可能是位置约束得分(score)被临时故障拉低。crm_mon 显示的 balancescore 信息能帮助判断调度逻辑,而不是盲目修改资源配置。结合 crm_moncrm_verify 校验,往往能发现重复 ID 或相互矛盾的约束。

有些团队试图用 watch crm_mon 代替原生刷新,这是不推荐的。因为 watch 只是周期性重跑命令,无法利用 Pacemaker 内部的推送机制,既浪费 CPU 又可能错过秒级切换。正确做法是用 crm_mon 自带循环,或采用 -i 指定间隔。此外,在容器化部署的 Pacemaker 中,若 PID 命名空间隔离,crm_mon 可能读不到宿主机的 corosync 套接字,此时应挂载对应卷并使用 -h 指定 Unix socket 路径。

最后要提醒,crm_mon 展示的是集群层视角,并不替代操作系统级监控。磁盘满、时钟偏移等底层问题不会直接显示在资源行,但会通过节点 fence 间接反映。因此把 crm_mon 的退出码与节点基础指标(如 uptimentpq)组合报警,才能形成闭环。一个稳健的实时监控方案,应当以 crm_mon 提供集群语义,以传统指标提供基础设施语义,两者互补而非互相取代。

Pacemakercrm_mon集群监控修改时间:2026-08-18 08:04:31

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。