Clusters OpenMosix

OpenMosix (openmosix.sourceforge.net) es un parche para el kernel Linux que permite a varias máquinas actuar como un sistema multiprocesador grande. Lo que hace OpenMosix es balancear la carga de trabajo entre todos los nodos que forman el cluster: migra los procesos, independientemente de en qué nodo se han originado, al nodo con menos carga de trabajo.

Su mayor ventaja es que las aplicaciones no tienen que estar programadas específicamente para OpenMosix ya que trabaja con aplicaciones normales (no paralelizadas), siendo su funcionamiento transparente al usuario. Pero tiene una limitación: sólo migra procesos que no usen memoria compartida, por lo que no migra procesos multi-hilo.

OpenMosix está formado por los siguientes componentes:

  • un parche para el kernel Linux.
  • herramientas para la línea de comandos y para el entorno gráfico.
  • el script de inicio /etc/init.d/openmosix.

Ahora las malas noticias

La última versión estable de OpenMosix es para el kernel 2.4.26 y por el momento no habrá versión para el kernel 2.6 (la versión beta en desarrollo llegó hasta el kernel 2.6.15), ya que el 15/07/2007 OpenMosix comunicaba su cierre y no se sabe si el proyecto continuará con otro nombre (Simple Openmosix 2.6, sourceforge.net/projects/om-2-6/).

Recursos

Instalar OpenMosix

  1. Instalar el kernel OpenMosix: descargamos el parche de la web de OpenMosix (openMosix-2.4.26-1.gz) y se lo aplicamos a las fuentes del kernel (que debe ser un kernel "vanilla"), configuramos en el kernel las opciones de OpenMosix con menuconfig, compilamos el kernel y lo instalamos, añadiendo una entrada para el nuevo kernel en el GRUB. Y reiniciamos el sistema.
  2. Directorio /mfs: OpenMosix utiliza el sistema de archivos compartidos MFS que permite acceder a los filesystem de todos los nodos, necesario para que los procesos puedan migrar (evita que los procesos vuelvan al nodo de origen cada vez que hacen una E/S). Para usar MFS crearemos en cada nodo el directorio /mfs y añadiremos una entrada a /etc/fstab para montarlo al iniciar:
    # File_system             Mount_point Type Options    Dump Pass
    mfs                       /mfs        mfs  dfsa=1     0    0
  3. Configuración de los nodos: ya no es necesario editar el archivo /etc/openmosix.map para definir los nodos del cluster. Las herramientas de usuario disponen del demonio de autodescubrimiento omdiscd que automáticamente descubre todos los nodos en la red.
  4. Iniciar OpenMosix

    Para activar la funcionalidad de openMosix en el kernel e iniciar el demonio de autodescubrimiento omdiscd ejecutaremos el comando:

    # /etc/init.d/openmosix start

Manejar OpenMosix

  1. Herramientas de usuario de OpenMosix para la línea de comandos

    Las herramientas de usuario de openMosix (OpenMosixTools, paquete openmosix-user) son una serie de comandos que permiten administrar openMosix desde una consola. Algunos de ellos son:

    • mosmon: monitoriza los nodos: uso de CPU, memoria usada, etc.
    • mtop: top para openMosix, muestra en qué nodo corre cada proceso.
    • mps: ps para openMosix, muestra el número del nodo.
    • mosctl whois: con mosctl whois <node_number> veremos la IP o el nombre del nodo.
  2. Herramientas gráficas de openMosix

    Para administar openMosix desde el entorno gráfico usaremos OpenMosixView (openmosixview.com, paquete openmosixview), un frontal para las OpenMosixTools. Para lanzar OpenMosixView ejecutaremos el comando:

    # openmosixview

    OpenMosixView monitoriza la carga de cada nodo:

    OpenMosixView

    Nos permite administrar los nodos:

    OpenMosixView nodos

    Gestionar los procesos:

    OpenMosixView procesos

    Migrar procesos manualmente a otros nodos:

    OpenMosixView migrar manualmente

    Manejar procesos remotos:

    OpenMosixView procesos remotos

    Visualizar gráficamente la carga de cada nodo:

    OpenMosixView graficos

    Incluso administrar procesos arrastrándolos (drag and drop):

    OpenMosixView drag and drop

