Redis es un gestor de bases de datos nosql clave-valor que por si mismo no funciona en alta disponibilidad. Para conseguir la alta disponibilidad se utiliza sentinel que ya viene con redis desde la versión 2.8. En este artículo indico como conseguir un redis en HA y como usarlo desde python ahorrándote unas horas de aprendizaje. |
|
Si no tienes conocimientos básicos de clustering tendrás que hacer un acto de fe cuando diga ciertas cosas como que necesitamos al menos tres servidores. No voy a explicarlo en este artículo.
Como funciona
Sistemas
Redis se puede configurar en un conjunto de réplica con un primario y múltiples secundarios. El problema es que no tenemos failover, es decir, si se cae el redis primario todo el sistema deja de funcionar.
Para solucionar el problema, en vez de dotar de failover al propio redis, se ha creado otro componente llamado sentinel que monitoriza a los redis y es capaz de reconfigurar el replicaset para volver a otro estado estable y avisar a los clientes en caso de caída de un nodo de la réplica.p>
Salvando las distancias, es como si en mongodb tuviéramos 3 nodos árbitros y tres nodos de datos sin capacidad de votación. 6 procesos en total.
Desarrollo
Cuando te ofrecen un redis con un primario para hacer las escrituras y un secundario para lecturas asíncronas que seguramente pasarás de usar por si tiene datos desfasados, si se cae el primario tu programa dejará de funcionar.
Para solucionar ese problema, en vez de acceder directamente al redis, accederemos a sentinel que nos dirá cual es el nodo primario de redis y una vez tengamos esa información ya podremos acceder al redis primario.
Es solo agregar una línea más de código.
Despliegue
Necesitas tres servidores que llamaremos redis-01, redis-02 y redis-03.
Por si no quieres montarlos te los puedes bajar de los tres enlaces anteriores. Son contenedores lxc comprimidos así que para usarlos instala lxc con un
sudo apt-get install lxclos descomprimes en /var/lib/lxc/ y los arrancas con
sudo lxc-start -n redis-01 -d sudo lxc-start -n redis-02 -d sudo lxc-start -n redis-03 -dPuedes conectarte con root/root a las direcciones 10.0.3.201, 10.0.3.202 y 10.0.3.203.
Replica set
Tras instalar redis, nos aseguramos de que en /etc/redis.conf escuche en todas las interfaces comentando la línea:
bind_ip=127.0.0.1
Elegimos uno de los tres como primario y configuramos el resto como esclavos con un:
redis-cli slaveof 10.0.3.201 6379
Tras hacerlo en los dos esclavos ejecutamos info en el maestro para comprobar que están replicando adecuadamente:
redis-cli info
Sentinel
Viene junto con redis a partir de la versión 2.8 así que ya lo tendrás instalado sin saberlo.
Lo único que hay decirle a los sentinel es la ip y puerto del primario en la replica set. Con eso sacará cuales son los demás nodos del replica set y los demás sentinel que se hayan conectado a ese maestro.
En /etc/redis/redis-sentinel.conf de todos cambia esta línea
sentinel monitor mymaster 127.0.0.1 6379 2Por esta otra
sentinel monitor mymaster 10.0.3.201 6379 2Y ejecutar
redis-sentinel /etc/redis/redis-sentinel.confen los tres servidores.