在Linux系统中,集群管理是企业级应用中不可或缺的一部分,它确保了高可用性、负载均衡和故障转移,为了有效监控和管理集群状态,Linux提供了多种工具,其中clustat
命令是针对LinuxHA(High Availability)项目,特别是基于Pacemaker和Corosync的集群环境设计的核心工具之一。clustat
命令以其简洁直观的输出格式,帮助管理员快速了解集群的当前状态、资源分配、节点健康状况以及相关事件日志,从而实现对集群运行状况的实时把控和故障诊断。

clustat
命令通常作为pacemaker
或linux-ha
软件包的一部分进行安装,在大多数基于Debian或Ubuntu的系统中,可以通过sudo apt-get install pacemaker
来安装;而在基于Red Hat、CentOS或Rocky Linux的系统中,则可能通过sudo yum install pacemaker
或sudo dnf install pacemaker
来获取,安装完成后,clustat
命令即可在集群的任意节点上使用,前提是该节点已正确配置并运行了集群服务。
clustat
命令的基本用法非常简单,直接在终端输入clustat
即可,默认情况下,它会显示一个简化的集群状态概览,包括集群名称、当前时间、以及最重要的节点状态和资源状态,一个典型的输出可能类似于:
Cluster status for mycluster at Mon Dec 4 10:30:00 2023
Member Status:
Node Status
node1 Online
node2 Online
node3 Online
Listed resources:
Resource Group: webgroup
ip (ocf::heartbeat:IPaddr2): Started node1
apache (systemd:httpd): Started node1
Failed Actions:
* None *
在这个示例中,首先展示了集群名称和当前时间。“Member Status”部分列出了所有集群成员节点及其状态,Online
表示节点正常且与集群通信正常,然后是“Listed resources”部分,这里显示了集群中定义的资源,包括资源组(如webgroup
)以及该组下的具体资源(如虚拟IPip
和Apache服务apache
),每个资源后面都标注了其当前运行的节点和资源代理(RA)的类型。“Failed Actions”部分记录了最近失败的资源操作,如果没有任何失败,则会显示“ None ”。
为了获取更详细的信息,clustat
命令提供了多种选项,常用的选项包括:

