Configuraciones marathon (mesos scheduler) parte I

Después de estar un tiempo trabajando en la implementación de Apache Mesos y Marathon como scheduler algunos tips  que he aprendido en el camino.

  • La configuración de las variables de entorno cuando utilizamos los paquetes generados por Mesoshere se debe agregar en el archivo /etc/sysconfig/marathon 
  • Cuando tenemos más de una ip en nuestro nodo de marathon y queremos forzar para que las conexiones vayan utilizando esa red debemos agregar la variable LIBPROCESS_IP
  • Marathon utiliza un puerto para comunicarse con el mesos-master, este puerto es aleatorio pero se puede forzar utilizando LIBPROCESS_PORT  más info
  • La configuración de Marathon (usando los paquetes de mesosphere) se realiza mediante la creaciónd de archivos en el path /etc/marathon/conf , cuando necesitemos agregar un parámetro que no tiene valor (por ejemplo –disable_http) el archivo debe comenzar con un ‘?’ (ver código en github)

Eso por ahora

Apache MESOS Centos 6 (parte III)

En esta tercera parte de Apache MESOS & Centos 6 está enfocada en posibilitar el uso de linux containers en mesos utilizando el framework marathon y dockers.

Primero debemos instalar python2.7 para poder instalar luego deimos.

Primero debemos instalar algunas dependencias

yum groupinstall "Development tools"
yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel
yum install -y bzip2-devel
wget https://www.python.org/ftp/python/2.7.7/Python-2.7.7.tar.xz
xz -d Python-2.7.7.tar.xz
tar -xvf Python-2.7.7.tar
cd Python-2.7.7
./configure --prefix=/usr/local
make
make altinstall
export PATH="/usr/local/bin:$PATH"
curl -O http://python-distribute.org/distribute_setup.py
python2.7 distribute_setup.py
easy_install-2.7 pip
pip2.7 install deimos

Cuando revisamos el log de docker podemos encontrar un mensaje diciendo que la versión de docker es inestable debido a la versión del kernel que estamos usando, a continuación actualizaremos el kernel a la última versión que esta disponible en el repositorio elrepo

yum install http://www.elrepo.org/elrepo-release-6-5.el6.elrepo.noarch.rpm
yum --enablerepo=elrepo-kernel install kernel-ml kernel-ml-devel kernel-ml-headers

Además debemos agregar (cgroup_enable=memory swapaccount=1 selinux=0) en

/boot/grub/menu.lst

title CentOS (3.15.3-1.el6.elrepo.x86_64)
        root (hd0,0)
        kernel /vmlinuz-3.15.3-1.el6.elrepo.x86_64 ro root=UUID=03b47cb3-1cad-4bad-9fbf-6baecb8c0e9b console=hvc0 crashkernel=auto SYSFONT=latarcyrheb-sun16 LANG=en_US.UTF-8 KEYTABLE=us cgroup_enable=memory swapaccount=1 selinux=0
        initrd /initramfs-3.15.3-1.el6.elrepo.x86_64.img

Finalmente una vez que se reinicie la máquina estaremos utilizando la version 3.15.x del kernel. La próxima guía mostrará como enviar un proceso al kernel distribuido mesos vía marathon utilizando containers dockers.

Apache MESOS Centos 6 (parte II)

Para continuar con el tutorial de Apache Mesos en Centos 6. En el ejemplo utilizaremos 2 nodos slave contectados a un master, en el cual además esta corriendo zookeeper.

hostname & ips de los nodos

cat /etc/hosts
[root@centos00 ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
localhost.localdomain localhost
192.168.33.100 centos00
192.168.33.101 centos01
192.168.33.102 centos02

run mesos-master

cd mesos-0.19.0
cd build
./bin/mesos-master.sh --ip=192.168.33.100 --work_dir=/tmp/mesos --log_dir=/opt/mesos/log --zk=zk://localhost:2181/mesos --quorum=1 --cluster=TEST

Ahora si ingresan vía web a http://192.168.33.100:5050, verán el administrador de mesos donde no aparecen slaves o frameworks.

run mesos-slave
Los nodos que funcionarán como slaves deben tener instalado mesos, proceso que fue presentado anteriormente.

cd mesos-0.19.0
cd build
./bin/mesos-slave.sh --master=zk://192.168.33.100:2181/mesos --ip=192.168.33.101

Ahora si ingresan a http://192.168.33.100:5050 verán que aparecen dos slaves listos para ser utilizados, el siguiente paso es instalar el framework marathon

instalar & ejecutar marathon

curl -O http://downloads.mesosphere.io/marathon/marathon-0.6.0/marathon-0.6.0.tgz
tar xvfz marathon-0.6.0.tgz
cd marathon-0.6.0
./bin/start --master zk://192.168.33.100:2181/mesos --zk zk://192.168.33.100:2181/marathon

Apache MESOS Centos 6 (parte I)

Hace un par de días he estado leyendo sobre el proyecto Apache Mesos. Ahora es momento de comenzar con las pruebas de concepto para ver que tal se comporta. Básicamente es un administrador de recursos para un cluster, no es un planificador, sino un administrador!. Una de las principales ventajas es que permite abstraernos de  las “máquinas” en un cluster y simplemente pensar cuantos recursos necesitaríamos para ejecutar cierto proceso, tampoco nos importa en que maquinas corra.

Para instalar Apache Mesos (versión 0.19.0 actualmente) en centos deben realizar lo siguiente.

Instalar paquetes de desarrollo (homologo al build-essential de ubuntu)

yum groupinstall "Development tools"

Instalar dependencias de java y python

yum install java-1.7.0-openjdk-devel python python-devel libcurl libcurl-devel python-boto zlib-devel cyrus-sasl-devel

Instalar zookeeper server utilizando cloudera.com

wget http://archive.cloudera.com/cdh4/redhat/6/x86_64/cdh/cloudera-cdh4.repo
yum --nogpgcheck localinstall cloudera-cdh-4-0.x86_64.rpm
yum install zookeeper-server
echo 1 > /var/lib/zookeeper/myid
service zookeeper-server init
service zookeeper-server start

Instalar maven

wget http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo -O /etc/yum.repos.d/epel-apache-maven.repo
yum install apache-maven

Descargar y descomprimir las fuentes

wget http://www.apache.org/dist/mesos/0.19.0/mesos-0.19.0.tar.gz
tar xvfz mesos-0.19.0.tar.gz
cd mesos-0.19.0
mkdir build
cd build
../configure

Podrían tener un error si no tienen seteados el JAVA_HOME y algunas otras variables de entorno.

export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk.x86_64
export JAVA_LDFLAGS="-L/usr/lib/jvm/java-1.7.0/jre/lib/amd64/server -R/usr/lib/jvm/java-1.7.0/jre/lib/amd64/server -ljvm"
export JAVA_CPPFLAGS="-I/usr/lib/jvm/java-1.7.0/include -I/usr/lib/jvm/java-1.7.0/include/linux"
export LD_LIBRARY_PATH=/usr/lib/jvm/java-1.7.0/jre/lib/amd64/server:$LD_LIBRARY_PATH

Compilar, check e instalar

make
make check
make install

PD: Igual pueden descargar e instalar el paquete para su distribución en http://mesosphere.io/downloads/