如果你有若干台数据库服务器,突然你想知道它们当前的即时负载情况,你会怎么办?挨个登录上去uptime一下?感觉有点傻,写个shell?浪费时间,直接用ClusterShell吧!
ClusterShell的安装与配置
ClusterShell的安装很Easy,如果使用APT或YUM包管理方式的话,基本就是一条命令的事儿,我就不说了,这里说一下如何从源代码安装,需要在源代码目录执行如下命令:
shell> python setup.py install
为了使用的方便,还需要拷贝配置文件到指定目录:
shell> mkdir /etc/clustershell shell> cp conf/* /etc/clustershell
接着配置我们要管理的节点,假设我们配置了一个db组,包含db_[1-3]三个节点:
shell> cat /etc/clustershell/groups db: db_1 db_2 db_3
准备就绪,顺着文章开头的例子说:查询所有数据库服务器当前的负载情况:
shell> clush -b -g db "uptime"
注:前提是需要在被操作服务器上设置免密码登录,如果不清楚,请看下面的内容。
番外篇:如何配置服务器免密码登录?
如果没有事先生成ssh密匙的话,需要先生成:
shell> ssh-keygen
可选操作:为了方便,我们可以给需要登录的服务器起一个可读性更好的别名,如果你做了类似的操作,那么后面的<USER>@<SERVER>都可以换成对应的<HOST>:
shell> cat ~/.ssh/config Host db_1 Hostname <SERVER> User <USER> Port <PORT> Host db_2 Hostname <SERVER> User <USER> Port <PORT> Host db_3 Hostname <SERVER> User <USER> Port <PORT>
然后把生成的公钥添加到需要登录的服务器指定位置:
shell> cat ~/.ssh/id_rsa.pub | ssh <USER>@<SERVER> "cat - >> ~/.ssh/authorized_keys"
如果你和我一样总记不清如何正确拼写authorized_keys,可以接着学一下ssh-copy-id的用法,这个命令可以让操作更简单点:
shell> ssh-copy-id -i ~/.ssh/id_rsa.pub "<USER>@<SERVER>"
注:每配置好一台免密码登录的服务器,最好手动实际操作一下,因为第一次连接会要求手动确认是否保存信息到~/.ssh/known_hosts文件。
…
有的网友会说,监控服务器负载可以用Munin之类的工具。不错确实如此,不过Munin之类的工具无法给你一个及时数据,另外,ClusterShell并不局限在查询负载的功能上,跟上不同的命令,就可以查询不同的数据,而在Munin之类的工具里,如果你想监控某个数据,必须有对应的插件才行。ClusterShell是不可或缺的Linux运维利器!
我们线上的服务器是solaris的,不给装工具,只能写shell
for i in `cat servers`
do
ssh $i “uptime”
done
不知道有没有什么并发执行的工具或方法,for循环是顺序执行机器列表的,如果机器多了的话会很慢
ClusterShell就是并发执行的,参见文档介绍:ClusterShell allows for running commands in parallel on very large Linux clusters using present remote shell facilities on your cluster like SSH.
why not gnu parallel?
比起 dsh 来如何
为什么不用omnitty呢??
Pingback: flykobe的技术与生活杂谈 » Blog Archive » 使用clustershell上线代码,并管理服务器
感谢大家反馈,可怜我截至目前只实际用过ClusterShell,至于大家提到的软件,我大概看了看,感觉各有千秋,GNU Parallel强大但也复杂;DSH简单易用;OmniTTY操作上稍显繁琐。
好像还有个pssh .
另外collectl可以监控多台 http://collectl-utils.sourceforge.net/colmux.html
用Fabric好了啊,比这个简单啊
Fabric是不错,不过不支持并行执行。