Ejemplos con OpenMosix

  1. Prueba simple: los de OpenMosix dicen que la manera más sencilla de probarlo es crear el script test_mosix, cuyo contenido es:
    awk 'BEGIN {for(i=0;i<10000;i++)for(j=0;j<10000;j++);}' &

    Y lanzarlo con el comando:

    $ for i in `ls /etc/` ; do ./test_mosix ; done

    Con mosmon podremos ver cómo migran los procesos a otros nodos:

    OpenMosix mosmon

    Para matar todos los procesos awk:

    $ pkill awk
  2. Prueba de stress OpenMosixTest (openmosixview.com/omtest/, paquete openmosixtest): sirve para determinar si el cluster funciona correctamente y cómo responde bajo carga, generando al finalizar un informe con los resultados. Para ejecutarlo:
    $ ./start_openMosix_test.sh
  3. Ejemplo con Blender: veamos cómo renderizar una escena de Blender aprovechando OpenMosix. Blender corre como un único proceso por lo que OpenMosix poco puede hacer, como mucho migrarlo a otra máquina. Pero si dividimos el trabajo en varios procesos (tantos como nodos) sí podremos aprovechar nuestro cluster openMosix.

    - Descargamos la escena de Blender blacksmith.tgz y la descomprimimos.
    – Abrimos /blacksmith/blacksmith.blend, seleccionamos la escena 04_06 y configuramos el render a 640×480 y formato .jpg.
    – Descargamos el script de Marc O. Gloor render.gz que será el encargado de dividir el trabajo en tantos procesos como nodos. Lo descomprimimos en el directorio /blacksmith y le damos permisos de ejecución. Para ejecutarlo (4 nodos, 230 imágenes):

    $ ./render blacksmith.blend 1 231 4

    - Cuando termine tendremos 230 .jpg que podremos convertir en vídeo con mencoder:

    $ mencoder "mf://*.jpg" -mf fps=12 -o blacksmith.avi -ovc lavc
      -lavcopts vcodec=msmpeg4v2:vbitrate=800
  4. Ejemplo con KPovModeler y POV-Ray: partimos de una serie de escenas de POV-Ray (.pov) que constituyan una animación, creadas con KPovModeler. Para que openMosix haga su trabajo lanzaremos un proceso por cada imagen .jpg a generar.

    - Utilizaremos el script makemovie.tar.gz (incluye varias escenas .pov de ejemplo).
    – Lo descomprimimos en el directorio /makemovie y le damos permisos de ejecución.
    – Para ejecutarlo el comando es:

    $ ./makemovie pov-tut

    - El script lanza una instancia de POV-Ray por cada escena .pov a renderizar, crea las imágenes .ppm, las convierte a .jpg y genera con ellas un vídeo .avi.

Ejemplos con OpenMosix

  1. Prueba simple: los de OpenMosix dicen que la manera más sencilla de probarlo es crear el script test_mosix, cuyo contenido es:
    awk 'BEGIN {for(i=0;i<10000;i++)for(j=0;j<10000;j++);}' &

    Y lanzarlo con el comando:

    $ for i in `ls /etc/` ; do ./test_mosix ; done

    Con mosmon podremos ver cómo migran los procesos a otros nodos:

    OpenMosix mosmon

    Para matar todos los procesos awk:

    $ pkill awk
  2. Prueba de stress OpenMosixTest (openmosixview.com/omtest/, paquete openmosixtest): sirve para determinar si el cluster funciona correctamente y cómo responde bajo carga, generando al finalizar un informe con los resultados. Para ejecutarlo:
    $ ./start_openMosix_test.sh
  3. Ejemplo con Blender: veamos cómo renderizar una escena de Blender aprovechando OpenMosix. Blender corre como un único proceso por lo que OpenMosix poco puede hacer, como mucho migrarlo a otra máquina. Pero si dividimos el trabajo en varios procesos (tantos como nodos) sí podremos aprovechar nuestro cluster openMosix.

    - Descargamos la escena de Blender blacksmith.tgz y la descomprimimos.
    – Abrimos /blacksmith/blacksmith.blend, seleccionamos la escena 04_06 y configuramos el render a 640×480 y formato .jpg.
    – Descargamos el script de Marc O. Gloor render.gz que será el encargado de dividir el trabajo en tantos procesos como nodos. Lo descomprimimos en el directorio /blacksmith y le damos permisos de ejecución. Para ejecutarlo (4 nodos, 230 imágenes):

    $ ./render blacksmith.blend 1 231 4

    - Cuando termine tendremos 230 .jpg que podremos convertir en vídeo con mencoder:

    $ mencoder "mf://*.jpg" -mf fps=12 -o blacksmith.avi -ovc lavc
      -lavcopts vcodec=msmpeg4v2:vbitrate=800
  4. Ejemplo con KPovModeler y POV-Ray: partimos de una serie de escenas de POV-Ray (.pov) que constituyan una animación, creadas con KPovModeler. Para que openMosix haga su trabajo lanzaremos un proceso por cada imagen .jpg a generar.

    - Utilizaremos el script makemovie.tar.gz (incluye varias escenas .pov de ejemplo).
    – Lo descomprimimos en el directorio /makemovie y le damos permisos de ejecución.
    – Para ejecutarlo el comando es:

    $ ./makemovie pov-tut

    - El script lanza una instancia de POV-Ray por cada escena .pov a renderizar, crea las imágenes .ppm, las convierte a .jpg y genera con ellas un vídeo .avi.

