CentOS8 安装配置使用 pdsh 并行分布式shell

pdsh

parallel distributed shell 可以在多台服务器上一起执行命令

pdsh使用前要先配置ssh免密CentOS8 设置无密码SSH,SSH免密


下载地址
https://sourceforge.net/projects/pdsh/

安装
[root@dev10 opt]# tar -jxvf pdsh-2.26.tar.bz2
[root@dev10 opt]# cd pdsh-2.26
[root@dev10 pdsh-2.26]# ./configure \
--without-rsh \
--with-ssh \
--with-machines=/etc/pdsh/machines \
--with-dshgroups \
--with-netgroup \
--with-timeout=10

有哪些配置请参考pdsh-2.26/README文件。
[root@dev10 pdsh-2.26]# make && make install

[root@dev10 pdsh-2.26]# pdsh -V
pdsh-2.26
rcmd modules: ssh,exec (default: ssh)
misc modules: machines

相关文件

mkdir /etc/pdsh

vi /etc/pdsh/machines (pdsh要一起操作的机器名)
dev10
dev11
dev12
dev13


/usr/local/bin/pdsh
/usr/local/lib/pdsh

pdsh 样例

[root@dev10 pdsh-2.26]# pdsh -a date
dev10: 2020年 05月 16日 星期六 13:52:18 CST
dev12: 2020年 05月 16日 星期六 13:52:18 CST
dev11: 2020年 05月 16日 星期六 13:52:18 CST
dev13: 2020年 05月 16日 星期六 13:52:18 CST

pdsh命令窗口,执行多条命令

[root@dev10 ~]# pdsh -a
pdsh> pwd
dev10: /root
dev11: /root
dev12: /root
dev13: /root
pdsh> exit

一次执行多条命令,包括cd

[root@dev10 pdsh-2.26]# pdsh -a "cd /opt; tar -zxvf jdk-8u192-linux-x64.tar.gz"

在范围内执行

[root@dev10 ~]# pdsh -w dev11,dev12,dev13 hostname
dev11: dev11
dev13: dev13
dev12: dev12

[root@dev10 ~]# pdsh -w dev[11-12,13] hostname
dev11: dev11
dev12: dev12
dev13: dev13

[root@dev10 ~]# pdsh -w ssh:root@dev[11-13] hostname
dev13: dev13
dev11: dev11
dev12: dev12

复制文件

[root@dev10 ~]# pdcp -w ssh:root@dev[11,12-13] /opt/testFile.txt /opt
[root@dev10 ~]# pdsh -a ls -lrt /opt | grep testFile
dev10: -rw-r--r--.  1 root root         0 5月  17 10:16 testFile.txt
dev12: -rw-r--r--.  1 root root         0 5月  17 10:18 testFile.txt
dev13: -rw-r--r--.  1 root root         0 5月  17 10:18 testFile.txt
dev11: -rw-r--r--.  1 root root         0 5月  17 10:18 testFile.txt

复制目录

[root@dev10 ~]# pdcp -r -w ssh:root@dev[11,12-13] /opt/testDir /opt
[root@dev10 ~]# pdsh -a ls -lrt /opt | grep testDir
dev13: drwxr-xr-x.  2 root root        24 5月  17 10:21 testDir
dev10: drwxr-xr-x.  2 root root        24 5月  17 10:17 testDir
dev12: drwxr-xr-x.  2 root root        24 5月  17 10:21 testDir
dev11: drwxr-xr-x.  2 root root        24 5月  17 10:21 testDir

环境变量的问题

使用pdsh,在/etc/profile下配的环境变量无效,

[root@dev10 ~]# pdsh -a "java -version"
dev13: bash: java: command not found
pdsh@dev10: dev13: ssh exited with exit code 127
dev10: bash: java: command not found
pdsh@dev10: dev10: ssh exited with exit code 127
dev11: bash: java: command not found
pdsh@dev10: dev11: ssh exited with exit code 127
dev12: bash: java: command not found
pdsh@dev10: dev12: ssh exited with exit code 127

[root@dev10 ~]# pdsh -a "source /etc/profile;java -version"
dev11: java version "1.8.0_192"
dev11: Java(TM) SE Runtime Environment (build 1.8.0_192-b12)
dev11: Java HotSpot(TM) 64-Bit Server VM (build 25.192-b12, mixed mode)
dev10: java version "1.8.0_192"
dev10: Java(TM) SE Runtime Environment (build 1.8.0_192-b12)
dev10: Java HotSpot(TM) 64-Bit Server VM (build 25.192-b12, mixed mode)
dev13: java version "1.8.0_192"
dev13: Java(TM) SE Runtime Environment (build 1.8.0_192-b12)
dev13: Java HotSpot(TM) 64-Bit Server VM (build 25.192-b12, mixed mode)
dev12: java version "1.8.0_192"
dev12: Java(TM) SE Runtime Environment (build 1.8.0_192-b12)
dev12: Java HotSpot(TM) 64-Bit Server VM (build 25.192-b12, mixed mode)

可以在/etc/bashrc下把/etc/profile配的内容再配一遍,就可以了,

[root@dev10 ~]# pdsh -a "java -version"
dev12: java version "1.8.0_192"
dev12: Java(TM) SE Runtime Environment (build 1.8.0_192-b12)
dev12: Java HotSpot(TM) 64-Bit Server VM (build 25.192-b12, mixed mode)
dev10: java version "1.8.0_192"
dev10: Java(TM) SE Runtime Environment (build 1.8.0_192-b12)
dev10: Java HotSpot(TM) 64-Bit Server VM (build 25.192-b12, mixed mode)
dev11: java version "1.8.0_192"
dev11: Java(TM) SE Runtime Environment (build 1.8.0_192-b12)
dev11: Java HotSpot(TM) 64-Bit Server VM (build 25.192-b12, mixed mode)
dev13: java version "1.8.0_192"
dev13: Java(TM) SE Runtime Environment (build 1.8.0_192-b12)
dev13: Java HotSpot(TM) 64-Bit Server VM (build 25.192-b12, mixed mode)

命令帮助

[root@dev10 ~]# pdsh -h
Usage: pdsh [-options] command ...
-S                return largest of remote command return values
-h                output usage menu and quit
-V                output version information and quit
-q                list the option settings and quit
-b                disable ^C status feature (batch mode)
-d                enable extra debug information from ^C status
-l user           execute remote commands as user
-t seconds        set connect timeout (default is 10 sec)
-u seconds        set command timeout (no default)
-f n              use fanout of n nodes
-w host,host,...  set target node list on command line
-x host,host,...  set node exclusion list on command line
-R name           set rcmd module to name
-M name,...       select one or more misc modules to initialize first
-N                disable hostname: labels on output lines
-L                list info on all loaded modules and exit
-g groupname      target hosts in dsh group "groupname"
-X groupname      exclude hosts in dsh group "groupname"
-a                target all nodes
available rcmd modules: ssh,exec (default: ssh)


报错处理

[root@dev13 pdsh-2.26]# pdsh -a hostname
dev13: ssh_askpass: exec(/usr/libexec/openssh/ssh-askpass): No such file or directory
dev13: Host key verification failed.
pdsh@dev13: dev13: ssh exited with exit code 255
dev12: ssh_askpass: exec(/usr/libexec/openssh/ssh-askpass): No such file or directory
dev12: Host key verification failed.
pdsh@dev13: dev12: ssh exited with exit code 255
dev11: ssh_askpass: exec(/usr/libexec/openssh/ssh-askpass): No such file or directory
dev11: Host key verification failed.
pdsh@dev13: dev11: ssh exited with exit code 255

把SSH免密配上就好了

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值