2006-11-21

集群管理工具之C3 的配置与使用

C3 即 Cluster Command Control ,是一组集群用的python脚本程序,其官方网站 http://www.csm.ornl.gov/torc/C3/ 。可以直接下载gz包也可以下载rpm包。这一组脚本程序均是通过ssh访问集群中的节点机,为在集群系统上运行程序及交换文件提供了方便。当然你也可以自行编制这样的脚本,我就编过一个类似cexec的脚本,但是后来发现C3的脚本要比我自己的脚本强大得多,而且有更好的适应性。

1. 安装

C3 rpm方式安装到/opt/c3-4目录下,所以要将 /opt/c3-4加到你的PATH环境变量中,将/opt/c3-4/man加到MANPATH环境变量中。安装并设置完环境变量后进行如下操作:

手动建立这个文件 /etc/c3.conf ,这个文件用于定义集群节点,内容如下:

cluster local {
master.example.com
node02.example.com
}
有几点说明:

(1) 大括号里的第一行是 head 节点,可以在从节点上执行 cexec 等命令,但是 head 节点上必须已经安装了 c3。

(2) 第一行必须写在 head 节点上运行 hostname 输出的主机名,而不能写 IP 或是其它有效主机名。比如我的 hostname 输出的是 master.sim973.gfkd.mtn, 但是c3.conf却是这样写的:

cluster local {
master
node02
}
这样执行就会有问题。读了一下cexec的代码发现,如果 head 节点定义和 hostname 的输出不一致会解释为远程集群,其调用的方式有些区别。如果为本地集群的话则 head 节点上不执行,除非指定了 --head 则只执行 head 节点。如果为远程集群的话,执行的过程是这样的:在 head 节点的 tmp 目录下建了一个新的conf文件,用ssh来调用 head 节点上的 cexec ,conf 文件为刚指定的这个conf文件,执行的时候根据这个文件的内容又把这个集群判断为远程集群,再重复这个调用过程。所以如果 head 节点不指定为hostname的输出,则会陷入死循环调用。

(3) cexec等命令如果不加任何选项不在head节点上执行。

(4) cexec默认是用ssh的方式执行其它节点上的命令,如果想用rsh则自行设定C3_RSH环境变量,不论用哪种方式必须保证在head节点ssh或rsh运行其它节点的命令无须输入密码。ssh需要设定一下authorized_keys2,rsh需要设定一下.rhosts文件,推荐用ssh,详细设置见我的文章。

2. cexec

cexec的作用是在所有集群节点上运行一条命令,缺省情况下cexec在运行命令时并不在 head 节点上运行,除非你在调用cexec时使用了 --head 参数,其它命令同理。

cexec ls
cexec --head ls

cexec -f ./c3.conf ls
C系列的脚本程序均在运行时均可以用-f参数指定单独的c3.conf文件,如:

cexec -f ~/c3.conf ls
3. cget

cget的作用是在运算节点上拷贝文件到本地:
[lxq@lxq temp]$ cget -f ~/c3.conf mbox
[lxq@lxq temp]$ ls
mbox_local_10.129.4.19 mbox_local_10.129.4.23

4. cpush

cpush的作用是将文件推到所有节点上:

[lxq@lxq temp]$ touch aaa.tmp
[lxq@lxq temp]$ ls
aaa.tmp mbox_local_10.129.4.19 mbox_local_10.129.4.23
[lxq@lxq temp]$ cpush -f ~/c3.conf aaa.tmp $HOME
building file list ... done
aaa.tmp wrote 103 bytes read 36 bytes 13.24 bytes/sec
total size is 0 speedup is 0.00
building file list ... done aaa.tmp
wrote 103 bytes read 36 bytes 13.24 bytes/sec total size is 0 speedup is 0.00
[lxq@lxq temp]$ ssh 10.129.4.23 ls
Sent
Trash
aaa.tmp
mbox
这里只是举几个例子,更详细的命令及用法可以参见其manual。

没有评论: