在Linux系统管理和监控中,crm_mon
命令是Pacemaker集群管理工具中的一个关键组件,主要用于实时监控集群的当前状态、资源运行情况、节点状态以及集群配置信息,作为Corosync和Pacemaker集群的核心监控工具,crm_mon
提供了命令行界面,帮助管理员快速排查集群故障、验证资源分配合理性,并确保集群的高可用性,以下将详细介绍crm_mon
命令的功能、常用参数、输出解析及实际应用场景。

crm_mon
命令的核心功能
crm_mon
(Cluster Resource Monitor)通过查询Pacemaker的CIB(Cluster Information Base)和集群状态,生成集群的实时或静态视图,其核心功能包括:
- 集群状态监控:显示集群是否处于在线(Online)、离线(Offline)、维护模式(Maintenance Mode)等状态。
- 节点状态管理:列出集群中所有节点的名称、状态(如Up/Down)、角色(如Member/Remote)以及最后一次联系时间。
- 资源追踪:展示集群中定义的资源(如VIP、数据库、服务等)的运行状态(Started/Stopped)、所属节点、运行时间以及监控操作历史。
- 资源约束分析:通过显示位置约束(Location Constraint)、排序约束(Colocation Constraint)等,帮助管理员理解资源分配规则。
- 操作历史记录:记录资源的启动、停止、迁移等操作,便于故障回溯。
crm_mon
命令的常用参数
crm_mon
支持丰富的命令行参数,以满足不同的监控需求,以下是常用参数及其作用:
参数 | 说明 |
---|---|
-1 (或--one-shot ) |
输出一次集群状态后退出,适合脚本调用或快速查看。 |
-r (或--resources ) |
仅显示资源信息,不显示节点和集群状态。 |
-n (或--nodes ) |
仅显示节点信息。 |
-R (或--resource-operations ) |
显示资源的操作历史(如启动、停止时间)。 |
-f (或--forever ) |
持续监控集群状态,每隔一定时间(默认3秒)刷新输出,适合实时跟踪。 |
-i (或--interval= ) |
与-f 配合使用,指定刷新间隔(单位:秒)。 |
-d (或--daemonize ) |
以守护进程模式运行,将监控日志输出到指定文件(需配合--logfile )。 |
-S (或--show-node-attributes ) |
显示节点的属性(如节点权重、自定义标签)。 |
-p (或--partial ) |
以部分模式显示,即使集群未完全同步(如节点离线)也输出信息。 |
-Q (或--quiet ) |
静默模式,仅输出错误信息,适合与-1 配合用于脚本判断集群状态。 |
-h (或--help ) |
显示帮助信息。 |
-V (或--verbose ) |
输出详细日志,包含调试信息,适合排查复杂问题。 |
crm_mon
输出解析示例
执行crm_mon -1
后,输出内容通常分为以下几个部分:
集群状态摘要
Cluster Summary:
Stack: corosync
Current DC: node1 (version 2.1.4-8.el8) - partition with quorum
Last updated: Mon Oct 10 14:30:00 2023 on node1
Last change: Mon Oct 10 14:25:00 2023 by hacluster via crm_attribute on node1
3 nodes and 2 resources configured
- Stack:集群使用的底层通信栈(如corosync)。
- Current DC:当前集群的Designated Controller(主节点),包含版本和分区状态(
with quorum
表示集群有法定票数)。 - Last updated/Last change:最后更新时间和变更记录。
- Nodes and resources configured:已配置的节点数和资源数。
节点状态
Online: [ node1 node2 node3 ]
- Online:在线节点列表,若节点处于离线状态,会显示为
Offline
。
资源状态
Active Resources:
VIP (ocf:heartbeat:IPaddr2): Started node1
WebService (ocf:heartbeat:apache): Started node2
- 资源名称:如VIP、WebService。
- 资源类型:OCF(Open Cluster Framework)标准资源,后跟提供商和资源名称。
- 运行状态:
Started
表示资源正在运行,Stopped
表示已停止,Failed
表示运行失败。 - 所属节点:资源当前运行的节点。
资源操作历史(-R
参数)
Operations:
VIP 2023/10/10 14:25:00 Started node1
VIP 2023/10/10 14:20:00 Stopped node2
记录资源的启动、停止时间及操作节点。

实际应用场景
-
快速检查集群状态
使用crm_mon -1
可以快速确认集群是否在线、节点是否正常、资源是否运行。crm_mon -1 | grep "Online"
若输出为空或显示
Offline
节点,需立即排查节点网络或服务问题。 -
资源故障排查
当资源(如数据库)频繁故障时,通过crm_mon -R
查看操作历史,结合日志定位问题:crm_mon -R -r | grep "Database"
若发现资源反复在节点间迁移,可能是节点资源不足或约束配置错误。
(图片来源网络,侵删) -
维护模式操作
在节点维护前,需将集群置于维护模式,避免资源自动迁移:crm cluster enter-maintenance # 进入维护模式 crm_mon -1 # 确认资源是否停止 # 维护操作... crm cluster exit-maintenance # 退出维护模式
相关问答FAQs
Q1: crm_mon
显示“partition without quorum”是什么意思?如何解决?
A: “partition without quorum”表示集群分区未达到法定票数(quorum),通常发生在集群节点数量不足(如偶数节点中半数以上离线),此时集群会进入“只读”模式,资源迁移可能被禁止,解决方法:
- 检查离线节点网络或服务状态,尝试恢复节点上线。
- 若临时无法恢复,可通过
crm cluster set no-quorum-policy=ignore
忽略法定票数(需谨慎,可能导致数据不一致)。 - 增加节点数量或调整票数分配(如
crm_attribute -n quorum -v 2
)。
Q2: 如何通过crm_mon
监控资源是否在指定节点运行?
A: 使用crm_mon -r
结合grep
过滤资源名称,查看其运行节点是否符合预期,监控资源VIP
是否在node1
运行:
crm_mon -r | grep "VIP"
若输出显示VIP
运行在node2
,可通过位置约束(Location Constraint)强制其运行在node1
:
crm configure location vip-on-node1 VIP 100: node1
其中100
为权重,数值越高优先级越高。