自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

靈活使用ssh、dsh和pssh高效管理大量計(jì)算機(jī)

系統(tǒng) 其他OS 系統(tǒng)運(yùn)維
云計(jì)算當(dāng)前非常熱門,但是每個計(jì)算云都有一項(xiàng)要求:硬件和軟件都需要非常細(xì)心地維護(hù)。本文介紹如何從命令行通過ssh、dsh和pssh工具管理許多計(jì)算機(jī)。

云在根本上是由硬件和軟件組成的,這些組件需要經(jīng)常細(xì)心地維護(hù)。出現(xiàn)故障的硬件需要修理或更換;軟件需要應(yīng)用補(bǔ)丁、更新和升級;必須根據(jù)需求和潛在的安全威脅提前配置系統(tǒng)。應(yīng)用程序開發(fā)人員可能覺得計(jì)算云很方便、很靈活,但是云管理員要應(yīng)對艱巨的任務(wù)。

不只是云的管理有這些問題。LAN(小型服務(wù)器群)和計(jì)算集群也有同樣的系統(tǒng)管理難題。在管理大量計(jì)算機(jī)時(shí),Secure Shell (ssh)、scpsftp 等常用工具用起來非常麻煩。本期 對話 UNIX 討論從命令行有效地管理大量計(jì)算機(jī)的技術(shù),先從少量系統(tǒng)開始,然后擴(kuò)大規(guī)模。

強(qiáng)力方式

在一組計(jì)算機(jī)上運(yùn)行命令的簡單方法是,把共用的 ssh 命令包裝在腳本中。假設(shè)您已經(jīng)把公共密鑰分發(fā)到希望訪問的每個遠(yuǎn)程系統(tǒng)上(避免每次都需要輸入密碼),腳本 mssh.sh 在指定的每臺計(jì)算機(jī)上運(yùn)行一個命令,最后輸出收集的結(jié)果(見 清單 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"> 在兩臺主機(jī)(example.com 和 sample.com)上運(yùn)行 uptime -a。計(jì)算機(jī)名列表放在引號中以組成一個參數(shù),由于同樣的原因,命令也放在引號中。每個計(jì)算機(jī)名必須符合 ssh 要求的模式 — 如果遠(yuǎn)程用戶名與本地用戶名相同,那么使用 hostname;如果遠(yuǎn)程用戶名與本地用戶名不同,那么使用 username@hostname。運(yùn)行 mssh.sh "example.com joe@sample.com" "uptime -a"> 會產(chǎn)生這樣的結(jié)果:

$ 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

這個腳本很原始,但是可以通過擴(kuò)展它包含其他特性,比如用可調(diào)的超時(shí)設(shè)置防止在主機(jī)停機(jī)時(shí)出現(xiàn)長時(shí)間延遲(ssh -o 選項(xiàng)),用指定的目錄捕捉輸出。實(shí)際上,有許多按這種方式構(gòu)建的軟件包,可以簡化分布式系統(tǒng)管理。其中之一是 Distributed Shell (dsh)。

更好的工具

dsh 是專為在遠(yuǎn)程系統(tǒng)上運(yùn)行 shell 命令設(shè)計(jì)的,可以簡化對大量計(jì)算機(jī)的操作??梢垣@取這個 shell 的二進(jìn)制代碼和源代碼。對于二進(jìn)制代碼,檢查您的 Linux® 或 UNIX® 發(fā)行版是否有 libdshconfigdsh 包。例如,Ubuntu 和 Debian 用戶可以通過 apt-get 方便地安裝 dsh:

$ sudo apt-get install libdshconfig1 libdshconfig1-dev dsh

如果找不到針對您的系統(tǒng)預(yù)構(gòu)建的包,從源代碼構(gòu)建 dsh 也很容易。找到庫和實(shí)用程序的最新版本,下載并解壓兩個壓縮文件,用通常的 ./configure; make; sudo make install 命令構(gòu)建和安裝它們(見 清單 2)。


清單 2. 從源代碼構(gòu)建 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 是相當(dāng)小的應(yīng)用程序;dshdsh.conf 手冊頁提供掌握它所需的所有信息。例如,要想在一組主機(jī)上運(yùn)行 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 指定主機(jī),主機(jī)名的規(guī)則與 ssh 相同。命令行中的雙連字符把 dsh 命令本身的選項(xiàng)與要運(yùn)行的命令分隔開。按指定主機(jī)的次序顯示輸出。--show-machine-names 選項(xiàng)在遠(yuǎn)程命令發(fā)出的輸出前面加上主機(jī)名。

如果經(jīng)常操作同一組計(jì)算機(jī),可以定義一個或多個集合并指定要操作的集合??梢詣?chuàng)建一個全局集合和任意數(shù)量的組。$HOME/.dsh/machines.list 文件是全局集合。如果指定 dsh -a,就會在 machines.list 中列出的所有計(jì)算機(jī)上運(yùn)行指定的命令。因此,如果 machines.list 包含:

