15 feb

¿Qué es Apache-Mesos?

mesos

Este es el primero de una serie de post donde explicaré:

  1. ¿Cómo funciona Mesos?
  2. ¿Cómo se instala?
  3. ¿Cómo se instalan Frameworks?
  4. ¿Cómo se lanzan aplicaciones en el cluster a través de Marathon?
  5. ¿Cómo se escalan esas aplicaciones?

Mesos nos ofrece una capa de abstracción entre los servidores y los recursos, es un concepto un poco diferente, pero a mi parecer cuando lo entiendes me parece excepcioal. Por otro lado Mesos te proporciona una gestión de cluster y como una una gestión de los recursos del cluster.

O sea que básicamente lo que tendremos es un lugar donde correr nuestras aplicaciones (Frameworks, después explicamos que es esto) sin preocuparnos de los servidores que tenemos por debajo.

¿Qué ofrece Mesos?

  1. Escalabilidad hasta 10000 nodos
  2. Alta disponibilidad de los servidores Master y los servidores Slaves a traves de Zookeeper
  3. Soporta de forma nativa Docker
  4. Aislamiento de recursos entre procesos en el cluster, o sea que que aseguramos que no se pisen entre ellos o que no puedan acceder los unos a los otros.
  5. Podemos desarollar Frameworks  en Java, Python y C++.

Esta es la teoría por encima, a partir de aquí viene la parte técnica

Venga al lío.

Funcionamiento de Apache-Mesos

Mesos

Esta es la estructura básica para tener un cluster de mesos, donde tendremos:

1.- Tres Mesos master, uno en activo y dos en Standby

2.- Tres Zookeepers

3.- Tres Mesos Slave

Nodos masters

Dentro del un cluster de Mesos tendremos los nodos Master, de todos los que podamos tener solo uno será el que este en activo, los demás estarán en una posición pasiva, a la espera de que el nodo activo pueda fallar y entonces asumir el role de master activo, esta flujo de trabajo se realiza a través de zookeeper, que es  el punto de unión de los nodos Master, a través del cual todos saben el estado del resto de nodos master.

Nodos slaves

Los nodos slaves son los encargados de correr las tareas de los Frameworks, estos reportan su estado directamente al nodo master activo, ya que saben cual es a través de zookeeper.

Frameworks

Los Frameworks  son instalados en los nodos master, y a través de ellos trabajaremos con los recursos de los slaves, estos se puede desarrollar a nuestro antojo http://mesos.apache.org/documentation/latest/app-framework-development-guide/ o utilizar los que ya existen

Frameworks

http://mesos.apache.org/documentation/latest/mesos-frameworks/

Pongamos un ejemplo para entenderlo mejor, imaginemos que optamos por un Framework  de Big Data Processing por ejemplo Storm, pues instalaremos el storm-mesos en los masters, cuando queramos hacer una petición se lo realizaremos al Framework, que a su vez hablara con el master y este se encargara de enviar la tarea a uno o varios slaves. Estas tareas puede ser de corta o larga duración.

¿Cómo funciona las peticiones de recursos?

architecture-example

El funcionamiento es sencillo

  1. Pongamos que el framework 1 solicita recursos para lanzar dos tareas (la cual puede ser un cron o un servicio como Jboss y Apache o Storm, etc etc …)
  2. Los nodos slaves reportan al master el número de recursos libres que disponen, en nuestro ejemplo el slave 1 le comenta al master que tiene 4cpu y 4gb libres.
  3. Cuando el framework pide recursos, el master le dice que tiene  4cpu y 4gb disponibles, entonces el framework envía las tareas con el los recursos necesarios.
    1. Task 1, 2 cpu 1gb
    2. Task 2, 1cpu 2gb

4. El master se encarga de enviar las tareas a los slaves (mesos-executor) y este las empieza a ejecutar.

5. Si un segundo Framework solicita recursos, el master sabe que aún le sobra 1cpu y 1gb en el slave 1.

¿Cómo funciona internamente los slaves?

isolation

Como hemos comentado  las tareas que se lanzan en los slaves estas aisladas, este aislamiento por defecto se hace con cgroups linux, también docker de forma nativa, cuando la tarea llega al slave, este crea un nuevo recurso cgroups y se lo asigna a la tarea.

