Voy a iniciar una serie de posts sobre Redis. Al igual que hicimos con Kafka y su ecosistema (básicamente Zookeeper) veremos:

  1. Introducción a Redis y Redis-Sentinel
  2. Instalación y configuración de Redis y Redis-Sentinel
  3. Monitorización de Redis con el PRTG
  4. Operaciones habituales con Redis

Vamos a empezar con la instalación y la configuración.

Instalación

En esta entrada se describe la instalación del servicio Redis en Linux®. Este servicio no tiene requisitos previos. La instalación se realiza directamente desde el apt. Hay que tener en cuenta que como vimos en la entrada anterior podemos tener más de una instancia Redis en cada servidor y que por lo tanto, siguiendo la guía de buenas prácticas, deberemos crear cada servicio (tanto de redis como de redis-sentinel) usando como sufijo el número de puerto en el que escucharán los mismo. En el script de instalación que adjunto en la cuenta de github se debe pasar un parámetro, el cual es el número de puerto en el que se ejecutará el servicio. Como este documento describe los pasos uno por uno, de aquí en adelante supondremos que instalamos el servicio en el puerto 6379 y por lo tanto el redis-sentinel en el 26379, siguiendo la arquitectura que definimos, y que recordamos aquí.

redis_ungrouped

Para instalar el software, siempre como root debemos seguir los siguientes pasos:

1. Instalamos el software con el apt.

$ apt-get install redis-server

2. Eliminamos los servicios Unit que se crean por defecto.

$ service redis-server stop
$ systemctl disable redis-server
$ systemctl daemon-reload

3. Ahora, creamos todas las carpetas necesarias para albergar la nueva configuración.

$ mkdir /data/redis/
$ mkdir /data/redis/6379
$ mkdir /data/sentinel/
$ mkdir /data/sentinel/26379
$ mkdir /var/log/redis
$ mkdir /var/log/sentinel

4. Y creamos los ficheros necesarios para la configuración posterior

$ touch /var/log/redis/redis_6379.log
$ touch /var/log/sentinel/sentinel_26379.log
$ cp /etc/redis/redis.conf /etc/redis/redis_6379.conf
$ touch /etc/redis/sentinel_26379.conf

Además tenemos que cambiar los permisos a los ficheros de configuración, puesto que el sentinel necesita poder cambiarlos, y en la ubicación en la que están no se puede escribir por defecto. Sin este paso NO FUNCIONARÁ.

$ chmod 666 /etc/redis/redis_6379.conf
$ chmod 666 /etc/redis/sentinel_26379.conf

5. Y asignamos permisos a las mismas (el usuario redis se crea por defecto en cuanto se ejecuta el paso uno de este manual, y por lo tanto no es necesario crearlo)

$ chown redis:redis /data/redis/ -R
$ chown redis:redis /data/redis/6379 -R
$ chown redis:redis /data/sentinel/ -R
$ chown redis:redis /data/sentinel/26379 -R
$ chown redis:redis /var/log/redis -R
$ chown redis:redis /var/log/sentinel -R

Configuración

Ahora sólo falta configurar el servicio para que use las carpetas y los usuarios creados, además de configurar el fichero unit para systemd.  Los parámetros que hay que cambiar son los siguientes. Primero vamos con la configuración de Redis.

Configuración Redis

Empezaremos por editar el fichero /etc/redis/redis_6379.conf.

1. Hay un bug reconocido en redis por el cual no se puede usar la opción daemonize si se usa con systemd. Lo que debemos hacer es comentar la siguiente línea.

# daemonize yes

2. Como podemos tener más de un proceso redis, debemos identificar cada uno de ellos, por lo tanto, cambiamos el nombre del fichero pid.

pidfile "/var/run/redis/redis_6379.pid"

3. Indicamos el puerto en el que debemos escuchar.

port 6379

4. Indicamos el fichero de log que usará la instancia

logfile "/var/log/redis/redis_6379.log"

5. Incrementamos el número de base de datos a 32 (por ejemplo)

databases 32

6. Indicamos cuál será el fichero de trabajo

dir "/data/redis/6379"

7. Este paso sólo es necesario en la configuración inicial de los slave.

# En redis2.zeent.com y redis3.zeent.com
slaveof redis1.zeent.com 6379

Hay que indicar el nombre del equipo del que seremos slave. En caso de tratarse de la instancia master, evidentemente no hay que indicar nada. Ahora veamos la configuración de Redis-Sentinel.