example.com
joe@sample.com

那么命令:

dsh -a --show-machine-names -- uptime

會產(chǎn)生與前一個命令相同的輸出:

$ 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 文件中創(chuàng)建更小或?qū)iT的計(jì)算機(jī)集合,其中的 groupname 是您指定的有意義的名稱。例如,如果創(chuàng)建名為 $HOME/.dsh/group/servers 的文件,那么命令 dsh -g servers -- uptime 會在 servers 文件中列出的所有計(jì)算機(jī)上運(yùn)行 uptime。

可以結(jié)合使用 -m-a-g,分別擴(kuò)展全局列表和組。另外,可以使用 --file filenamefilename 中列出的所有計(jì)算機(jī)添加到主機(jī)列表中。在默認(rèn)情況下,dsh 并行地運(yùn)行命令。但是,如果希望順序地運(yùn)行命令,那么指定 --wait-shell。

盡管很方便,但是 dsh 有一個重大的缺陷:它無法復(fù)制文件。如果希望把數(shù)據(jù)部署到多臺計(jì)算機(jī)上,就必須編寫一個新腳本,利用發(fā)行版的基礎(chǔ)設(shè)施(比如 rsync),或者考慮使用更健壯的工具(比如 Parallel SSH (pssh))。

與 ssh 相似,但采用并行方式

與 dsh 一樣,pssh 的目標(biāo)也是簡化大量計(jì)算機(jī)的管理。除了具備 dsh 的所有功能之外,pssh 還可以把文件從一組系統(tǒng)復(fù)制到中心服務(wù)器或反向復(fù)制,以及殺死一組系統(tǒng)上的進(jìn)程。這個 shell 和它的底層庫是用 Python 編寫的,如果系統(tǒng)上已經(jīng)安裝了 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 個實(shí)用程序:parallel-sshparallel-scp、parallel-slurpparallel-nukeparallel-rsync。每個實(shí)用程序都并行地操作多個主機(jī)。

  • parallel-ssh 在多個主機(jī)上并行地運(yùn)行命令。
  • parallel-scp 把文件并行地復(fù)制到多個主機(jī)上。
  • parallel-rsync 通過 rsync 協(xié)議把文件高效地并行復(fù)制到多個主機(jī)上。
  • parallel-slurp 把文件并行地從多個遠(yuǎn)程主機(jī)復(fù)制到中心主機(jī)上。
  • parallel-nuke 并行地在多個遠(yuǎn)程主機(jī)上殺死進(jìn)程。

與 dsh 不同,pssh 總是通過清單 文件指定主機(jī),其中的每行采用 host[:port] [user] 形式。下面的示例用 parallel-ssh 在一組主機(jī)上運(yùn)行 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

在默認(rèn)情況下,每個命令實(shí)例的輸出出現(xiàn)在 stdout 中。輸出劃分為每個主機(jī)一段。但是,可以指定一個目錄來捕捉每個實(shí)例的輸出。例如,如果運(yùn)行前面的命令并添加 --outdir /tmp/uptime,那么會把每個主機(jī)的命令輸出捕捉到 /tmp/uptime 中單獨(dú)的文件中,見 清單 4。


清單 4. 把輸出捕捉到單獨(dú)的文件中

				
$ 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 實(shí)用程序可以生成最多 32 個進(jìn)程,并行地連接各個節(jié)點(diǎn)。如果遠(yuǎn)程命令在 60 秒內(nèi)沒有完成,連接會終止。如果命令需要更多處理時(shí)間,可以使用 -t 設(shè)置更長的到期時(shí)間。(parallel-scpparallel-rsync 沒有默認(rèn)的到期時(shí)間,但是可以用 -t 指定到期時(shí)間。)

可以使用 parallel-scp 并行地把一個或多個文件或目錄復(fù)制到許多計(jì)算機(jī)。如果您精通傳統(tǒng)的 scp,應(yīng)該熟悉這個命令。

$ 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 復(fù)制到 servers.txt 中列出的每臺計(jì)算機(jī)上的 /tmp/hosts。parallel-rsync 的工作方式相似,它通過運(yùn)行 rsync 并行地在本地主機(jī)和清單中列出的遠(yuǎn)程主機(jī)之間管理文件。parallel-slurp 的作用與 parallel-scp 相反,但是有一點(diǎn)不同:它從每臺遠(yuǎn)程計(jì)算機(jī)收集指定的文件,但是并不覆蓋文件的本地版本。parallel-slurp 為每臺遠(yuǎn)程計(jì)算機(jī)創(chuàng)建一個子目錄并把指定的文件復(fù)制到此位置。

假設(shè)希望把 /etc/hosts 文件從每臺遠(yuǎn)程計(jì)算機(jī)復(fù)制到本地計(jì)算機(jī)。為實(shí)現(xiàn)這個目標(biāo),執(zhí)行 parallel-slurp -h servers.txt /etc/hosts,見 清單 5。


清單 5. 把 /etc/hosts 文件從遠(yuǎn)程計(jì)算機(jī)復(fù)制到本地計(jì)算機(jī)

				
$ 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 把指定的遠(yuǎn)程文件復(fù)制到本地計(jì)算機(jī),把文件的每個拷貝存儲在按遠(yuǎn)程主機(jī)命名的子目錄中。在這里,遠(yuǎn)程文件是 /etc/hosts;每個本地拷貝名為 hosts_file。-L 選項(xiàng)指定創(chuàng)建子目錄的位置。在這里,目標(biāo)是 /tmp/hosts,這會生成子目錄 /tmp/hosts/example.com 和 /tmp/hosts/sample.com。

最后,parallel-nuke 相當(dāng)于運(yùn)行 ssh host killall。parallel-nuke 的參數(shù)是一個模式。在遠(yuǎn)程計(jì)算機(jī)上運(yùn)行的名稱符合這個模式的所有進(jìn)程都被殺死??梢杂么嗣罘奖愕卦谝唤M服務(wù)器上停止同一守護(hù)進(jìn)程。

要想使用 pssh 工具,必須在要管理的每臺遠(yuǎn)程服務(wù)器上配置公共密鑰訪問。如果 pssh 實(shí)用程序產(chǎn)生 [FAILURE],就用一般的 ssh 建立連接以檢查配置。如果系統(tǒng)提示輸入密碼,那么在遠(yuǎn)程主機(jī)上安裝公共密鑰并再次嘗試連接。(具體步驟見 sshssh-keygen 手冊頁。)

操作大量計(jì)算機(jī)的其他工具

對于 5 臺、10 臺或更多計(jì)算機(jī),這里介紹的工具很可能足夠了,尤其是對于不經(jīng)常執(zhí)行的非重復(fù)性管理任務(wù)。但是,如果計(jì)算機(jī)數(shù)量很大,或者經(jīng)常重復(fù)執(zhí)行相同的任務(wù),那么應(yīng)該謹(jǐn)慎地考慮采用為自動維護(hù)大量計(jì)算機(jī)而設(shè)計(jì)的其他工具和子系統(tǒng)。另一方面,為大型網(wǎng)絡(luò)設(shè)計(jì)的一些軟件也可以應(yīng)用于少量計(jì)算機(jī)。找到適當(dāng)?shù)墓ぞ咭约笆止じ深A(yù)與自動化之間的平衡點(diǎn)是一個難題,而且需要經(jīng)常重新審查和調(diào)整。

下面是可以考慮采用的一些工具:

  • rsync:這個出色的工具用于從中心服務(wù)器分發(fā)文件以及保持分布式文件系統(tǒng)同步。前面的一期對話 UNIX 詳細(xì)討論了 rsync。
  • Puppet。Puppet 是一個越來越流行的 UNIX 和 Linux 子系統(tǒng),它可以自動地維護(hù)配置。根據(jù)它的網(wǎng)站所說,“[Puppet] 提供一個強(qiáng)大的框架,可以簡化 [系統(tǒng)管理員] 需要執(zhí)行的大多數(shù)技術(shù)任務(wù)。可以用 Puppet 的定制語言編寫各種任務(wù),可以像其他代碼一樣共享這些任務(wù)代碼。” Puppet 可以描述組件之間的依賴關(guān)系、定義文件的正確狀態(tài)、查詢系統(tǒng)的狀態(tài)等等。如果要多次執(zhí)行某一任務(wù),最好以 Puppet 任務(wù)的形式捕捉它。
  • Capistrano。Capistrano 是另一個流行的遠(yuǎn)程系統(tǒng)管理工具。它的主頁上說:“簡單地說,Capistrano 用于在一個或多個遠(yuǎn)程服務(wù)器上自動地執(zhí)行任務(wù)。它在所有目標(biāo)計(jì)算機(jī)上并行地執(zhí)行命令,還提供在多臺計(jì)算機(jī)上回退修改的機(jī)制。它非常適合任何人執(zhí)行任何系統(tǒng)管理任務(wù),包括專業(yè)的系統(tǒng)管理員和偶爾執(zhí)行系統(tǒng)管理的人員。” 與 Puppet 相同,Capistrano 采用腳本編程。腳本基于 Ruby 編程語言和 Capistrano 的域相關(guān)語言。下面是一個示例:
    task :search_libs, :hosts => "www.capify.org" do
      run "ls -x1 /usr/lib | grep -i xml"
    end
    

    此任務(wù)名為 search_libs。它連接 www.capify.org 并運(yùn)行命令 ls -x1 /usr/lib | grep -i xml。Capistrano 通過角色 支持計(jì)算機(jī)組,還提供許多其他特性。通過 cap 命令啟動任務(wù),比如 cap search_libs。Ruby 和 Rails 開發(fā)人員廣泛采用 Capistrano 把代碼部署到服務(wù)器,但是對于自動執(zhí)行大多數(shù)分布式系統(tǒng)管理任務(wù),它也是非常好的工具。一些教程解釋了如何結(jié)合使用 Capistrano 與 Java™ 語言、Perl、Python 和其他編程語言,以及如何結(jié)合使用 Capistrano 與 Drupal and Expression Engine 等應(yīng)用程序引擎。如果與源代碼控制系統(tǒng)結(jié)合使用,Capistrano 的效果最好,但這不是必需的。可以通過 put 操作分發(fā)二進(jìn)制代碼。

  • Nagios。維護(hù)很重要,但是監(jiān)視也很重要。停機(jī)和錯誤會在網(wǎng)絡(luò)上造成嚴(yán)重破壞,尤其是在許多系統(tǒng)采用相同配置的情況下。Nagios 是一個開放源碼監(jiān)視程序,它可以監(jiān)視服務(wù)器、服務(wù)、資源等。它的安裝和部署很容易,可以通過任何 web 瀏覽器使用它。

還可以研究 Oak Ridge National Laboratory (ORNL) 的 Cluster Command and Control (C3) 和 pdsh 等計(jì)算集群工具。C3 操作 ORNL 的大規(guī)模計(jì)算集群,它提供大量命令行工具,可以減少操作和管理集群所需的時(shí)間和精力,提高系統(tǒng)管理員的生產(chǎn)力。pdsh shell 在許多方面與 pssh 相似,但是還可以管理系統(tǒng)映像。

用很少的時(shí)間管理大量計(jì)算機(jī)

使用 dsh 和 pssh 等工具能夠節(jié)省時(shí)間并減少錯誤??梢栽诖罅肯到y(tǒng)上運(yùn)行相同的命令,幾乎馬上會看到組合的結(jié)果。通過清單把相似的計(jì)算機(jī)集中在一起可以降低遺漏的風(fēng)險(xiǎn)。Puppet 和 Capistrano 可以把經(jīng)常重復(fù)執(zhí)行的任務(wù)捕捉到腳本中。如果管理的計(jì)算機(jī)比較多,自動化就是關(guān)鍵。總之,如果采用適當(dāng)?shù)墓ぞ?,?jì)算云的管理也不難。

原文:http://www.ibm.com/developerworks/cn/aix/library/au-spunix_remoteserver/index.html?ca=drs-

【編輯推薦】

  1. 25個必須記住的SSH命令,你用過了嗎?
  2. 通過SSH訪問遠(yuǎn)程Linux服務(wù)器的四個安全策略
  3. 開源自動化配置管理工具Puppet入門教程
  4. Linux遠(yuǎn)程備份工具Rsync使用案例
責(zé)任編輯:yangsai 來源: IBMDW
相關(guān)推薦

2018-10-26 10:47:11

中科睿芯

2018-08-15 09:13:27

布線系統(tǒng)線纜用量

2017-11-27 08:38:10

UPS選擇容量

2012-06-14 10:21:31

線程線程池Java

2009-08-21 10:50:42

電線電纜材料用量

2015-07-22 18:07:59

阿里云批量計(jì)算

2013-08-01 10:57:37

SUSESUSE Linux

2024-03-04 09:55:11

開源模型訓(xùn)練

2011-03-21 15:45:55

ClusterSSH管Linux服務(wù)器

2024-09-12 17:19:43

YOLO目標(biāo)檢測深度學(xué)習(xí)

2017-01-06 11:18:58

星瑞格

2023-07-13 11:48:18

量子技術(shù)量子計(jì)算機(jī)

2015-04-03 09:50:56

編程高效編程

2010-06-17 14:34:18

Rsync 使用

2019-06-06 10:19:33

谷歌開源計(jì)算庫

2024-01-16 10:45:31

C++語言代碼

2016-12-06 15:40:08

海量計(jì)算星瑞格

2018-02-28 16:20:57

中科睿芯
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號