crm_mon 是 Pacemaker 集群中查看实时资源状态最直接的命令,但默认不显示已停止/禁用资源且不自动刷新,需用 -1 获取单次快照,配合 -A、-r 等参数可全面诊断资源状态与异常原因。

crm_mon 是 Pacemaker 集群中查看实时资源状态最直接的命令,但默认行为容易让人误判“没输出=没资源”或“只看到部分信息”。它不显示已停止/禁用资源,也不默认刷新——这点必须手动干预。
crm_mon 基础用法与常见空白输出原因
直接运行 crm_mon 会进入交互式实时监控模式,但若集群无活跃资源、或 corosync 未完全启动、或 CIB 中资源被 disable,界面可能为空或只显示节点列表。这不是命令失效,而是当前无符合“活动且已 start”的资源。
- 确保 corosync 和 pacemaker 服务均已启动:
systemctl status corosync pacemaker - 检查是否有资源被显式 disable:
crm configure show | grep "meta.*target-role=Stopped" - 确认资源 agent 是否可用:
crm ra list ocf heartbeat(例如IPaddr2必须存在)
crm_mon -1 输出一次性快照并退出
生产环境排查时,更推荐用 crm_mon -1 获取单次快照——避免卡在交互界面,也方便管道处理或脚本调用。加上 -A 可显示所有属性(如 resource-stickiness),-r 显示资源操作历史(如最近一次 monitor 失败时间)。
- 常用组合:
crm_mon -1 -A -r - 只关注资源状态(过滤掉节点和摘要):
crm_mon -1 | sed -n '/Resources:/,/^$/p' - 若提示
ERROR: No such file or directory,说明 CIB 还未生成,需先执行crm configure commit或重启 pacemaker
资源状态字段含义与典型异常信号
crm_mon -1 输出中,每行资源后跟的状态(如 Started node1、Failed node2、Unmanaged)是关键判断依据:
-
Started:资源已成功启动,且未被约束阻止 -
Failed:上一次 start/monitor 操作返回非零退出码,crm resource cleanup <resourcename>可清空失败标记 -
Unmanaged:该资源被设为 unmanaged 状态(crm resource unmanage <name>),不会被自动恢复,即使节点重启也不会拉起 -
Blocked:通常因约束冲突(如 colocation 无法满足)或资源依赖未就绪
替代方案:当 crm_mon 不可用或权限受限时
某些最小化系统未装 crmsh 包,或用户只有只读权限,可绕过 crm_mon 直接查底层状态:
- 看 pacemaker 进程是否持有 CIB 锁:
pcs status(如果 pcs 已安装) - 查资源实际运行痕迹:
pcs resource config+ps aux | grep -E "(IPaddr2|pgsql)" - 读取原始 CIB XML 并过滤资源段:
crm configure show xml | xmllint --xpath '//primitive' - 2>/dev/null - 注意:
crm status是旧版别名,新版本已弃用,应统一用crm_mon
真正容易被忽略的是:资源状态滞后于实际进程。比如 IPaddr2 的 VIP 已在网卡上消失,但 crm_mon 仍显示 Started,这往往意味着 monitor 操作间隔太长(默认 60s),或 agent 自身未正确报告状态——此时必须检查 op monitor interval=... 是否设置合理,以及日志里 /var/log/cluster/corosync.log 是否有 agent timeout 记录。


















