并行分布式运维工具pdsh安装与实战

并行分布式运维工具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模块

6pdsh在远程主机上执行命令

[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在远程主机上创建目录

7pdsh交互模式:

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

 

你可能感兴趣的:(Linux系统维护,自动化运维工具)