当我们管理数以百计或者更多的集群系统时,往往需要在每台机器上执行同样的命令,或者拷贝同样的文件,这时,我们就可以考虑使用三个小工具,分别是pdshClusterSSHmussh

Fedora系统上,我们可以直接通过yum安装这三个软件。如果你使用的是centos,那么你可以添加Fedora的源,而通过yum来安装,非常方便.

Centos系统添加fedora源可以参考:

http://pizibaidu.blog.51cto.com/1361909/1318791


安装:
yum install clusterssh pdsh pdsh-rcmd-ssh pdsh-rcmd-rsh mussh


如果是其他Linux系统,也可以到下列站点下载,

http://clusterssh.sourceforge.net

http://sourceforge.net/projects/pdsh

http://www.sourceforge.net/projects/mussh


重点来了:
无论是clusterssh还是pdsh或mussh,我们都应该相应的设置无密码登录目标系统,这方面的内容,有很多介绍,本文不再提及。

一、pdsh首先介绍一下pdsh,首先必须在管理节点和每台目标机器上都安装pdsh软件包。pdsh可以在指定的一组机器上执行同一个命令。例如需要管理下列机器,机器名分别为node1,node2,node3,node4,node5

命令格式如下:
pdsh -w [SSH OR RSH]:username@node[1,2-4,5][COMMAND]

例如希望以hadoop用户的身份,在每台机器上执行hostname命令,使用ssh方法进行连接,则结果如下:
[hadoop@node1 root]$ pdsh -w ssh:hadoop@node[1-3] hostname

node3: node3

node2: node2

node1: node1
这样可以非常清楚的看到每台机器上执行的结果。


另外一些时候,我们可以希望在每台机器上执行一组也许不确定的命令,这时我们可以省略[COMMAND]部分,用法如下:
[hadoop@node1 root]$ pdsh -w ssh:hadoop@node[1-3]

pdsh> hostname

node3: node3

node2: node2

node1: node1

pdsh> date

node3: 2013 11 02星期六 10:13:40 CST

node2: 2013 11 02星期六 10:13:40 CST

node1: 2013 11 02星期六 10:13:40 CST

pdsh> exit

[hadoop@node1root]$

pdsh软件包还自带了pdcp命令,可以将文件拷贝到一组机器上,用法如下:

pdcp -w [SSH OR RSH]:[username@node[1,2-4,5]SOURCE_FILE DESTINATION

想将文件1.txt拷贝到上述机器的/tmp目录当中,可执行下列命令:

pdcp -w ssh:hadoop@node[1-4] 1.txt /tmp

如果要拷贝的是目录,则需使用-r参数,例如将目录test拷贝到/tmp,执行命令如下:

pdcp -r -w ssh:hadoop@node[1-4] test /tmp



二、ClusterSSHclusterssh是另外一个集群管理软件,可以同时打开多个窗口进行操作。例如最简单的用法可能如下:

cssh root@node1root@node2 root@node3

不过当管理数以十计或数以百计机器的时候,在命令行就很难添加如此众多的机器名了。这时的办法是使用一个配置文件进行管理。首先生成一个配置文件,命令为:

cssh -u > ~/.csshrc

这个~/.csshrc文件里可以定义如干个组,例如在此文件结尾处添加

clusters=ibm hp dell

ibm=root@node211 root@node232root@node233 root@node234 root@node240

hp=root@hp211 root@hp232 root@hp233root@hp234 root@hp240

dell=root@dell211 root@dell232 root@dell233 root@dell234 root@dell240

这样就可以使用cssh hp或cssh ibm来连接指定的群组了。clusterssh的不便之处在于,管理机器越多,则打开的窗口越多,如果屏幕太小,就非常难受了。







三、musshmussh也是Fedora系统自带的一款管理多主机的ssh软件,和上述两种软件类似,可以互为补充。

mussh可以让你把本地的脚本,在多台ssh目的机器上执行。格式如下

mussh [OPTIONS] <-h host.. | -Hhostfile> [-c cmd] [-C scriptfile]

例如想在多个机器上执行hostname命令,可以执行如下命令:
[hadoop@node1 root]$ mussh -h hadoop@node1 hadoop@node2 hadoop@node3 -chostname

hadoop@node1:node1

hadoop@node2:node2

hadoop@node3:node3

[hadoop@node1root]$


如果想执行本地脚本test.sh,可以执行如下命令:
[hadoop@node1 root]$ mussh -h hadoop@node1 hadoop@node2 hadoop@node3 –C test.sh
#注意区分大小写



另外还可以通过建立文件的方式,使得命令执行时更为简化,例如在server.txt中写入:

hadoop@node1

hadoop@node2

hadoop@node3




[hadoop@node1 test]$ mussh -H server.txt -c hostname

hadoop@node1:node1

hadoop@node2:node2

hadoop@node3:node3

[hadoop@node1test]$


个人觉得上面的三个工具,在批量配置集群时非常有用.