自动化运维之pdsh

Posted on Posted in NoOps
Tips: 本文创建于2015年11月13日,已超过 2 年,内容或图片可能已经失效!

自动化运维之 pdsh

linux-ssh.png

pdsh,与pssh类似,pdsh可并行执行对远程目标主机的操作,在有批量执行命令或分发任务的运维需求时,使用这个命令可达到事半功倍的效果。同时,pdsh还可支持交互模式,当要执行的命令不确定时,可直接进入pdsh命令行。

官网

安装

tar jxvf pdsh-2.29.tar.bz2   
cd pdsh-2.29  
./configure --with-ssh --with-rsh --with-mrsh --with-mqshell --with-qshell --with-dshgroups --with-machines=/etc/pdsh/machines  
make && make install  
  • --with-dshgroups : 启用主机组支持
  • --with-machines : 是--with-dshgroups的扩展,通过所有要管理的主机列表都写入指定的文件中

pdsh -V  
pdsh-2.29  
rcmd modules: ssh,rsh,exec (default: rsh)  
misc modules: machines,dshgroup  
  
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  
-l user           execute remote commands as user   #指定远程主机上使用的用户名。pdsh -R ssh -l opsuser -w user00[1-10] "date"  
-t seconds        set connect timeout (default is 10 sec)   #指定连接远程主机的超时时间,以s为单位,默认是10s。pdsh -R ssh -w slave00[1-9] -t 15 "date"  
-u seconds        set command timeout (no default)  #指定远程执行命令的超时时间,以s为单位,以ssh方式连接时,默认时间为无限  
-f n              use fanout of n nodes     #设置同时连接到远程主机的数量  
-w host,host,...  set target node list on command line      #指定远程主机,可以指定多台,每台主机用逗号隔开,host可以是主机名也可以是IP地址。eg: pdsh -w ssh:user001,ssh:user002 "date" 或者 pdsh -w ssh:user00[1-10] "date" 或者使用正则 pdsh -w ssh:user00[10-31],/1$/ "uptime" ,10-31中选择以1结尾的主机  
-x host,host,...  set node exclusion list on command line   #排除某些主机。pdsh -R ssh -l opsuser -w user00[1-9] -x user005,user007 "date"  
-R name           set rcmd module to name   #指定rcmd的模块名,默认是rsh。如果要选择ssh,pdsh -R ssh -w user00[1-10] "date"  
-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"     #用来指定一组远程主机,编译pdsh时可以通过--with-dshgroups 参数激活此选项,默认可以将一组主机列表写入一个文件并放到本地主机的~/.dsh/group或/etc/dsh/group目录下。eg: pdsh -R ssh -g userhosts "date",其中userhosts是一个主机列表文件,可以放到~/.dsh/group或/etc/dsh/group目录下  
-X groupname      exclude hosts in dsh group "groupname"    #用来排除指定组内的所有主机,经常与-a参数一起使用。pdsh -R ssh -a -X userhosts "date"  
-a                target all nodes  #可以指定所有的远程主机,pdsh会查看/etc/pdsh/machines文件中的主机列表,要改变此路径,在编译pdsh时通过--with-machines参数指定  
available rcmd modules: ssh,rsh,exec (default: rsh)  

pdsh批量统计主机信息

pdsh -w ssh:192.168.1.153,ssh:192.168.1.222 "uname -n"  
192.168.1.222: localhost.localdomain  
192.168.1.153: local-centos02 

排除某些主机

pdsh -w ssh:192.168.1.[153-222] -x 192.168.1.[154-221] "uptime"  
192.168.1.153:  11:46:57 up  2:42,  2 users,  load average: 0.00, 0.00, 0.00  
192.168.1.222:  11:46:55 up 3 days,  3:26,  3 users,  load average: 0.00, 0.01, 0.00 

支持正则

pdsh -w ssh:192.168.1.[153-222],/2$/ "uptime" 

对于不规范的主机,可以写到一个文件中,路径是编译时指定

cat /etc/pdsh/machines   
aaa  
bbb  
user001  
user1111  
  
pdsh -R ssh -a uptime 

按照组进行调用

cat /etc/dsh/group/userhosts  
  
pdsh -R ssh -g userhosts uptime  
  
-X  #排除指定组的主机  
  
pdsh -R ssh -X userhosts uptime  
  
pdsh 在远程主机上执行命令  
  
pdsh -R  ssh -g userhosts "rm -rf /home/opsuser/mysql"  
pdsh -R  ssh -g userhosts "sudo mkdir /mnt/test"  
pdsh -R  ssh -g userhosts "sudo /etc/init.d/gmond start"  

pdsh 交互模式

pdsh -R ssh -w 192.168.1.153  

pdcp应用

pdcp主要是本地主机和远程主机进行文件复制,在使用pdcp时,两台主机都要安装pdcp

pdcp -R ssh -g userhosts /home/opsuser/mysqldb.tar.gz /home/opsuser #复制文件  
pdcp -R ssh -w userhosts -r /home/opsuser/webdata /home/opsuser     #复制目录  
» 转载请注明来源:呢喃 » 自动化运维之pdsh

Leave a Reply

Your email address will not be published. Required fields are marked *

19 + 15 =