Artículos en la categoría "Virtualización"

  1. Centralitas telefónicas IP PBX
  2. Clusters Beowulf/PVM
  3. Clusters Beowulf/MPI
  4. Clusters OpenMosix
  5. Clusters Kerrighed
  6. Clusters HA con LVS
  7. Clusters UltraMonkey
  8. Clusters LVS + Keepalived
  9. Emulador Qemu
  10. Máquina virtual VirtualBox
  11. Máquina virtual Xen
  12. API de Windows para Linux: WINE
  13. La jaula en Linux: chroot
  14. Cómo ejecutar aplicaciones Android en Linux
  15. RAID (discos redundantes)
  16. LVM (volúmenes lógicos)
  17. AoE (ATA over Ethernet)
  18. Mirror remoto con DRBD

9 Comments:

  1. en que distribucion se tiene que hacer???

  2. eduardo, utiliza un live-CD, el proyecto OpenMosix está semi-abandonado. Necesitarás un live-CD en cada máquina, claro.

  3. Tengo una maquina con xubuntu 8.04 y quisiera instalarle openmosix pero como requiere el kernel, no se si pueda hacer esto, instalar openmosix en una maquina con xubuntu?

  4. “Necesitarás un live-CD en cada máquina, claro.”

    Si lo haces con un live cd de Dynebolic, puedes hacer un “docking” (http://dynebolic.org/manual/x181.htm) y así usar solo un live cd :-)

  5. Es mucho mejor que un live cd, recordad que se puede poner un servidor PEX ( pre boot execution ) y todas las demas maquinas arrancan con la tarjeta de red, es decir, el sservidor openmosix, pasara la imagen del kernel a todas las maquinas de la red que arranquen desde su targeta.
    Sin necesidad ni de cd ni de disco duro… una maravilla para quien tenga una red ultra rapida de fibra optica, es un poco lento para las maquinas que tengan 100 mbit, con una de 1 gbit o 10 gbit no pude probarlo…

  6. mi tesis de grado es montar un cluster open mosix, llevo varios meses intentandolo y no lo he podido hacer. Tendo instalado en mi portatil Debian 5.0 kenel 2.6.26-2-686 y quiero instalar el kernel openmosix pero la version de este es 2.4.20, ¿si lo puedo hacer o necesito instalar una version de linux con un kernel mas abajo??.

  7. Hola, tengo una gran duda que necesito muy urgente…

    He leido que con el live cd es sencillo instalar, es asi?

    Tengo una web que crecera espectacularmente de anuncios patrocinados, y la voy a poner online pero necesito montar el tema del balanceador de carga, pense en ultramonkey por el tema que es el servidor maestro quien lleva las conexiones existentes (el usuario final no perderia las conexiones, sesiones), en cambio con openmoxis no se si servira…

    Quiero que si un usuario tiene una session lo haga siempre el mismo equipo aunque tenga que delegar funciones en otro menos descargado pero que lleve las sessiones, ya que la web tiene seccion logado y si cada vez que accede al cluster lo coge uno distinto no funcionaria la web

    Espero que me comprendan, otra pregunta, ¿en todos los equipos tendria xampp, es eso problema?

    Espero su respuesta, es muy importante

  8. Hola Alberto Romero, actualmente estoy desarrollando mi trabajo de grado orientado a un cluster HA.

    Me gustaria compartir conocimientos.

    escribeme a [email protected]

    Salu2

  9. Hola,

    Ya instale el openmosix y tengo una simulacion en blender, pero necesito saber como instalo blender ya que el kernel para esta version de openmosix me dice que no la acepta, laversion de blender que utilizo es la 2.58.