-i
或--interval
:指定刷新间隔,以持续监控集群状态变化。clustat -i 5
会每5秒刷新一次状态输出,类似于watch clustat
的效果,但clustat
的内部实现可能更高效。-l
或--lrm
:显示本地资源管理器(LRM)的详细信息,包括资源的历史操作记录、失败原因等,这对于诊断资源为什么无法启动或停止非常有帮助。-n
或--nodes
:仅显示节点状态信息,不显示资源详情。-s
或--summary
:仅显示集群的总体摘要信息,如集群名称、时间、节点数量、资源数量等。-q
或--quiet
:静默模式,只输出错误信息,通常用于脚本中检查集群状态。-v
或--verbose
:显示更详细的输出,包括更多的资源属性和状态信息。-h
或--help
:显示帮助信息。-V
或--version
:显示clustat
命令的版本信息。
使用clustat -l
可以查看每个资源的详细操作历史:
...
Resource: ip (ocf::heartbeat:IPaddr2)
Operations:
monitor: Mon Dec 4 10:25:00 2023 node1: 200 (OK)
start: Mon Dec 4 10:20:00 2023 node1: 0 (OK)
stop: Mon Dec 4 10:15:00 2023 node1: 0 (OK)
...
这些信息可以帮助管理员追踪资源的行为模式,定位问题根源。clustat
的输出虽然以文本形式为主,但其结构清晰,易于人类阅读和脚本解析,对于更复杂的集群环境,理解clustat
的输出是进行日常维护和故障排除的基础。
clustat
命令显示的状态信息主要来源于Pacemaker集群管理器和Corosync一致性服务,Pacemaker负责集群资源的高可用性管理,决定资源的放置、启动、停止和故障转移;而Corosync则负责节点间的通信和成员管理,确保集群视图的一致性。clustat
通过查询Pacemaker的CIB(Cluster Information Base,集群信息库)和状态文件来获取这些信息,CIB是集群的“事实来源”,记录了集群的期望配置和当前状态,当集群发生事件(如节点故障、资源迁移)时,Pacemaker会更新CIB,clustat
则实时反映这些变化。
在故障排查场景中,clustat
往往是第一个被调用的工具,如果发现某个资源处于Failed
状态,管理员可以立即使用clustat -l
查看该资源的详细操作日志,了解失败的具体原因(如资源代理脚本返回错误、依赖的服务未启动、IP地址冲突等),如果发现节点状态为Offline
或Standby
,则需要检查该节点的网络连接、Corosync服务状态以及Pacemaker服务日志,以确定是节点本身故障还是与集群的通信中断。clustat
的快速状态反馈能力,极大地缩短了问题定位的时间。
除了实时监控,clustat
还可以用于验证集群配置变更后的结果,当管理员使用crm
命令行工具修改了资源的位置约束或属性后,可以通过clustat
观察资源是否按照预期迁移到新的节点,或者新的属性是否生效,这种即时的反馈机制,使得集群配置调整过程更加可控和高效。
值得注意的是,clustat
的输出格式可能会因Pacemaker和Corosync的版本不同而略有差异,在查阅相关文档或寻求技术支持时,了解当前使用的集群软件版本是非常重要的,虽然clustat
非常强大,但它主要提供的是状态概览和历史操作记录,对于更深入的调试,可能需要结合其他工具,如crm_mon
(提供更详细的集群视图和事件流)、corosync-cfgtool
(用于检查和重置Corosync通信)、pcs
(Pacemaker/Corosync的配置工具)以及查看系统日志(/var/log/syslog
或/var/log/messages
中的Pacemaker和Corosync相关日志)。
clustat
命令是Linux集群管理员手中的一把“瑞士军刀”,它以其简洁、直观、高效的特点,成为日常集群监控、状态检查和初步故障诊断的首选工具,熟练掌握clustat
的各种选项和输出解读方法,对于保障Linux集群的稳定运行至关重要,通过持续观察clustat
提供的实时状态,管理员能够及时发现潜在问题,快速响应集群事件,确保关键业务应用的高可用性。
相关问答FAQs
问题1: clustat
命令显示节点状态为“Offline”,可能的原因有哪些?如何排查?
解答: 节点状态显示为“Offline”通常意味着该节点已经无法与集群中的其他节点通过Corosync进行正常通信,可能的原因包括:
- 网络问题:节点与集群网络之间的物理连接中断(如网线松动、交换机故障)、IP地址配置错误、子网掩码或网关设置不当,或者防火墙(如iptables、firewalld)阻止了Corosync所需的端口(默认为UDP 5405和5404)。
- Corosync服务未运行或异常:在该节点上,
corosync
服务可能没有启动,或者启动失败,可以通过systemctl status corosync
命令检查服务状态,并查看/var/log/corosync.log
或/var/log/syslog
中的错误日志。 - 节点系统故障:节点本身可能发生严重故障,如操作系统崩溃、内核panic、关键服务(如网络服务)无法启动,导致节点完全无响应。
- Pacemaker服务问题:虽然较少见,但Pacemaker服务的异常也可能导致节点状态显示不正确,但通常Corosync的通信是首要检查点。
排查步骤:
- 从其他在线节点尝试ping该离线节点的管理IP,检查基本网络连通性。
- 检查防火墙规则,确保Corosync和Pacemaker(如TCP 3121)的通信端口未被阻止。
- 登录到离线节点(如果可能),检查
corosync
和pacemaker
服务的运行状态:systemctl status corosync pacemaker
。 - 查看Corosync的详细日志:
journalctl -u corosync -f
,寻找错误或超时信息。 - 检查系统日志:
journalctl -xe
,查找与网络、服务启动相关的错误。 - 如果确认是节点自身硬件或系统问题,可能需要修复节点或将其从集群中移除(使用
crm node delete
命令)。
问题2: 如何使用clustat
命令持续监控集群状态,并将输出保存到日志文件中?
解答: 要持续监控集群状态,可以使用clustat
命令的-i
(或--interval
)选项来指定刷新间隔,并结合重定向操作符>
或>>
将输出保存到日志文件中。
- 实时监控并保存:使用
clustat -i <秒数>
命令,它会每隔指定的秒数刷新一次状态,要每5秒刷新一次并将输出实时追加到/var/log/cluster_status.log
文件中,可以使用以下命令:clustat -i 5 >> /var/log/cluster_status.log
注意:使用
>>
是追加模式,这样可以保留历史记录,如果希望每次启动监控时覆盖旧文件,可以使用>
,但通常不推荐,因为它会丢失之前的监控数据。 - 后台运行:为了在终端关闭后也能继续监控,可以将命令放入后台运行,使用
nohup
命令可以使得进程在用户退出后仍然继续运行,并且输出会被重定向到nohup.out
文件,除非指定了其他输出文件。nohup clustat -i 5 >> /var/log/cluster_status.log &
这条命令会在后台启动
clustat
,每5秒将状态追加到/var/log/cluster_status.log
,并且即使你退出SSH会话,它也会继续运行,你可以使用jobs
命令查看后台任务,或使用ps aux | grep clustat
来确认进程是否仍在运行。 - 停止监控:如果需要停止后台运行的
clustat
,可以使用pkill
命令:pkill clustat
这会终止所有名为
clustat
的进程,如果需要更精确地终止,可以先找到其进程ID(PID),然后使用kill <PID>
。
通过这种方式,管理员可以建立集群状态的持续记录,这对于事后分析集群在特定时间段内的行为、追踪间歇性故障或进行容量规划都非常有价值。