当我们管理数以百计或者更多的集群系统时,往往需要在每台机器上执行同样的命令,或者拷贝同样的文件,这时,我们就可以考虑使用三个小工具,分别是pdsh、ClusterSSH和mussh。
在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 �CC 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]$
个人觉得上面的三个工具,在批量配置集群时非常有用.