云在根本上是由硬件和软件组成的,这些组件需要经常细心地维护。出现故障的硬件需要修理或更换;软件需要应用补丁、更新和升级;必须根据需求和潜在的安全威胁提前配置系统。应用程序开发人员可能觉得计算云很方便、很灵活,但是云管理员要应对艰巨的任务。
不只是云的管理有这些问题。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
手册页提供掌握它所需的所有信息。例如,