Category Archives: linux

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 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/

Actualizando zona horaria en linux

Debido al NO cambio de hora en Chile el día 9 de marzo fue necesario actualizar las zonas horarias en varios equipos, si no realizaron este cambio les dejo un pequeño script (gracias a pingu) para que realicen el proceso en forma manual.

#!/bin/bash
echo "Actualizando timezone"
wget ftp://ftp.iana.org/tz/tzdata-latest.tar.gz
tar xvfz tzdata-latest.tar.gz
zic southamerica
cp -vf /usr/share/zoneinfo/America/Santiago /etc/localtime

Raspberry PI + Torrent

Hace un par de semanas llegó mi raspberry pi de 700mhz y 256MB de RAM. La compré principalmente para configurar un sistema de descargas utilizando los discos usb que tengo. Actualmente esta corriendo la versión de debian disponible en la sección Downloads del sitio oficial de Raspberry. La instalación del OS fue muy simple fue sólo utilizar el comando/software dd para copiar la imagen a mi memoria SD de 16 GB, luego conectar todo , iniciar (conectando el cable de poder) e ingresar via ssh utilizando el user y password por defecto del sistema.

Descargar torrent

Para descargar torrent utilizo el cliente transmission (transmission-daemon utilizando la interfaz web). Para ello utilizamos apt-get.

sudo apt-get install transmission

Para configurar este cliente debemos editar un archivo que se encuentra en /etc/transmission-daemon/settings.json

sudo vim /etc/transmission-daemon/settings.json

Algunos datos de mi configuración son:

"incomplete-dir": "/shared/tmps",
"incomplete-dir-enabled": true,
"lpd-enabled": false,
"max-peers-global": 200,
"message-level": 2,
"peer-congestion-algorithm": "",
"peer-limit-global": 240,
"peer-limit-per-torrent": 60,
"peer-port": 51413,
"peer-port-random-high": 65535,
"peer-port-random-low": 49152,
"peer-port-random-on-start": false,
"peer-socket-tos": "default",
"pex-enabled": true,
"port-forwarding-enabled": false,
"queue-stalled-enabled": true,
"queue-stalled-minutes": 30,
"ratio-limit": 1,
"ratio-limit-enabled": true,
"rename-partial-files": true,
"rpc-authentication-required": true,
"rpc-bind-address": "0.0.0.0",
"rpc-enabled": true,
"rpc-port": 9091,
"rpc-url": "/transmission/",
"rpc-whitelist": "127.0.0.1",
"rpc-whitelist-enabled": false,
"script-torrent-done-enabled": true,
"script-torrent-done-filename": "/home/pi/scripts/download_complete.sh"

Para ejecutar un script cuando se termine la descarga de un torrent

"script-torrent-done-filename": "/home/pi/scripts/download_complete.sh"

Para permitir manejar transmission en forma remota utilizando el protocolo RPC

"rpc-authentication-required": true,
"rpc-bind-address": "0.0.0.0",
"rpc-enabled": true,
"rpc-port": 9091,

Luego para reinciar el transmission.

sudo invoke-rc.d transmission-daemon reload

Ahora podemos ingresar a http://ip_raspberry:9091 (por defecto el usuario es tranmission y el password transmission). Y ya podremos comenzar a descargar torrents.

En los próximos post mostraré como configurar flexget. Este programa se encarga de revisar si hay nuevos torrents (via RSS) y los agrega en forma automática a transmission.