在大数据集群或多节点服务器管理中,经常需要重复执行跨节点操作,例如:
逐个节点查看 Java 进程(jps
)
手动同步文件到所有节点
逐台执行相同命令
三个本文将分享三个自定义 Shell 脚本,帮助你一键搞定集群管理,提升运维效率!
一、集群 JPS 查看脚本:jps-cluster.sh
功能
在主节点(如 node01)执行一个命令,直接查看所有集群节点的 Java 进程状态,无需逐个登录节点。
创建步骤
创建脚本文件
vi /usr/local/bin/jps-cluster.sh
-
脚本内容
#!/bin/bash # 定义集群节点列表(根据实际集群修改) nodes=("node01" "node02" "node03") for node in "${nodes[@]}"; do echo "============ ${node} ============" # 通过SSH执行jps命令,-q参数隐藏端口信息 ssh $node "jps -q | xargs -I {} echo {} \$(ls /proc/{} | grep cmdline | xargs -I {} cat {} | cut -d' ' -f1)" done
-
赋予执行权限
chmod +x /usr/local/bin/jps-cluster.sh
-
使用示例
jps-cluster.sh
输出效果:
============ node01 ============ 12345 com.example.App 67890 org.apache.hadoop.dfs.NameNode ============ node02 ============ 23456 com.example.Worker 78901 org.apache.hadoop.dfs.DataNode
二、文件同步分发脚本:xsync.sh
功能
通过一个命令将文件 / 文件夹同步到所有集群节点,基于rsync
实现高效增量传输,避免手动逐个节点拷贝。
前提条件
所有节点已安装rsync
:
yum install -y rsync # CentOS/RHEL系
创建步骤
-
创建脚本文件
touch /usr/local/bin/xsync.sh && chmod +x $_
-
脚本内容
#!/bin/bash # 获取输入参数,至少1个参数 pcount=$# if [ $pcount -lt 1 ]; then echo "Usage: $0 <file_or_dir> [file_or_dir...]" exit 1 fi # 集群节点列表(根据实际修改) nodes=("node02" "node03") for file in "$@"; do if [ ! -e $file ]; then echo "Error: $file does not exist!" continue fi # 获取文件绝对路径 abs_path=$(realpath $file) # 获取文件名/目录名 name=$(basename $abs_path) # 获取父目录 parent_dir=$(dirname $abs_path) for node in "${nodes[@]}"; do echo "Syncing $abs_path to $node..." # 递归创建目录(如果不存在) ssh $node "mkdir -p $parent_dir" # 增量同步(-a:归档模式,-v:详细输出) rsync -av --delete $abs_path $node:$parent_dir echo "Done." done done
-
使用示例
- 同步单个文件:
xsync.sh /etc/hosts
- 同步整个目录:
xsync.sh /opt/apps/hadoop/
- 同步单个文件:
三、跨节点命令执行脚本:xcall.sh
功能
在所有集群节点上同时执行相同命令,例如安装软件、更新配置等,避免逐台登录操作。
创建步骤
-
创建脚本文件
vi /usr/local/bin/xcall.sh
-
脚本内容
#!/bin/bash # 集群节点列表(根据实际修改) nodes=("node01" "node02" "node03") # 检查是否有命令参数 if [ $# -eq 0 ]; then echo "Usage: $0 <command>" exit 1 fi for node in "${nodes[@]}"; do echo "============ ${node} ============" # 通过SSH执行命令,保留终端交互(-t参数可选) ssh -t $node "$@" done
-
使用示例
- 批量安装软件:
xcall.sh yum install -y ntpdate
- 批量执行命令(需注意路径问题):
# 若jps不在环境变量中,需使用全路径或创建软链接 xcall.sh /opt/jdk/bin/jps # 或先创建软链接: xcall.sh ln -s /opt/jdk/bin/jps /usr/local/bin/jps xcall.sh jps
- 批量安装软件: