并行分布式运维工具pdsh安装与实战
pdsh全称是parallel distributed shell,可以并行执行对远程目标主机的操作,
利于解决批量执行命令或分发任务的运维需求。适用于大批量服务器的配置,部署,文件复制等运维操作。
此外,pdsh支持交互模式,附带pdcp批量复制命令。
pdsh可以通过多种方式在远程主机上运行命令,默认是rsh方式,另外也支持ssh,mrsh,qsh,mqsh,krb4,xcpu等多种rcmd模块,可以在运行命令是通过参数指定。
前提:使用pssh工具包,必须保证本地主机和管理的远程主机之间的单向信任,
也就是要在本地主机和所有远程服务器上配置密钥认证访问。
下载:https://code.google.com/archive/p/pdsh/downloads
一、建立本地主机和管理的远程主机之间的单向信任
[fieldyang@master~]$ mkdir ~/.ssh
mkdir:无法创建目录"/home/fieldyang/.ssh":文件已存在
[fieldyang@master~]$ chmod 700 ~/.ssh
[fieldyang@master~]$ cd ~/.ssh
1、使用ssh-keygen命令生成基于SSH协议的RSA秘钥,提示保存位置及密钥时,选择默认,方便使用
[[email protected]]$ ssh-keygen -t rsa
Generatingpublic/private rsa key pair.
Enterfile in which to save the key (/home/fieldyang/.ssh/id_rsa):<-----可以输入存放密钥的地址
Enterpassphrase (empty for no passphrase):<-----输入密语,可以为空
Entersame passphrase again:<-----确认密语,可以为空
Youridentification has been saved in /home/fieldyang/.ssh/id_rsa.<-----生成的密钥
Yourpublic key has been saved in /home/fieldyang/.ssh/id_rsa.pub.<-----生成的公钥
Thekey fingerprint is:
e2:56:ea:0d:62:df:4a:30:e2:b2:1f:5c:d8:ce:33:[email protected]
Thekey's randomart image is:
+--[RSA 2048]----+
| |
| |
| |
| o |
| o = . S |
|o = + + |
|.+ B * |
|o = O + |
|...E +.o |
+-----------------+
2、将本地节点生成的公钥文件整合为一个authorized_keys文件,并进行授权
[[email protected]]$ cd ~/.ssh
[[email protected]]$ cat /home/fieldyang/.ssh/id_rsa.pub > authorized_keys
[[email protected]]$ chmod 600 ~/.ssh/authorized_keys
3、将authorized_keys文件复制到远程主机上
[[email protected]]$ scp authorized_keys192.168.56.103:/home/fieldyang/.ssh/
Theauthenticity of host '192.168.56.103 (192.168.56.103)' can't beestablished.
RSAkey fingerprint is 8a:75:1f:1b:16:cd:ac:0c:8a:f5:be:ea:11:42:d1:f6.
Areyou sure you want to continue connecting (yes/no)? yes
Warning:Permanently added '192.168.56.103' (RSA) to the list of known hosts.
[email protected]'spassword:
authorized_keys 100% 408 0.4KB/s 00:00
4、测试ssh密钥认证是否成功建立
[[email protected]]$ ssh slave.field.com date
2017年03月28日星期二17:20:34CST
5、重复以上1~4,在所有的远程主机上执行,即可实现本地主机对所有远程主机的单向通信
二、pdsh的安装与用法
1、源码安装pdsh:
[root@master~]# tar -jxvf pdsh-2.29.tar.bz2
[[email protected]]# ./configure --with-ssh --with-rsh --with-mrsh--with-mqshell --with-qshell --with-dshgroups--with-machines=/etc/pdsh/machines
configure:Cannot support QsNet without libelan3 or libelanctrl!
configure:Cannot support qshell without libelan3 or libelanctrl!
checkingfor pam_start in -lpam... no
configure:Cannot support qshell without libpam
configure:Consider turning off pam support with --without-pam
configure:error: Error configuring qshell
[[email protected]]# make
make:***没有指明目标并且找不到makefile。停止。
[[email protected]]# make install
make:***没有规则可以创建目标“install”。停止。
此处报错,按提示添加--without-pam参数即可正常编译安装
[[email protected]]# ./configure --help
[[email protected]]# ./configure --with-ssh --with-rsh --with-mrsh--with-mqshell --with-qshell --with-dshgroups--with-machines=/etc/pdsh/machines --without-pam
[[email protected]]# make
[[email protected]]# make install
2、用法:
[[email protected]]# 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
列出pdsh执行时的一些配置信息
-b disable ^C status feature (batch mode)
-d enable extra debug information from ^C status
-luser execute remote commands as user
指定在远程主机上使用的用户名。
eg:pdsh -R ssh -l fieldyang -w slave0[1-10] "date"
-tseconds set connect timeout (default is 10 sec)
指定连接远程主机的超时时间,以s为单位,默认是10s
eg:pdsh-R ssh -w slave0[1-10] -t 15 "date"
-useconds set command timeout (no default)
指定远程命令的超时时间,以s为单位,以SSH方式连接时,默认时间是无限
-fn use fanout of n nodes
同时连接到远程主机的数量
-whost,host,... set target node list on command line
指定远程主机,可以指定多台,每台主机用逗号隔开,host可以使主机名或者IP地址,常用的形式有:
pdsh-w ssh:slave01,ssh:slave02,ssh:slave03 "date"
此命令用来查看slave01/02/03主机上的时间,其中ssh表示在远程主机上执行命令的方式,默认是rsh;
pdsh-w ssh:slave0[1-10] "date"
此命令用于在slave01~10主机上执行date命令;
pdsh-w ssh:slave0[10-31],/-$/ "uptime"
此命令在选择远程主机上使用正则表达式,表示选择slave10-31中一1结尾的主机(即11/21/31)执行update命令;
-xhost,host,... set node exclusion list on command line
排除某些或某台主机
eg:pdsh -R ssh -lfieldyang -w slave0[1-9] -x slave05,slave07 "date"
-Rname set rcmd module to name
指定rcmd的模块名,默认是rsh。如果要选择ssh,可以通过如下方式指定:
eg:pdsh -R ssh -w slave0[1-10] "date"
-Mname,... 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
-ggroupname target hosts in dsh group "groupname"
指定一组远程主机,在编译pdsh时可以通过“--with-dshgroups”参数来激活此选项,默认可以将一组主机列表写入一个文件中并放到本地主机的~/.dsh/group或/etc/dsh/group目录下,这样就可以通过-g参数调用了.
eg:pdsh-R ssh -g userhosts "date"
userhosts是一个主机列表文件,可以将其放~/.dsh/group或/etc/dsh/group目录下
-Xgroupname exclude hosts in dsh group "groupname"
用来排除指定组内的所有主机,经常和-a一起使用
eg:pdsh-R ssh -a -X userhosts "date"
-a target all nodes
指定所有的远程主机,设置此参数后,pdsh默认会查看/etc/machines文件中的主机列表,要改变此路径,在编译pdsh时通过“--with-machines”参数指定即可
availablercmd modules: ssh,rsh,exec (default: rsh)
三、pdsh应用实例:此处只用两台机做演示,控制多台远程主机操作相同
1、查看pdsh版本号以及可使用的模块信息
[[email protected]]# pdsh -V
pdsh-2.29
rcmdmodules: ssh,rsh,exec (default: rsh)
miscmodules: machines,dshgroup
2、查看当前所有加载的模块信息
[[email protected]]# pdsh -L
5modules loaded:
Module:misc/dshgroup
Author:Mark Grondona
Descr: Read list of targets from dsh-style "group" files
Active:yes
Options:
-ggroupname target hosts in dsh group "groupname"
-Xgroupname exclude hosts in dsh group "groupname"
Module:rcmd/exec
Author:Mark Grondona
Descr: arbitrary command rcmd connect method
Active:yes
Module:misc/machines
Author:Jim Garlick
Descr: Read list of all nodes from a machines file
Active:yes
Options:
-a target all nodes
Module:rcmd/rsh
Author:Jim Garlick
Descr: BSD rcmd connect method
Active:yes
Module:rcmd/ssh
Author:Jim Garlick
Descr: ssh based rcmd connect method
Active:yes
3、利用pdsh统计主机信息,-w参数后可接多个主机
[fieldyang@master~]$ pdsh -w ssh:192.168.56.103 "uname -r"
192.168.56.103:2.6.32-642.1.1.el6.x86_64
[fieldyang@master~]$ pdsh -w ssh:192.168.56.103 "uname -n"
192.168.56.103:slave.field.com
[fieldyang@master~]$ pdsh -w ssh:192.168.56.103 "uptime"
192.168.56.103: 11:03:17 up 1:33, 2 users, load average: 0.85, 0.89, 0.87
[fieldyang@master~]$ pdsh -wssh:slave.field.com,ssh:slave.field.com,ssh:slave.field.com "date"
slave:2017年03月30日星期四11:21:02 CST
slave:2017年03月30日星期四11:21:02 CST
slave:2017年03月30日星期四11:21:02 CST
4、将主机名写入文件中,利用pdsh批量执行
[root@master~]# mkdir /etc/pdsh/
[root@master~]# vim /etc/pdsh/machines
[root@master~]# chmod 777 /etc/pdsh/machines
[fieldyang@master~]$ more /etc/pdsh/machines
slave.field.com
slave.field.com
slave.field.com
[fieldyang@master~]$ pdsh -R ssh -a uptime
slave: 11:09:32 up 1:40, 2 users, load average: 0.62, 0.71, 0.80
slave: 11:09:32 up 1:40, 2 users, load average: 0.62, 0.71, 0.80
slave: 11:09:32 up 1:40, 2 users, load average: 0.62, 0.71, 0.80
#该例中,演示将所有远程主机主机名都写入到本地主机的/etc/pdsh/machines文件中,
这个路径是在编译pdsh时通过“--with-machines”参数指定的。只需利用-a参数即可在所有主机上执行
5、利用pdsh实现远程主机分组管理
[root@master~]# mkdir /etc/dsh/group
[root@master~]# vim /etc/dsh/group/userhosts
[root@master~]# chmod 777 /etc/dsh/group/userhosts
[fieldyang@master~]$ more /etc/dsh/group/userhosts
slave.field.com
slave.field.com
[fieldyang@master~]$ pdsh -R ssh -g userhosts uptime
slave: 11:13:19 up 1:44, 2 users, load average: 0.55, 0.64, 0.76
#该例中,将某些服务器主机名写入userhosts文件中,利用-g参数调用即可在相关远程主机上执行。
大规模运维环境中,可以分别分为web服务器组,数据库服务器组等。
#要实现远程主机的分组管理,需要激活pdsh的dshgroup模块,也就是在编译的pdsh的时候指定“--with-dshgroups”参数,
激活这个参数后,就可以将不同用途的服务器进行分组,可以不同组主机列表写入不同文件中,
并放到本地主机的~/.dsh/group或/etc/dsh/group目录下。
[fieldyang@master~]$ pdsh -R ssh -a -X userhosts uptime
slave: 11:13:39 up 1:44, 2 users, load average: 0.81, 0.69, 0.77
slave: 11:13:39 up 1:44, 2 users, load average: 0.81, 0.69, 0.77
#-a参数指定所有主机,-X排除某些主机,-R指定ssh模块
6、pdsh在远程主机上执行命令
[fieldyang@master~]$ pdsh -R ssh -g userhosts "rm -rf /home/fieldyang/index.html"
[fieldyang@slave~]$ ll | grep index
#利用pdsh在远程主机上执行删除命令
[fieldyang@master ~]$pdsh -R ssh -g userhosts "sudo /etc/init.d/httpd start"
slave:正在启动httpd:[确定]
#利用pdsh在远程主机上启动某系服务,注意sudo命令需要远程用户启用sudo权限
[fieldyang@master~]$ pdsh -R ssh -g userhosts "sudo mkdir /mnt/test"
[fieldyang@slavemnt]$ ll | grep test
drwxr-xr-x 2 root root 4096 3月3011:18 test
#利用pdsh在远程主机上创建目录
7、pdsh交互模式:
pdsh交互模式和pdsh命令区别不大,只是把在远程执行的命令放到pdsh命令行下执行
[fieldyang@master~]$ pdsh -R ssh -w slave.field.com
pdsh>pwd
slave:/home/fieldyang
pdsh>mkdir mysql
pdsh>echo "slave.field.com">hosts
pdsh>cat hosts
slave:slave.field.com
pdsh>ls -l
slave:总用量476
slave:-rw-rw-r-- 1 fieldyang fieldyang 16 3月3011:28 hosts
slave:drwxrwxr-x 3 fieldyang fieldyang 4096 2月132006 iftop-0.17
slave:-rw-r--r-- 1 root root 160381 3月2910:15 iftop-0.17.tar.gz
slave:drwxrwxr-x 2 fieldyang fieldyang 4096 3月3011:24 mysql
slave:-rw-r--r-- 1 root root 277707 3月2910:15 rkhunter-1.4.2.tar.gz
pdsh>ls -l /mnt
slave:总用量125966
slave:drwxrwxrwx 1 1000 users 16384 3月2115:14 share
slave:drwxr-xr-x 2 root root 4096 3月3011:18 test
slave:drwxr-xr-x 6 1001 1001 4096 8月252016 usr
slave:drwxr-xr-x. 2 root root 4096 6月132016 vb
pdsh>sudo tar zxvf /home/fieldyang/rkhunter-1.4.2.tar.gz -C /mnt
slave:rkhunter-1.4.2/
......
slave:rkhunter-1.4.2/installer.sh
pdsh>ls -l /mnt
slave:总用量125970
slave:drwxr-xr-x 3 root root 4096 3月132014 rkhunter-1.4.2
slave:drwxrwxrwx 1 1000 users 16384 3月2115:14 share
slave:drwxr-xr-x 2 root root 4096 3月3011:18 test
slave:drwxr-xr-x 6 1001 1001 4096 8月252016 usr
slave:drwxr-xr-x. 2 root root 4096 6月132016 vb
pdsh>
pdsh>quit
四、pdcp应用实例
1、将本地主机/home/fieldyang/pssh-2.3.1.tar.gz复制到远程主机的/home/fieldyang目录下
[fieldyang@master~]$ pdcp -R ssh -g userhosts /home/fieldyang/pssh-2.3.1.tar.gz/home/fieldyang
2、将本地主机/home/fieldyang/test下的所有文件和子目录递归复制到远程主机的/home/fieldyang目录下
[fieldyang@master~]$ pdcp -R ssh -g userhosts -r /home/fieldyang/test /home/fieldyang