Pongamos un caso practico, imaginemos que tenemos una replica de mysql corriendo en un slave, con el paso del tiempo esta repica tendra datos, caches y de mas informaicón necesaria para que el servicio corra, entonces podemos pensar que en el caso que el slave falle seria un problema.

Para eso Mesos ofrece una serie de paliativos.

Checkpoints

  • Los slaves realizan checkpoints sobre el estado de la tarea, son como copias de seguridad del estado, para que en el caso que tengamos que reiniciar el slave la recuperación sea mas rápida.

Cache executor

  • En el caso de que el servicio de mesos-slave no este disponible, las nuevas tareas y peticiones serán guardadas en una cache, cuando el servicio este recuperado se empezaran a tramitar

Conexion

  • Una tarea que ya se ejecuto anteriormente tendrá mas posibilidades de volverse a ejecutar en el mismo cgroups y el mismo slave que lo hizo la ultima vez, de esta manera la información se podrá recuperar.

Fallo del salve

  • En el caso de fallo completo de un slave, el framework solicitará volver a montar la tarea en un nuevo slave.

En el siguiente post explicare como se instala Apache-Mesos en Centos7

 Referencias

http://mesos.apache.org/

12 thoughts on “¿Qué es Apache-Mesos?

  1. Pingback: Cómo instalar Apache-Mesos | Miguel Ángel Ausó

  2. Pingback: Marathon framework para Apache-Mesos | Miguel Ángel Ausó

  3. Hola Miguel Angel, (tocayo!)
    Gracias por aclarar un poco mas de qué va Mesos.
    Mi duda (desde el desconocimiento) es si se puede usar Mesos como gestor de procesos en un cluster para correr en varios nodos del cluster una aplicacion monolitica intensiva en calculo, por ejemplo hecha en C++, CPLEX, Mathlab..

    Los frameworks que mencionas segun veo tienen todos una fuerte componente distribuida, como STorm, Hadoop, etc..
    ¿Valdria Mesos para ‘coordinar’ la distribucion en los distintos nodos del cluster de ejecuciones de ese proceso monolítico?, De ser que si, ¿Como?

    Si no se puede, se te ocurre ¿como pasar de una computacion arquitectura monolitica a una computacion en grid sin hacer reingenieria del programa? ¿Con cosas tipo Moab, Maui, Torque…?

    Muchas gracias

    • Hola Miguel!

      No es la finalidad de Mesos y lamentablemente no puede pasar a grid una aplicación monolítica, la finalidad de Mesos es la asignación/control/gestión etc de recursos de un grupo de máquinas, en tu caso te permitirá lanzar más de un proceso de cálculo asegurando que tendrá los recursos deseados, pero no distribuirá la carga de un solo proceso en varios nodos.

      Un saludo y gracias por leer mi blog

  4. Otro Miguel aquí jejejeje

    Gracias por el post porque es genial. No tengo ni idea de estos temas y con tu post me ha quedado muy claro.

    Tengo una duda desde la ignorancia: cuando hablamos de recursos en los nodos esclavos, también puede ser disco tal cual? es decir, decirle al framework que guarde un fichero, el framework se lo da al master y el fichero termina guardado en el nodo48? (podría pasar que un fichero se distribuyera en partes a varios nodos? y se podría hacer que siempre se replicara a todos los nodos o a algunos?)

    Gracias y un saludo

    • No, no es posible, los esclavos les dicen al master los recursos que tienen libres y el master le envía la tarea a ejecutar, esta tarea solo se realizara en un nodo esclavo de todo el cluster, aquel que tenga los recursos que hayamos definido libres.

        • Hola! El fichero se puede guardar en el servidor esclavo, pero debes ver los servidores esclavos como recursos disponibles, para que te hagas una idea a no ser que lo cambies, todas las tareas que corres en Mesos estarán en /tmp. Cada proceso corre únicamente en un servidor esclavo, pero puedes tener X procesos (X Apache) que dando el mismo servicio estén distribuidos por el cluster.

          Si miras los siguientes post igual te queda más claro el funcionamiento.

  5. Pingback: Pataconf, Octubre 6 de 2016, dia de charlas! | Bitácora del Capitán

  6. Excelente ahora yo necesito en relidad una buena documentacion de como empesar a desarrollar con spark y hadoop en python me estyo iniciando y me a resultado dificil esque los algoritmos de ml pienso desarrollarlos yo para optimizarlos sobre el cluster.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>