在分布式集群的日常运维工作中,经常需要统计所有节点的运行状态、资源使用情况、服务部署信息等数据,如果逐台登录节点手动查询,不仅效率低下还容易出错。通过Linux Shell结合ssh命令可以实现批量远程执行命令并汇总结果,快速完成集群信息的统计工作。

前置准备:配置ssh免密登录
要实现批量ssh执行命令,首先需要配置当前操作节点到所有集群节点的免密登录,避免每次执行命令都需要输入密码。假设当前操作节点为管理节点,集群节点列表存放在node_list.txt文件中,每行一个节点的IP或主机名。
首先生成管理节点的ssh密钥对,执行以下命令:
# 生成rsa密钥对,一路回车即可 ssh-keygen -t rsa
然后将公钥分发到所有集群节点,执行以下脚本:
# 读取节点列表,逐个分发公钥
while read node; do
ssh-copy-id $node
done < node_list.txt
基础统计:批量执行单条命令
完成免密配置后,就可以通过ssh远程执行单条命令统计信息。比如统计所有节点的内核版本,执行以下命令:
# 遍历节点列表,执行uname -r命令并输出节点和结果
while read node; do
echo "节点: $node"
ssh $node "uname -r"
done < node_list.txt
如果需要统计所有节点的内存使用情况,可以修改远程执行的命令:
# 统计所有节点的内存使用率
while read node; do
echo "节点: $node"
# 获取内存总大小和已用大小,计算使用率
ssh $node "free -m | awk '/Mem/{printf "总内存: %sM, 已用: %sM, 使用率: %.2f%%n", $2, $3, $3*100/$2}'"
done < node_list.txt
复杂统计:封装通用统计脚本
如果需要统计的信息较多,或者需要多次复用统计逻辑,可以封装一个通用的统计脚本。以下是一个统计集群节点基础信息的完整脚本示例:
#!/bin/bash
# 节点列表文件,每行一个节点IP或主机名
NODE_LIST="node_list.txt"
# 结果输出文件
OUTPUT_FILE="cluster_info.txt"
# 清空输出文件
> $OUTPUT_FILE
# 检查节点列表文件是否存在
if [ ! -f "$NODE_LIST" ]; then
echo "节点列表文件 $NODE_LIST 不存在"
exit 1
fi
# 遍历所有节点执行统计
while read node; do
echo "正在统计节点: $node"
# 写入节点标识
echo "===== 节点: $node =====" >> $OUTPUT_FILE
# 统计内核版本
echo "内核版本:" >> $OUTPUT_FILE
ssh $node "uname -r" >> $OUTPUT_FILE
# 统计系统运行时间
echo "运行时间:" >> $OUTPUT_FILE
ssh $node "uptime | awk '{print $3,$4}'" >> $OUTPUT_FILE
# 统计内存信息
echo "内存信息:" >> $OUTPUT_FILE
ssh $node "free -h | awk '/Mem/{print "总内存: "$2", 已用: "$3", 空闲: "$4}'" >> $OUTPUT_FILE
# 统计磁盘使用情况
echo "磁盘使用情况:" >> $OUTPUT_FILE
ssh $node "df -h | grep -v tmpfs | awk '{if(NR==1) print; else if($5+0>70) print}'" >> $OUTPUT_FILE
# 统计CPU负载
echo "CPU负载:" >> $OUTPUT_FILE
ssh $node "top -bn1 | grep load | awk '{print "1分钟负载: "$10", 5分钟负载: "$11", 15分钟负载: "$12}'" >> $OUTPUT_FILE
echo "" >> $OUTPUT_FILE
done < $NODE_LIST
echo "集群信息统计完成,结果已保存到 $OUTPUT_FILE"
将上述脚本保存为cluster_stat.sh,赋予执行权限后运行即可:
chmod +x cluster_stat.sh ./cluster_stat.sh
注意事项
- 如果集群节点数量较多,批量执行ssh命令可能会比较慢,可以结合
parallel命令实现并行执行,提升统计效率。 - 如果部分节点无法连接,脚本会卡住等待超时,可以在ssh命令后添加
-o ConnectTimeout=5参数设置连接超时时间。 - 统计敏感信息时,需要确保执行脚本的用户有足够的权限,避免因为权限不足导致统计结果不完整。
- 如果需要统计的信息涉及服务状态,比如查看所有节点的nginx服务是否运行,可以修改远程执行的命令为
systemctl status nginx | grep Active。
sshLinux_Shell分布式集群集群信息统计修改时间:2026-07-24 00:27:31