初识ClusterShell

ClusterShell 是一个事件驱动的用来执行本地或者远程计算机命令的 Python 库,基于所选择的引擎和工作者模式。

<p style="text-align: right;">--摘自 开源中国</p>

·缘由

话说skidu上班已经一个月了,前不久有幸被提前转正,紧接着就接到一个项目是要给公司内部做一套服务器管理程序提供给研发部和技术支持部的同事使用,让他们可以在这上面浏览公司现有服务器,并且可以申请空闲中的公共服务器自己使用;

同时,网管也可以通过这套程序得知哪些服务器是长时间空闲的,这样他们就可以关掉这些机器,让公司的机房降降温(前段时间机房温度据说最高时候达到了恐怖的70℃),在一定程度上避免因为这个问题导致公司网络中断。

在开发之前,skidu和小组组长一块简单的对这套程序应该能实现些神马功能做了个大致分析,但限于上面催促的比较急,skidu只好先做一套“测试版”出来让他们先用着。程序在今天已经成功部署到服务器上面,随之新的需求就来了,希望能够实时监测到被控服务器的运行状态!

话说这套程序公司内之前是有人做过的,于是skidu找来了以前的源码读了起来,发现这个“实时监控”的功能以前就已经实现了,用的是一个clush命令在实现,苦苦搜寻,skidu终于找到了这款软件:ClusterShell

·安装

ClusterShell的安装很简单

首先,前往http://sourceforge.net/projects/clustershell/files/clustershell/获取程序

这里skidu的测试机上面python是2.4.3版的,所以就使用了1.51版的clustershell(1.6版似乎必须在2.7+版python才能正常安装)

解压下载来的压缩包并进入程序目录:

[root@skidu ~]# tar -zxf clustershell-1.5.1.tar.gz
[root@skidu ~]# cd clustershell-1.5.1
[root@skidu clustershell-1.5.1]# ls
build              conf  lib                         README     setup.py
ChangeLog          dist  Licence_CeCILL-C_V1-en.txt  scripts    tests
clustershell.spec  doc   Licence_CeCILL-C_V1-fr.txt  setup.cfg

给程序赋予x权限

[root@skidu clustershell-1.5.1]#chmod +x -R ./*

执行安装

[root@skidu clustershell-1.5.1]#./python.py install

随后,程序会自动执行整个安装过程。

安装完毕后需要手工在/etc目录下建立一个clustershell的目录并将配置文件移至该目录下

[root@skidu clustershell-1.5.1]#mkdir /etc/clustershell
[root@skidu clustershell-1.5.1]#cp ./conf/* /etc/clustershell

至此,安装完毕

·简单使用

skidu需要的功能很简单,基于现已实现的ssh功能对每台受控进行一次基于key的访问并执行一条语句,如果能成功连接某台受控机那么我能获取到这条信息;如果某台受控机上面未放置共钥那么就会提示连接失败

好吧,咱来改改配置信息(/etc/clustershell/clush.conf)

[root@skidu clustershell-1.5.1]#vim /etc/clustershell/clush.conf

随后我们会看见如下所示的配置信息

# Configuration file for clush
#
# Please see man clush.conf(5)
#
# $Id: clush.conf 463 2011-02-09 21:57:52Z st-cea $
[Main]
fanout: 64
connect_timeout: 15
command_timeout: 0
color: auto
fd_max: 16384
history_size: 100
node_count: yes
verbosity: 1
#ssh_user: root
#ssh_path: /usr/bin/ssh
#ssh_options: -oStrictHostKeyChecking=no

这里skidu根据自己的实际需要做了个简单的配置,指定ssh连接用户为root,并指定密钥文件(因为skidu的这个密钥没有放置在~/.ssh目录)

最终的配置文件如下

# Configuration file for clush
#
# Please see man clush.conf(5)
#
# $Id: clush.conf 463 2011-02-09 21:57:52Z st-cea $
[Main]
fanout: 64
connect_timeout: 15
command_timeout: 0
color: auto
fd_max: 16384
history_size: 100
node_count: yes
verbosity: 1
ssh_user: root
#ssh_path: /usr/bin/ssh
#ssh_options: -oStrictHostKeyChecking=no
ssh_options: -i /xxxxx  #这里是密钥的绝对路径,就不写出来了

保存退出

再新建一个groups文件,里面写入需要监控的服务器的ip信息

dev:192.168.21.2 192.168.21.3

*skidu是在虚拟机中做的测试,其中,控制端的ip为192.168.21.116(好吧,这里说出来貌似没什么用),被控制端的ip是192.168.21.2,同时skidu还写了一个192.168.21.3这个不存在的ip地址用来模拟真实环境中有一台可能是关机或者网线掉了的服务器,这里大家可以根据自己的实际使用环境来编写此文档。

保存退出后便可以开始执行了

[root@skidu clustershell]# clush -g dev &quot;echo ok&quot; 2&gt;&amp;1 | grep -v &quot;clush&quot;
192.168.21.3: ssh: connect to host 192.168.21.3 port 22: No route to host
192.168.21.2: ok

改掉21.2上面存放公钥的名字,再来一次

[root@skidu clustershell]# clush -g dev &quot;echo ok&quot; 2&gt;&amp;1 | grep -v &quot;clush&quot;
192.168.21.2: Permission denied (publickey,gssapi-with-mic,password).
192.168.21.3: ssh: connect to host 192.168.21.3 port 22: No route to host

好吧,聪明的同学已经不需要再提示了,咱通过程序获取到这些信息,然后针对每一行中的关键词进行匹配,然后就可以判断服务器是否连接正常了~

如果哪位看官有更好的点子还请分享出来:)

最后,分享一份官方文档给大家~很有用的哟~

ClusterShell_UserGuide_EN_1.6

PS:ad一下,skidu最近入手了一只vps,闲置中,有兴趣合租的朋友可以联系我[skidu对邻居要求很高的]~~ 送上探针一枚 探针

标签: clustershell


Deprecated: strlen(): Passing null to parameter #1 ($string) of type string is deprecated in /data/apps/skidu/var/Typecho/Request.php on line 310

Deprecated: str_replace(): Passing null to parameter #3 ($subject) of type array|string is deprecated in /data/apps/skidu/var/Typecho/Db/Adapter/Pdo/Mysql.php on line 65

Deprecated: str_replace(): Passing null to parameter #3 ($subject) of type array|string is deprecated in /data/apps/skidu/var/Typecho/Db/Adapter/Pdo/Mysql.php on line 65

评论已关闭