Redis-Sentinel

Ahora editaremos el fichero /etc/redis/sentinel_26379.conf.

1. Lo primero que debemos indicar es el puerto en el que escucharemos. Por defecto será el mismo que el redis pero sumándole 20000. En nuestro caso 26379.

port 26379

2. Indicamos el directorio de trabajo de la instancia de sentinel.

dir "/data/sentinel/26379"

3. Indicamos también donde almacenaremos los logs de la instancia

logfile "/var/log/sentinel/sentinel_26379.log"

4. Finalmente, debemos indicar qué instancia debemos monitorizar. Para ello lo haremos con los siguientes parámetros.

sentinel monitor client-master 192.168.1.182 6379 2
sentinel down-after- milliseconds client-master 10000
sentinel failover-timeout client-master 30000

El nombre client-master hace referencia al nombre del clúster en cuestión, y sólo debemos indicar el nombre del servidor master (sólo monitorizamos los master). En el caso del ejemplo, el servidor master seria el redis1.zeent.com. Es decir, en principio, todos los sentinel tendrán la misma configuración. Se puede monitorizar más de una instancia, en caso de ser así, añadiremos más bloques de configuración.

El modo de funcionamiento de redis junto con redis-sentinel es el siguiente. Las instancias de redis funcionan en modod master-slave, mientras que el sentinel es el encargado de monitorizar todos los nodos, comprobar el estado de todos ellos, y en caso de caída de algún nodo, reconfigurar los restantes para que no haya pérdida de servicio. Esto implica que si redis-sentinel detecta una caída, tiene que ser capaz de reconfigurar el sistema, y por lo tanto tiene que tener permisos para modificar los ficheros de configuración (por ese motivo modificamos los permisos), y eso hace que sea posible entrar y encontrar al final de cada fichero una sección etiquetada de la siguiente forma:

# Generated by CONFIG REWRITE

Esta sección puede estar tanto en el fichero de configuración de la instancia de redis como de la instancia de redis-sentinel. Es importante no modificarlo e intentar hacer todos los cambios necesarios en el clúster a través del sentinel. Para consultar todas las opciones la página de documentación de redis nos será muy útil. Ahora sólo nos queda dar de alta los servicios en el systemd. Para ello crearemos dos ficheros y dos enlaces simbólicos. Seguiremos los siguientes pasos.

Creación de los ficheros unitd.

1. Primero creamos los ficheros y los enlaces.

$ touch /lib/systemd/system/redis_6379.service
$ ln -s /lib/systemd/system/redis_6379.service /etc/systemd/system/redis_6379.service
$ touch /lib/systemd/system/sentinel_26379.service
$ ln -s /lib/systemd/system/sentinel_26379.service /etc/systemd/system/sentinel_26379.service

2. Copiamos el siguiente contenido en el fichero /lib/systemd/system/redis_6379.service. Hay que tener en cuenta que las referencias a scripts dependen de que se haya seguido el procedo anterior de forma correcta.

[Unit]
Description=Redis Server
After=network.target
[Service]
Type=simple
ExecStart=/usr/bin/redis-server /etc/redis/redis_6379.conf
ExecStop=/bin/kill -15 $MAINPID
PIDFile=/var/run/redis/redis_6379.pid
Restart=always
[Install]
WantedBy=multi-user.target

3. Copiamos el siguiente contenido en el fichero /lib/system/system/sentinel_26379.conf.

[Unit]
Description=Redis Sentinel Server
After=network.target

[Service]
Type=simple
ExecStart=/usr/bin/redis-sentinel /etc/redis/sentinel_26379.conf
ExecStop=/bin/kill -15 $MAINPID
PIDFile=/var/run/redis/sentinel_26379.pid
Restart=always

[Install]
WantedBy=multi-user.target

4. Finalmente habilitamos los servicios y los iniciamos.

$ systemctl daemon-reload
$ systemctl enable redis_6379
$ systemctl enable sentinel_26379
$ service redis_6379 start
$ service sentinel_26379 start

Se deben crear los ficheros en /etc/systemd/system/ y no en otra ruta para evitar problemas con el SELinux.

Y con esto tenemos instalado y funcionando todo el clúster de redis y de redis-sentinel. En la próxima entrada veremos como monitorizar los servicios en todos los servidores con el PRTG, que es el servicio de monitorización que usamos por defecto.

 

 

 

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s