22 feb

¿Cómo instalar Apache-Mesos?

En el post anterior explicamos qué es Mesos y como funciona internamente, así que, como no puede ser de otra manera, toca instalarlo.

La mejor manera que encontré de instalar Apache-Mesos es utilizando los paquetes de mesosphere.

Nuestro excenario inicial es:

  • 3 servidores Mesos master y ZooKeeper cluster
  • 3 servidores mesos slave
  • Centos 7
  • Y lo montaremos en EC2

Pues al lío.

Empezarnos por los nodos master, estos pasos los debemos hacer en todos los nodos master que tengamos

Instalación de paquetes

Añadimos el repositorio

sudo rpm -Uvh http://repos.mesosphere.io/el/7/noarch/RPMS/mesosphere-el-repo-7-1.noarch.rpm

Actualizamos

yum update

Instalamos Mesos

sudo yum -y install mesos

Instalamos zookeeper

sudo yum -y install mesosphere-zookeeper

Configuración de ZooKepeer

Antes de nada deberemos configurar ZooKepeer, deberemos añadir un numero diferente en cada servidor master, entre el 1 y el 255, en nuestro caso lo añadiremos en

/var/lib/zookeeper/myid

Ahora en todos los nodos de ZooKepeer deberemos decirle donde estan los otros nodos del cluster, esto se hace de la siguiente manera.

vi /etc/zookeeper/conf/zoo.cfg

Añadimos con las ips correctas

server.1=1.1.1.1:2888:3888
server.2=2.2.2.2:2888:3888
server.3=3.3.3.3:2888:3888

Y arrancamos ZooKepeer

sudo systemctl start zookeeper

Configuración de Mesos

Estos pasos también los haremos en todos los miembros master del cluster

Configuramos Mesos para que trabaje con ZooKeeper

vi /etc/mesos/zk

Añadimos las ips de los servidores de ZooKepeer

zk://1.1.1.1:2181,2.2.2.2:2181,3.3.3.3:2181/mesos

Defeninimos el quorum que queremos

vim /etc/mesos-master/quorum
2

Por ultimo debilitamos el servicio de mesos-slave que se nos instalo con el paquete y arrancamos mesos-master.

systemctl stop mesos-slave.service
systemctl disable mesos-slave.service
sudo service mesos-master restart

Comprobamos que el servicio este levantado correctamente.

<pre> systemctl status mesos-master -l
mesos-master.service - Mesos Master
   Loaded: loaded (/usr/lib/systemd/system/mesos-master.service; enabled)
   Active: active (running) since Sun 2015-02-15 11:22:50 UTC; 7min ago
 Main PID: 1156 (mesos-master)
   CGroup: /system.slice/mesos-master.service
           ├─1156 /usr/sbin/mesos-master --zk=zk://172.30.0.111:2181,172.30.0.145:2181,172.30.0.146:2181/mesos --port=5050 --log_dir=/var/log/mesos --quorum=1 --registry=in_memory --work_dir=/var/lib/mesos
           ├─1168 logger -p user.info -t mesos-master[1156]
           └─1169 logger -p user.err -t mesos-master[1156]

Feb 15 11:26:03 ip-172-30-0-111.us-west-2.compute.internal mesos-master[1169]: I0215 11:26:03.540731  1171 master.cpp:1263] The newly elected leader is [email protected]:5050 with id 20150205-134012-1862278828-5050-813
Feb 15 11:26:08 ip-172-30-0-111.us-west-2.compute.internal mesos-master[1169]: I0215 11:26:08.747304  1175 http.cpp:478] HTTP request for '/master/state.json'
Feb 15 11:26:12 ip-172-30-0-111.us-west-2.compute.internal mesos-master[1169]: I0215 11:26:12.015610  1176 detector.cpp:138] Detected a new leader: (id='51')
Feb 15 11:26:12 ip-172-30-0-111.us-west-2.compute.internal mesos-master[1169]: I0215 11:26:12.015688  1176 group.cpp:659] Trying to get '/mesos/info_0000000051' in ZooKeeper
Feb 15 11:26:12 ip-172-30-0-111.us-west-2.compute.internal mesos-master[1169]: I0215 11:26:12.016731  1176 detector.cpp:433] A new leading master ([email protected]:5050) is detected
Feb 15 11:26:12 ip-172-30-0-111.us-west-2.compute.internal mesos-master[1169]: I0215 11:26:12.016767  1176 master.cpp:1263] The newly elected leader is [email protected]:5050 with id 20150215-111558-2432704172-5050-808
Feb 15 11:26:19 ip-172-30-0-111.us-west-2.compute.internal mesos-master[1169]: I0215 11:26:19.730078  1171 http.cpp:478] HTTP request for '/master/state.json'
Feb 15 11:26:27 ip-172-30-0-111.us-west-2.compute.internal mesos-master[1169]: I0215 11:26:27.725008  1171 http.cpp:344] HTTP request for '/master/redirect'
Feb 15 11:27:12 ip-172-30-0-111.us-west-2.compute.internal mesos-master[1169]: I0215 11:27:12.129428  1170 http.cpp:344] HTTP request for '/master/redirect'
Feb 15 11:30:02 ip-172-30-0-111.us-west-2.compute.internal systemd[1]: Started Mesos Master.

La salida de systemctl me parece de lo mas interesante, podemos ver información muy útil, como por ejemplo los nodos de zookeeper o quien es el líder del cluster “Detected a new leader”. 

A más a más, Apache-Mesos dispone de una interfaz web, a la cual podemos acceder por el puerto 5050 y veremos cosas como esta.

main

Podemos ver información, casi en tiempo real de la situación del cluster, vemos los recursos utilizados y disponibles, las tareas activas etc etc, si quisiéramos podemos incluso ver el log del sistema (también esta en /var/log/mesos)

main3En la pestaña Slaves también podemos ver (obvio) el estado de los slaves, que recordemos que son los responsables de ejecutar las tareas.

main2Y por ultimo los Frameworks que tenemos registrados, en nuestro caso tenemos Marathon, un framework muy interesante que explicaré en las siguientes entradas.

 





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/