http://os.51cto.com/art/201012/240113.htm
灵活使用ssh、dsh和pssh高效管理大量计算机
-
摘要:
云计算当前非常热门,但是每个计算云都有一项要求:硬件和软件都需要非常细心地维护。本文介绍如何从命令行通过ssh、dsh和pssh工具管理许多计算机。
-
标签:
UNIX
SSH
-
云在根本上是由硬件和软件组成的,这些组件需要经常细心地维护。出现故障的硬件需要修理或更换;软件需要应用补丁、更新和升级;必须根据需求和潜在的安全威胁提前配置系统。应用程序开发人员可能觉得计算云很方便、很灵活,但是云管理员要应对艰巨的任务。
不只是云的管理有这些问题。LAN(小型服务器群)和计算集群也有同样的系统管理难题。在管理大量计算机时,Secure Shell (ssh)、scp
和 sftp
等常用工具用起来非常麻烦。本期 对话 UNIX 讨论从命令行有效地管理大量计算机的技术,先从少量系统开始,然后扩大规模。
强力方式
在一组计算机上运行命令的简单方法是,把共用的 ssh 命令包装在脚本中。假设您已经把公共密钥分发到希望访问的每个远程系统上(避免每次都需要输入密码),脚本 mssh.sh
在指定的每台计算机上运行一个命令,最后输出收集的结果(见 清单 1)。
清单 1. mssh.sh
#!/bin/bash
# Usage: mssh.sh "machine1 [machine2...]" "command"
OUTPUT_LOG=/tmp/output-$$.log
ERROR_LOG=/tmp/error-$$.log
MACHINES=$1; shift
COMMAND=$2; shift
for machine in $MACHINES
do
ssh $machine $COMMAND >>$OUTPUT_LOG.$machine 2>>$ERROR_LOG.$machine &
done
wait
cat $OUTPUT_LOG.*
cat $ERROR_LOG.* >&2
rm -f $OUTPUT_LOG.* $ERROR_LOG.*
|
例如,命令 mssh.sh "example.com joe@sample.com" "uptime -a">
在两台主机(example.com 和 sample.com)上运行 uptime -a
。计算机名列表放在引号中以组成一个参数,由于同样的原因,命令也放在引号中。每个计算机名必须符合 ssh 要求的模式 — 如果远程用户名与本地用户名相同,那么使用 hostname
;如果远程用户名与本地用户名不同,那么使用 username@hostname
。运行 mssh.sh "example.com joe@sample.com" "uptime -a">
会产生这样的结果:
$ mssh.sh "example.com joe@sample.com" "uptime"
example.com
08:34:35 up 66 days, 17:29, 0 users, load average: 0.40, 0.19, 0.07
joe@sample.com
08:34:28 up 104 days, 10:18, 0 users, load average: 0.15, 0.10, 0.10
|
这个脚本很原始,但是可以通过扩展它包含其他特性,比如用可调的超时设置防止在主机停机时出现长时间延迟(ssh -o
选项),用指定的目录捕捉输出。实际上,有许多按这种方式构建的软件包,可以简化分布式系统管理。其中之一是 Distributed Shell (dsh)。
更好的工具
dsh 是专为在远程系统上运行 shell 命令设计的,可以简化对大量计算机的操作。可以获取这个 shell 的二进制代码和源代码。对于二进制代码,检查您的 Linux® 或 UNIX® 发行版是否有 libdshconfig
和 dsh
包。例如,Ubuntu 和 Debian 用户可以通过 apt-get
方便地安装 dsh:
$ sudo apt-get install libdshconfig1 libdshconfig1-dev dsh
|
如果找不到针对您的系统预构建的包,从源代码构建 dsh 也很容易。找到库和实用程序的最新版本,下载并解压两个压缩文件,用通常的 ./configure; make; sudo make install
命令构建和安装它们(见 清单 2)。
清单 2. 从源代码构建 dsh
$ # Build and install the library first
$ wget http://www.netfort.gr.jp/~dancer/software/downloads/libdshconfig-0.20.13.tar.gz
$ tar xzvf libdshconfig-0.20.13.tar.gz
$ cd libshconfig-0.20.13
$ ./configure
$ make
$ sudo make install
$ # Then build and install the utility
$ wget http://www.netfort.gr.jp/~dancer/software/downloads/dsh-0.25.9.tar.gz
$ tar xzvf dsh-0.25.9.tar.gz
$ cd dsh-0.25.9
$ ./configure
$ make
$ sudo make install
|
这个 shell 是相当小的应用程序;dsh
和 dsh.conf
手册页提供掌握它所需的所有信息。例如,要想在一组主机上运行 uptime
,只需输入:
$ dsh --show-machine-names -m example.com -m joe@sample.com -- uptime
example.com: 11:34:57 up 66 days, 20:29, 0 users, load average: 0.04, 0.06, 0.01
joe@sample.com: 11:35 up 2 days, 14:59, 8 users, load averages: 0.46 0.35 0.31
|
用 -m
指定主机,主机名的规则与 ssh 相同。命令行中的双连字符把 dsh
命令本身的选项与要运行的命令分隔开。按指定主机的次序显示输出。--show-machine-names
选项在远程命令发出的输出前面加上主机名。
如果经常操作同一组计算机,可以定义一个或多个集合并指定要操作的集合。可以创建一个全局集合和任意数量的组。$HOME/.dsh/machines.list 文件是全局集合。如果指定 dsh -a
,就会在 machines.list 中列出的所有计算机上运行指定的命令。因此,如果 machines.list 包含:
example.com
joe@sample.com
|
那么命令:
dsh -a --show-machine-names -- uptime
|
会产生与前一个命令相同的输出:
$ dsh -a --show-machine-names -- uptime
example.com: 11:57:03 up 66 days, 20:51, 0 users, load average: 0.29, 0.18, 0.07
joe@sample.com: 11:57 up 2 days, 15:21, 8 users, load averages: 0.52 0.31 0.26
|
可以在 $HOME/.dsh/group/groupname
文件中创建更小或专门的计算机集合,其中的 groupname
是您指定的有意义的名称。例如,如果创建名为 $HOME/.dsh/group/servers
的文件,那么命令 dsh -g servers -- uptime
会在 servers
文件中列出的所有计算机上运行 uptime
。
可以结合使用 -m
与 -a
和 -g
,分别扩展全局列表和组。另外,可以使用 --file filename
把 filename
中列出的所有计算机添加到主机列表中。在默认情况下,dsh 并行地运行命令。但是,如果希望顺序地运行命令,那么指定 --wait-shell
。
尽管很方便,但是 dsh 有一个重大的缺陷:它无法复制文件。如果希望把数据部署到多台计算机上,就必须编写一个新脚本,利用发行版的基础设施(比如 rsync
),或者考虑使用更健壮的工具(比如 Parallel SSH (pssh))。
与 ssh 相似,但采用并行方式
与 dsh 一样,pssh 的目标也是简化大量计算机的管理。除了具备 dsh 的所有功能之外,pssh
还可以把文件从一组系统复制到中心服务器或反向复制,以及杀死一组系统上的进程。这个 shell 和它的底层库是用 Python
编写的,如果系统上已经安装了 Python 解释器和核心库,就很容易安装它(见 清单 3)。
清单 3. 安装 pssh
$ # For systems with apt-get (apt-get installs Python if necessary)
$ sudo apt-get install pssh
$ # For all others, install Python and then continue
$ wget http://peak.telecommunity.com/dist/ez_setup.py
$ sudo python ez_setup.py
$ wget http://parallel-ssh.googlecode.com/files/pssh-2.1.1.tar.gz
$ tar xzvf pssh-2.1.1.tar.gz
$ cd pssh-2.1.1
$ sudo python setup.py install
|
pssh 包安装 5 个实用程序:parallel-ssh
、parallel-scp
、parallel-slurp
、parallel-nuke
和 parallel-rsync
。每个实用程序都并行地操作多个主机。
-
parallel-ssh
在多个主机上并行地运行命令。
-
parallel-scp
把文件并行地复制到多个主机上。
-
parallel-rsync
通过 rsync
协议把文件高效地并行复制到多个主机上。
-
parallel-slurp
把文件并行地从多个远程主机复制到中心主机上。
-
parallel-nuke
并行地在多个远程主机上杀死进程。
与 dsh 不同,pssh 总是通过清单
文件指定主机,其中的每行采用 host[:port] [user]
形式。下面的示例用 parallel-ssh
在一组主机上运行 uptime
:
$ parallel-ssh -h servers.txt uptime
[1] 16:15:14 [SUCCESS] example.com 22
16:15 up 2 days, 19:39, 9 users, load averages: 0.09 0.10 0.12
[2] 16:15:28 [SUCCESS] sample.com 22
16:15:28 up 67 days, 1:09, 0 users, load average: 0.09, 0.07, 0.01
|
servers.txt 文件有两行:
example.com
sample.com joe
|
在默认情况下,每个命令实例的输出出现在 stdout 中。输出划分为每个主机一段。但是,可以指定一个目录来捕捉每个实例的输出。例如,如果运行前面的命令并添加 --outdir /tmp/uptime
,那么会把每个主机的命令输出捕捉到 /tmp/uptime 中单独的文件中,见 清单 4。
清单 4. 把输出捕捉到单独的文件中
$ parallel-ssh -h servers.txt uptime
[1] 16:15:14 [SUCCESS] example.com 22
[2] 16:15:28 [SUCCESS] sample.com 22
$ ls -1 /tmp/uptime
example.com
sample.com
$ cat /tmp/uptime/*
16:22 up 2 days, 19:46, 9 users, load averages: 0.47 0.28 0.19
16:22:32 up 67 days, 1:17, 0 users, load average: 0.06, 0.04, 0.00
|
parallel-ssh
实用程序可以生成最多 32 个进程,并行地连接各个节点。如果远程命令在 60 秒内没有完成,连接会终止。如果命令需要更多处理时间,可以使用 -t
设置更长的到期时间。(parallel-scp
和 parallel-rsync
没有默认的到期时间,但是可以用 -t
指定到期时间。)
可以使用 parallel-scp
并行地把一个或多个文件或目录复制到许多计算机。如果您精通传统的 scp
,应该熟悉这个命令。
$ parallel-scp -h servers.txt /etc/hosts /tmp/hosts
[1] 16:49:38 [SUCCESS] example.com 22
[2] 16:49:55 [SUCCESS] sample.com 22
|
前面的命令把本地文件 /etc/hosts 复制到 servers.txt 中列出的每台计算机上的 /tmp/hosts。parallel-rsync
的工作方式相似,它通过运行 rsync
并行地在本地主机和清单中列出的远程主机之间管理文件。parallel-slurp
的作用与 parallel-scp
相反,但是有一点不同:它从每台远程计算机收集指定的文件,但是并不覆盖文件的本地版本。parallel-slurp
为每台远程计算机创建一个子目录并把指定的文件复制到此位置。
假设希望把 /etc/hosts 文件从每台远程计算机复制到本地计算机。为实现这个目标,执行 parallel-slurp -h servers.txt /etc/hosts
,见 清单 5。
清单 5. 把 /etc/hosts 文件从远程计算机复制到本地计算机
$ parallel-slurp -h servers.txt -L /tmp/hosts /etc/hosts hosts_file
1] 17:03:32 [SUCCESS] example.com 22
[2] 17:03:50 [SUCCESS] dcauto.gotdns.com 22
$ ls -R /tmp/hosts
/tmp/hosts/example.com:
hosts_file
/tmp/hosts/sample.com:
hosts_file
|
parallel-slurp
把指定的远程文件复制到本地计算机,把文件的每个拷贝存储在按远程主机命名的子目录中。在这里,远程文件是 /etc/hosts;每个本地拷贝名为 hosts_file
。-L
选项指定创建子目录的位置。在这里,目标是 /tmp/hosts,这会生成子目录 /tmp/hosts/example.com 和 /tmp/hosts/sample.com。
最后,parallel-nuke
相当于运行 ssh host killall
。parallel-nuke
的参数是一个模式。在远程计算机上运行的名称符合这个模式的所有进程都被杀死。可以用此命令方便地在一组服务器上停止同一守护进程。
要想使用 pssh 工具,必须在要管理的每台远程服务器上配置公共密钥访问。如果 pssh 实用程序产生 [FAILURE]
,就用一般的 ssh 建立连接以检查配置。如果系统提示输入密码,那么在远程主机上安装公共密钥并再次尝试连接。(具体步骤见 ssh
和 ssh-keygen
手册页。)
操作大量计算机的其他工具
对于 5 台、10
台或更多计算机,这里介绍的工具很可能足够了,尤其是对于不经常执行的非重复性管理任务。但是,如果计算机数量很大,或者经常重复执行相同的任务,那么应
该谨慎地考虑采用为自动维护大量计算机而设计的其他工具和子系统。另一方面,为大型网络设计的一些软件也可以应用于少量计算机。找到适当的工具以及手工干
预与自动化之间的平衡点是一个难题,而且需要经常重新审查和调整。
下面是可以考虑采用的一些工具:
还可以研究 Oak Ridge National Laboratory (ORNL) 的 Cluster Command and
Control (C3) 和 pdsh 等计算集群工具。C3 操作 ORNL
的大规模计算集群,它提供大量命令行工具,可以减少操作和管理集群所需的时间和精力,提高系统管理员的生产力。pdsh shell 在许多方面与
pssh 相似,但是还可以管理系统映像。
用很少的时间管理大量计算机
使用 dsh 和 pssh
等工具能够节省时间并减少错误。可以在大量系统上运行相同的命令,几乎马上会看到组合的结果。通过清单把相似的计算机集中在一起可以降低遗漏的风险。
Puppet 和 Capistrano
可以把经常重复执行的任务捕捉到脚本中。如果管理的计算机比较多,自动化就是关键。总之,如果采用适当的工具,计算云的管理也不难。
原文:http://www.ibm.com/developerworks/cn/aix/library/au-spunix_remoteserver/index.html?ca=drs-
【编辑推荐】
-
25个必须记住的SSH命令,你用过了吗?
-
通过SSH访问远程Linux服务器的四个安全策略
-
开源自动化配置管理工具Puppet入门教程
-
Linux远程备份工具Rsync使用案例
分享到:
相关推荐
本文介绍了一种基于STM32微控制器和LIS3DSH加速度传感器的高精度计步器设计方法。文章首先回顾了传统计步器设计的历史与局限性,然后详细阐述了高精度计步器的设计原理、硬件电路结构及软件算法实现。以下是根据文档...
分布式shell(dsh)是一个高效且实用的开源工具,专为在多台计算机上并行执行命令而设计。它的出现极大地简化了系统管理员的工作,尤其是在管理和维护beowulf类型的分布式计算集群时。dsh允许用户通过单一的命令行...
LIS3DSH的驱动库(已生成BIN文件)和官方英文数据手册资料
- 这意味着LIS3DSH可以在不同类型的电子设备中灵活使用,具有广泛的兼容性。 2. **独立的I/O电源**:支持1.8V的独立输入输出(I/O)电源,并且与主电源电压兼容。 - 此特性使得LIS3DSH能够在不同的电压环境下正常...
标题中的"LIS3DSH.rar_lis3dsh_simple_stm32f4"表明这是一个与LIS3DSH三轴加速度传感器相关的项目,它使用了简单的SPI(Serial Peripheral Interface)驱动,并且是针对STM32F4系列微控制器的。这个项目可能包含了...
在硬件连接部分,LIS3DSH的SDA和SCL(对于I2C)或SCK、MISO、MOSI和CS(对于SPI)需要连接到STM32的相应引脚。同时,不要忘记连接电源和地线,确保正确供电和接地。 接下来,软件部分涉及STM32的固件开发。你可能...
1. **高精度和灵敏度**:LIS3DSH可以提供±2g、±4g、±8g和±16g的可选量程,满足不同应用的需求。 2. **低功耗模式**:具有多种电源模式,如连续测量模式、单次测量模式和待机模式,以适应不同的电源管理策略。 ...
名称cluster-ssh-tools-集群ssh工具的集合历史我经常在需要同时对许多主机执行相同操作的计算机集群上工作。 我从常规的shell循环开始: for i in `seq...可扩展性我很幸运地一次从拥有8G RAM和大量可用CPU周期的堡垒主
分布式命令维护Linux节点是Linux操作系统管理和系统开发中的一个重要实践,特别是在大规模集群环境下。...了解并掌握dsh的使用方法,对于从事Linux操作系统管理和系统开发的专业人员来说,是非常有价值的技能。
本资源为ST公司官方LIS3DH 、LIS3DSH驱动及例子。资源解压后的driver文件夹可直接在你的工程中应用:The driver is platform independent, you need only to complete the two functions for write and read from ...
【标题】"a_GildiaTitul3DSh" 是一款3D效果的字体,它在设计上强调了立体感和视觉冲击力,适合用于标题、海报等需要突出重点的场合。这款字体可能是由设计师精心制作,以提供一种独特且引人注目的文字表现形式。 ...
【清洁与保养】部分教导用户如何定期清洁热水器,以保持其高效运作,并延长使用寿命。 【售后服务】海尔承诺提供“1+5”成套服务,包括一次就好服务、安全测电、讲解指导、一站通检、全程无忧和现场清理等,确保...
《激光线宽(DSH)拟合程序:MATLAB实现与应用》 在现代光学和光电子学领域,激光线宽的测量与分析是一项至关...在使用过程中,建议结合相关理论知识,逐步探索和分析程序的各个部分,以获得更全面的理解和应用能力。
Zojirushi象印品牌说明书
2. **微电子机械系统(MEMS)**: 使用MEMS技术,LIS3DSH能在微小的硅晶片上集成了机械结构和电子电路,实现了小型化、低功耗和高可靠性。 3. **数字输出**: LIS3DSH通常提供数字I²C或SPI接口,使得数据传输更加便捷...
这个库是由 Mike Kirkhart 设计的,它基于早期的 L3G 库进行了优化和改进,以更好地适应 LIS3DSH 芯片的功能和特性。 LIS3DSH 库的核心功能包括: 1. 初始化:库提供了初始化函数,用户可以通过调用该函数设置加...
**LIS3DH 传感器详解** LIS3DH 是一款由意法半导体(STMicroelectronics)制造的三轴加速度计,广泛应用于运动检测、姿态测量、...LIS3DH 的易用性和高性能使其成为众多IoT和嵌入式系统开发者的首选加速度传感器之一。
LIS3DSH的代码情况
LIS3DSH的烧录情况
以下是LIS3DSH的一些主要特性和应用场景: 主要特性: 宽供电电压范围:1.71 V至3.6 V。 独立I/O供电:与供电电压兼容(1.8 V)。 超低功耗:适合电池供电的应用。 动态可调的满量程:±2g/±4g/±6g/±8g/±16g。...