PDSH工具

pdsh(Parallel Distributed Shell)是一个开源工具,它允许用户在多个远程服务器上并行执行shell命令。pdsh特别适用于由于其并行特性而需要在大量节点上执行命令的集群环境。与使用ssh在每个节点上顺序执行命令相比,pdsh可以大大提高执行效率。

安装PDSH

首先下载pdsh工具,下载地址:https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/pdsh/pdsh-2.29.tar.bz2

解压压缩包

tar -jxvf pdsh-2.29.tar.bz2

安装编译软件

yum -y install gcc-c++

安装编译pdsh工具

./configure --prefix=/root/software/pdsh-2.29 --with-ssh --without-rsh --with-exec --with-timeout=60 --with-nodeupdown --with-rcmd-rank-list=ssh
make && make install

或者

./configure --prefix=/opt/hpc/software/pdsh/2.29 \
            --with-ssh \
            --without-rsh \
            --with-genders \
            --with-dshgroups \
            --with-netgroup \
            --with-nodeupdown \
            --with-slurm \
            --with-fanout=64 \
            --with-timeout=20

make && make install

指定安装目录:

--prefix=/opt/hpc/software/pdsh/2.29:设置 pdsh 的安装目录。

启用和禁用模块:

--with-ssh:启用 SSH 支持。

--without-rsh:禁用 RSH 支持(默认启用)。

--with-nodeupdown:启用动态消除下线节点的支持。

指定机器列表文件:

--with-machines=/path/to/machines:使用一个平面文件列表来指定机器名。

启用 genders 数据库支持:

--with-genders:启用 genders 数据库支持,用于节点分组和管理。

启用 dsh 风格的组文件支持:

--with-dshgroups:启用对 dsh 风格的组文件的支持,用于主机的包含/排除列表。

启用 netgroups 支持:

--with-netgroup:启用 netgroups 支持(通过 /etc/netgroup 或 NIS)。

指定默认 fanout 和 timeout:

--with-fanout=N:指定默认的 fanout 数(并行执行命令的最大节点数,默认为 32)。

--with-timeout=N:设置默认的连接超时时间(默认为 10 秒)。

启用 readline 库:

--with-readline:使用 GNU readline 库来解析交互模式中的输入。

在 SLURM 或 RMS 分配下运行:

--with-slurm:支持在 SLURM 分配下运行。

--with-rms:支持在 RMS 分配下运行。

将pdsh命令写入环境变量

vim /root/.bashrc
export PATH=/root/software/pdsh-2.29/bin:$PATH

声明环境变量后即可使用

source /root/.bashrc

使用示例

[< KVM >root@sys001][~/software/pdsh-2.29/bin]
# pdsh -w sys[001-002],psn[001-002] hostname
sys001: sys001
psn002: psn002
sys002: sys002
psn001: psn001

问题排查

问题描述

使用pdsh工具出现以下报错信息

[< KVM >root@sys001][~/software/pdsh-2.29/bin]
# pdsh -w sys002 hostname
pdsh@sys001: /root/software/pdsh-2.29/lib/sshcmd.so: [rcmd/ssh] already loaded from [/root/software/pdsh-2.29/lib//sshcmd.so]
段错误 (核心已转储)

问题解决

查看so文件是否存在

ll /root/software/pdsh-2.29/lib/sshcmd.so

将其移除(本次采用更改名称的方法)

mv /root/software/pdsh-2.29/lib/sshcmd.so /root/software/pdsh-2.29/lib/sshcmd.so.bak
mv /root/software/pdsh-2.29/lib/execcmd.so /root/software/pdsh-2.29/lib/execcmd.so.bak