Linux海王 之 pdsh (并行管理工具)
pdsh
是一个多线程
远程shell客户机
,它在多个远程主机
上并行执行命令
pdsh
可以使用几种不同的远程shell服务
,包括标准的rsh
、Kerberos IV
和ssh
- 在使用
pdsh
之前,必须保证
本地主机和要管理远程主机之间的单向信任
pdsh
还附带了pdcp
命令,该命令可以将本地文件批量复制
到远程的多台主机上,这在大规模的文件分发
环境下非常有用- github:
https://github.com/grondo/pdsh
安装
CentOS
系列可以使用yum安装,pdsh
需要epel
源
Linux:~ # wget https://github.com/grondo/pdsh/archive/pdsh-2.31.tar.gz
Linux:~ # tar xf pdsh-2.31.tar.gz -C /usr/local/src/
Linux:~ # cd /usr/local/src/pdsh-pdsh-2.31/
Linux:/usr/local/src/pdsh-pdsh-2.31 # ./configure \
--prefix=/usr/local/pdsh \
--with-ssh \
--with-machines=/usr/local/pdsh/machines \
--with-dshgroups=/usr/local/pdsh/group \
--with-rcmd-rank-list=ssh \
--with-exec && \
make && \
make install
--with-ssh
ssh模块(支持ssh)--with-rcmd-rank-list=ssh
指定默认模式为ssh--with-dshgroups=
指定默认主机组路径--with-machines=
指定默认主机列表- 在该文件中写入主机地址(或主机名,需要在hosts中写好主机解析),每行一个
- 存在machines文件,使用
pdsh
执行时若不指定主机,则默认对machines文件中所有主机执行该命令
--with-exec
exec模块- 其他模块参数可以在
pdsh-pdsh-2.31
目录下使用./configure --help
命令查看
Linux:~ # ll /usr/local/pdsh/bin/
total 516
-rwxr-xr-x 1 root root 8638 Jan 29 22:15 dshbak
-rwxr-xr-x 1 root root 171664 Jan 29 22:15 pdcp
-rwxr-xr-x 1 root root 171664 Jan 29 22:15 pdsh
-rwxr-xr-x 1 root root 171664 Jan 29 22:15 rpdcp
Linux:~ # echo 'export PATH=/usr/local/pdsh/bin:$PATH' >> /etc/profile
Linux:~ # source /etc/profile
"将pdsh的所有命令追加到环境变量中"
Linux:~ # pdsh -V
pdsh-2.31
rcmd modules: ssh,rsh,exec (default: ssh)
misc modules: machines,dshgroup
使用
- 语法:
pdsh <参数> <需要并行执行的命令>
- 如果只输入前面两部分,回车后可进入pdsh交互式命令行(若是编译安装需要启用
--with-readline
),再输入并行执行的命令部分
- 如果只输入前面两部分,回车后可进入pdsh交互式命令行(若是编译安装需要启用
- 常用参数:
-w
指定主机-x
排除指定的主机- 目标主机可以使用Ip地址或主机名(确保该主机名已经在
/etc/hosts
中存在解析) - 多个主机之间可以使用逗号分隔,可重复使用该参数指定多个主机;可以使用简单的正则
- 目标主机可以使用Ip地址或主机名(确保该主机名已经在
-g
指定主机组-G
排除指定主机组-l
目标主机的用户名- 如果不指定用户名,默认以当前用户名作为在目标主机上执行命令的用户名
-N
用来关闭目标主机所返回值前的主机名显示
示例
-w 指定主机
Linux:~ # pdsh -w ssh:192.168.72.12,192.168.72.13,192.168.72.14 date
192.168.72.12: Sun Jan 31 12:35:36 CST 2021
192.168.72.14: Sun Jan 31 12:35:36 CST 2021
192.168.72.13: Sun Jan 31 12:35:36 CST 2021
"pdsh -w ssh:192.168.72.[12-14] date 也可以"
-l 指定用户
Linux:~ # pdsh -w ssh:192.168.72.[12-14] -l linux date
192.168.72.12: Sun Jan 31 12:36:32 CST 2021
192.168.72.13: Sun Jan 31 12:36:32 CST 2021
192.168.72.14: Sun Jan 31 12:36:32 CST 2021
-g指定用户组
Linux:~ # mkdir /usr/local/pdsh/group
Linux:~ # cat > /usr/local/pdsh/group/test1 <<EOF
192.168.72.12
192.168.72.13
192.168.72.14
EOF
Linux:~ # pdsh -g test1 'uname -r'
192.168.72.12: 4.4.73-5-default
192.168.72.14: 4.4.73-5-default
192.168.72.13: 4.4.73-5-default
主机列表
Linux:~ # cat > /usr/local/pdsh/machines <<EOF
192.168.72.12
192.168.72.13
192.168.72.14
EOF
Linux:~ # pdsh -a uptime
192.168.72.12: 12:37pm up 0:08, 2 users, load average: 0.08, 0.13, 0.09
192.168.72.13: 12:37pm up 0:07, 1 user, load average: 0.12, 0.05, 0.01
192.168.72.14: 12:37pm up 0:07, 1 user, load average: 0.00, 0.01, 0.00
交互式界面
"有exec模块即可,或者readline模块"
Linux:~ # pdsh -a
pdsh> date
192.168.72.14: Sun Jan 31 12:38:05 CST 2021
192.168.72.13: Sun Jan 31 12:38:05 CST 2021
192.168.72.12: Sun Jan 31 12:38:05 CST 2021
pdsh> whoami
192.168.72.12: root
192.168.72.14: root
192.168.72.13: root
pdsh> exit "退出交互式界面"