C3 – Cluster Command & Control suite C3 es un paquete de libre distribución, desarrollado en el Oak Ridge National Laboratory para el cluster Linux HighTORC, que ofrece un conjunto de comandos (en perl y phyton) que permiten gestionar de manera cómoda un sistema de tipo cluster. Consta de una interfaz de línea de comando que permite ejecutar un mismo comando en todos (o parte) de los nodos que componen la máquina. Los comandos de C3 permiten al administrador efectuar operaciones tales como reinicio y apagado de los hosts de manera remota, consulta de procesos y/o usuarios, verificación y creación de sistemas de archivos, copiado de información, etc. Los comandos de C3 pueden ser invocados desde otras aplicaciones; por ejemplo, desde alguna interfaz gráfica (GUI) como M3C. La versión actual, v4.x, es multithread y ha sido diseñada para incrementar la escalabilidad del paquete a clusters más grandes. También permite administrar múltiples clusters. Instalación El paquete se puede bajar desde la dirección: http://www.csm.ornl.gov/torc/C3/ En el fichero INSTALL se detallan los pasos a seguir para realizar la instalación y la configuración del paquete. En el fichero README se indica cómo especificar un cluster en el fichero /etc/c3.conf. Antes de proceder a la instalación hay que asegurarse que se tiene instalado Rsync, OpenSSL, OpenSSH, PERL y Python. Si es necesario, hay que instalar Install Systemimager. También hay que asegurarse de que tenemos activo el DNS (/etc/hosts...). Para instalarlo: [clap00@g000002 ~]$ wget http://www.csm.ornl.gov/torc/C3/Software/c3-4.0.1.tar.gz [clap00@g000002 ~]$ tar zxf c3-4.0.1.tar.gz -C /tmp [clap00@g000002 ~]$ /tmp/c3-4.0.1/install Para que el comando ckill funcione hay que copiar el comando ckillnode en cada uno de los nodos; por ejemplo, en /opt/c3-4: [clap00@g000002 ~]$ cexec mkdir /opt/c3-4 [clap00@g000002 ~]$ cpush /opt/c3-4/ckillnode Fichero de configuración C3 necesita que en el directorio /etc exista un fichero (c3.conf) con la descripción de la máquina. Se puede generar con cualquier editor de texto. Para el caso del cluster que tenemos instalado, el contenido de dicho fichero es el siguiente: cluster cluster32 { g000002:nodo00 #head node dead 0 nodo0[1-9] nodo[10-31] acpt48 acpt49 acpt51 } cluster32 es el nombre que queremos dar al cluster, y entre llaves aparecen los nodos que lo componen. El primer nodo es el head del cluster, y aparece con los dos nombres que tiene asociados a las correspondientes tarjetas de red, la externa y la interna. Se permite introducir nodos dead. Son nodos que no existen, y sirven para que la numeración de los nodos reales no cambie, comience desde 1, etc. También se pueden excluir selectivamente nodos poniendo la palabra exclude. Por ejemplo, si en el cluster anterior pusiéramos exclude nodo09 estaríamos indicando que dicho nodo no se tuviera en cuenta en la ejecución de los comandos C3. Esto permite no tener en cuenta un nodo cuando, por ejemplo, está averiado. Es importante conocer esta estructura, porque a la hora de ejecutar los comandos hay que especificar en qué rango de nodos queremos hacerlo. Comandos C3 ofrece los siguientes comandos: Gestión de nodos cshutdown ckillnode clist cname cnum Manejo de ficheros Ejecución remota cget cpush cpushimage crm ckill cexec cexecs Los comandos de C3 tienen la siguiente estructura: comando [OPCIONES] [MAQUINA] parámetros El campo OPCIONES es distinto para cada comando; para saber las opciones de cada uno de ellos, se puede ejecutar el comando con la opción –h, y se imprime una pequeña pantalla de ayuda del comando. En MAQUINA se especifica el conjunto de nodos sobre los que se va a ejecutar el comando. Si no se pone nada, el comando se ejecutará sobre todos los nodos que estén descritos en el fichero /etc/c3.conf. Se pueden especificar subconjuntos de nodos, por ejemplo, poniendo en dicho campo: cluster32:1-4. En este caso, el comando se ejecutaría sólo en los nodos del 1 al 4. > cshutdown Permite apagar, reiniciar o suspender un nodo. Las opciones son las mismas del comando shutdown en un sistema Linux. La opción t permite especificar el tiempo que se esperará para ejecutar la acción. Ejemplo: [clap00@g000002 ~]$ cshutdown r t 0 > clist, cname, cnum Estos comandos permiten ver la estructura del cluster (clist), conocer los nombres de los nodos de un cluster (cname), o obtener el índice dentro del cluster de un nodo concreto (cnum). Ejemplos: [clap00@g000002 ~]$ clist [clap00@g000002 ~]$ cname cluster32:0-1 [clap00@g000002 ~]$ cnum nodo20 > cget Copia archivos de una cierta ubicación en los nodos. Ignora enlaces y directorios. Si existe un nombre de archivo con el mismo nombre, lo renombra con un sufijo formado por el nombre del nodo del cluster. Ejemplo: [clap00@g000002 ~]$ cget /etc/rc.d/rc.local > cpush Permite mover archivos del nodo principal a los nodos. Ejemplo: [clap00@g000002 ~]$ cpush /home/local /home/rc.bk > crm Permite eliminar archivos y directorios en los nodos. Su funcionamiento es similar al comando rm, con las opciones de interactivo y recursivo. Ejemplo: [clap00@g000002 ~]$ crm –iR /home/datos/temporal/ > ckill Permite finalizar un proceso en ejecución en los nodos del cluster. Hay que utilizar el nombre del proceso y no su ID de proceso, ya que el ID es diferente en cada nodo. Ejemplo: [clap00@g000002 ~]$ ckill –u clap01 xeyes > cexec Ejecuta cualquier comando de Linux en todos los nodos. cexecs sirve para invocar la versión serie de cexec. Ejemplo: [clap00@g000002 ~]$ cexec “ps | grep clap00”