當手上一台機器的時後, 管理就登入管理, 兩台的時後一樣, 但是當手上有 10台 或 上百台機器的時後, 該怎麼管理?
上百台機器, 遇到 機器掛掉 / 系統需要升級 / 要對所有機器做某個動作時, 該怎麼辦?
通常最常用的做法是: 使用 ssh domain_name ls
(就可以遠端對 domain_name 下 ls 的 command), 由此寫個 for loop 跑 ssh domain_name command 等.
不過每次都要寫 for, 然後常常會遇到些意外狀況, 總之不是快速又保險的做法.
推薦使用工具 - DSH
DSH - dancer's shell / distributed shell
- 官方解釋: dsh is an implementation of a wrapper for executing multiple remote shell (rsh/remsh/ssh) commands. rsh/remsh/ssh are wrappers for executing shell (ksh/bash/zsh/tcsh/sh .. etc... ) on remote hosts.
- MAN 解釋: dsh executes command remotely on several different machines at the same time. An utility to effectively do a for a in $(seq 1 10); do rsh $a command; done in bourne shell.
Debian 安裝
apt-get install dsh
操作方式
dsh [-m machinename | -a | -g groupname] [-r remoteshellname] [-c | -w | -i | -F forklimit ] -- commandline
命令選項
- -a (all)
- /etc/dsh/machines.list | $(HOME)/.dsh/machines.list
- -g group
- /etc/dsh/group/groupname | $(HOME)/.dsh/group/groupname
- -m [machinename[,machinename]*]
- -r remoteshell shellname
- 其它詳細選項可見 man dsh 或 dsh --help
使用範例
- dsh -a w
- dsh -r ssh -a -- w
- dsh -r ssh -m mach1 -m mach2 -c -- 'echo $HOSTNAME $(cat /proc/loadavg)'
相容寫法(範例)
- dsh -m example.com,example2.com -c sudo apt-get update
- dsh -m example.com -m example2.com -c sudo apt-get update
- dsh -m example.com -m example2.com -c "sudo apt-get update"
- dsh -m example.com -m example2.com -c -- "sudo apt-get update"
如何使用 Group 方式管理
- vim /etc/dsh/group/group_name
- 內容加入 domain name list
- 操作方式: dsh -g group_name -c "w"