在Linux系统中,crm命令是集群资源管理器(Cluster Resource Manager)的核心工具,主要用于配置、监控和管理高可用集群中的资源和服务,它通常与Pacemaker或Corosync等集群框架结合使用,确保集群在节点故障时能够自动迁移资源,维持服务的连续性,以下将详细介绍crm命令的功能、常用选项及实际应用场景。

crm命令的功能涵盖了集群资源的整个生命周期管理,包括资源定义、约束配置、状态监控和故障排查等,通过命令行界面,管理员可以灵活地调整集群配置,而无需直接编辑底层配置文件。crm命令的语法结构通常为crm <子命令> [选项] [参数],其中常见的子命令包括configure、status、resource、node等,每个子命令又包含多个子选项,用于实现不同的管理任务。
在资源管理方面,crm resource子命令是最常用的工具之一。crm resource status可以查看当前集群中所有资源的运行状态,包括资源名称、所在节点和运行状态(如Running、Stopped),若需创建新资源,可使用crm resource create命令,指定资源类型(如VirtualIP、Apache等)、资源参数和唯一标识符,创建一个虚拟IP资源的命令为crm resource create VirtualIP ocf:heartbeat:IPaddr2 ip=192.168.1.100 cidr_netmask=24 op monitor interval=30s,其中ocf:heartbeat:IPaddr2表示使用OC(Open Cluster)标准中的IP地址管理资源代理,op monitor interval=30s定义了监控间隔为30秒,确保资源持续可用。
约束配置是集群高可用性的关键,crm configure子命令提供了强大的约束管理功能,包括资源约束(如资源定位约束、排序约束)和节点约束(如节点属性约束、节点亲和性约束),通过crm configure location命令可以指定资源必须运行在特定节点上,如crm configure location WebServer-Location WebServer 100: node1表示资源WebServer优先运行在node1上,权重为100,而crm configure colocation命令则用于定义资源间的亲和性,例如crm configure colocation WebServer-with-DB inf: WebServer DB表示WebServer资源必须与DB资源运行在同一节点上。
集群状态的实时监控对于故障排查至关重要,crm status和crm node子命令提供了详细的集群状态信息。crm status会输出集群当前的整体状态,包括在线节点、资源分布和操作历史;crm node status则专注于节点的状态,显示节点名称、状态(Online/Offline)和属性,若需查看集群的详细配置历史,可以使用crm configure show命令,它会输出当前集群的所有配置信息,包括资源定义、约束规则和节点属性。

在实际应用中,crm命令的批量操作和脚本化也非常重要,通过crm configure edit可以进入交互式编辑模式,直接修改集群配置;而crm resource cleanup命令则用于清理资源状态,解决资源卡住或无法启动的问题。crm命令还支持XML格式的配置导入导出,方便集群配置的备份和迁移,例如crm configure show xml > cluster_config.xml可将当前配置导出为XML文件。
以下是crm命令常用子命令的简要总结:
| 子命令 | 功能描述 | 常用示例 |
|---|---|---|
crm resource |
管理集群资源(创建、删除、监控) | crm resource status、crm resource create VirtualIP ... |
crm configure |
管理集群配置(资源、约束、属性) | crm configure show、crm configure location WebServer-Location ... |
crm status |
显示集群整体状态 | crm status |
crm node |
管理集群节点状态 | crm node status、crm node standby node1 |
crm history |
查看集群操作历史 | crm history last |
相关问答FAQs
Q1: 如何解决crm命令执行时提示“connection failed: Invalid argument”错误?
A1: 该错误通常是由于集群服务未启动或网络配置问题导致,可按以下步骤排查:
- 检查Pacemaker和Corosync服务状态,执行
systemctl status pacemaker corosync,确保服务正在运行; - 验证集群通信是否正常,使用
corosync-cfgtool -s检查节点间网络连接; - 检查防火墙设置,确保TCP端口如
5403(Corosync)和31000(Pacemaker)未被阻塞; - 若使用虚拟IP,确保资源代理(如
IPaddr2)已正确安装。
Q2: 如何通过crm命令将资源强制迁移到指定节点?
A2: 可结合crm resource和crm configure命令实现:

- 首先使用
crm resource move <资源名> <目标节点>将资源迁移到目标节点,例如crm resource move WebServer node1; - 若需永久固定资源位置,可添加约束:
crm configure location <约束名> <资源名> 100: <目标节点>; - 若需取消迁移约束,执行
crm resource unmove <资源名>,注意,强制迁移可能导致资源短暂中断,建议在维护窗口操作。
