Redis
Reincorporar nodos a cluster
Para añadir manualmente nodos que se desconectaron del cluster y no pudieron reincorporarse, se deben seguir los siguientes pasos:
-
Ver el listado de nodos en un nodo que sí esté conectado al cluster.
-
Verificar que los nodos que no pueden reincorporarse están marcados como
disconnectedyfailed. -
Anotar los
node_idymaster_idde los nodos que no pueden reincorporarse. -
Ejecutar
CLUSTER FORGET {{ node_id }}, dondenode_ides el id de un nodo que no puede reincorporarse al cluster. Este comando debe ejecutarse por cada nodo que no puede reincorporarse, utilizando elnode_idcorrespondiente. -
Ingresar a los servidores donde se encuentran los nodos desconectados e identificar los nombres de sus contenedores docker (
redis-masteroredis-replica). -
Detener y eliminar
redis-masteroredis-replica, según corresponda, con los comandosdocker stop {{ container_name }}ydocker rm {{ container_name }}. -
Ejecutar
sudo rm -rf /opt/viridian/redis/storage-master/*osudo rm -rf /opt/viridian/redis/storage-replica/*, según corresponda. -
Ejecutar:
cd /opt/viridian/redis/ -
Ejecutar:
docker compose up -d -
Ingresar a un servidor con instancias de redis conectadas al cluster.
-
Ejecutar
docker exec -it redis-master sh. -
Ejecutar:
redis-cli -u redis://cluster:{{ clusterPassword }}@127.0.0.1:6389 --tls --cert /opt/viridian/tls/cert.pem --key /opt/viridian/tls/key.pem --cacert /opt/viridian/tls/cert.pem --cluster add-node {{ server_hostname }}:6389 127.0.0.1:6389info- clusterPassword: Este valor puede encontrarse en el archivo
defaults/local_vars.yml. - server_hostname: Hostname del servidor cuyos nodos queremos reincorporar al cluster.
- clusterPassword: Este valor puede encontrarse en el archivo
-
Ejecutar
CLUSTER MEET {{ server_ip }} {{ instance_port }}info- server_ip: IP del servidor cuyos nodos queremos reincorporar al cluster.
- instance_port: Puerto del nodo que queremos reincorporar al cluster: 6389 si el nombre de su contenedor es
redis-master, 6369 si el nombre de su contenedor esredis-replica.
-
Conectarse a cada nodo que se quiere reincorporar al cluster con el usuario
admin. -
Ejecutar
CLUSTER REPLICATE {{ master_id }}info- master_id: El
master_idobtenido del listado de nodos en el paso 3.
- master_id: El
Ver listado de nodos
Para poder obtener información acerca de los nodos que componen el cluster como ser conectividad o qué replica corresponde a qué master, se deben seguir los siguientes pasos:
-
Conectarse a una instancia de Redis con el usuario
admin. -
Ejecutar:
CLUSTER NODESinfoEste comando nos muestra información acerca de los nodos que componen el cluster.
-
El listado tendrá filas que se verán similares al ejemplo a continuación:
{{ node_id }} {{ server_ip }}:6369@16369,{{ server_hostname }} {{ myself }} slave {{ master_id }} {{ ping }} {{ pong }} {{ epoch }} {{ status }}
{{ node_id }} {{ server_ip }}:6389@16389,{{ server_hostname }} {{ myself }} master {{ master_status }} - {{ ping }} {{ pong }} {{ epoch }} {{ status }} {{ hash_slots_range }}info- node_id: En la primera columna vemos el id del nodo
- server_ip: En la segunda columna vemos la ip del servidor en que se encuentra el nodo
- server_hostname: En la segunda columna, después de una coma, vemos el hostname del servidor en que se encuentra el nodo.
- myself: La presencia de esta palabra nos indica que la información de esa fila corresponde al nodo al que nos hemos conectado
- slave o master: Nos indica si el nodo es una réplica (slave) o un master.
- master_id: Los nodos réplica nos indican el
node_iddel nodo master al que corresponden. - ping: Unix Timestamp en el que se envió el último ping que todavía no recibió respuesta o 0, si no hay pings pendientes.
- pong: Unix Timestamp en el que se recibió un pong por última vez.
- epoch: Versión del nodo actual, si el nodo es master; o versión actual del master, si es replica.
- master_status: Los nodos master, cuando dejan de estar operativos, presentan el valor
failed. De lo contrario no mostrarán ningún valor. - status: Puede mostrar los valores
connectedodisconnected. Nos indica si el nodo está conectado al cluster o no. - hash_slots_range: Rango de slots que le corresponden al nodo. Este valor solamente aparece para nodos master.
Forzar réplica a convertirse en master
En caso de que el cluster de Redis no se encuentre operativo, se debe revisar el listado de nodos. Si la mayoría de los nodos master se encuentran conectados y el cluster no está operativo, revisar qué nodos master están caídos. Teniendo los node_id de los masters, revisar en la misma lista el estado de las réplicas de estos nodos máster. Si las réplicas están conectadas y siguen listadas como slave, la caída del cluster se debe a que estas réplicas no están tomando el lugar de sus respectivos masters. A continuación, se deben seguir los siguientes pasos para cada una de las réplicas que tomará el lugar de su master:
-
Identificar cuál es la replica que corresponde al master no operativo en el listado de nodos y tomar nota del servidor en que se encuentra.
-
Conectarse al servidor en que se encuentra la instancia de Redis replica que queremos convertir en master.
-
Conectarse a la instancia de Redis replica que queremos convertir en master con el usuario
admin. -
Ejecutar:
CLUSTER FAILOVER FORCEinfoEste comando obliga al nodo replica a tomar el lugar de su master.
Caída de master y su replica
Si al revisar el listado de nodos verificamos que tanto un nodo máster como su réplica han caído, debe levantarse alguno de ellos para que redis clúster vuelva a estar operativo. Hasta que uno de los dos esté disponible, el clúster no podrá estar operativo.
Conectarse a nodo de Redis por medio de la terminal
Para poder conectarse a un nodo de redis y poder ejecutar comandos dentro de él se deben seguir los siguientes pasos:
-
Ejecutar en algún servidor con un nodo operativo:
docker exec -it redis-{{ node_type }} shinfoEste comando nos conecta con la terminal de la instancia de docker especificada.
- node_type: es el tipo del nodo, puede ser replica o master.
-
Ejecutar:
redis-cli -u redis://{{ user_name }}:{{ user_password }}@127.0.0.1:{{ node_port }} --tls --cert /opt/viridian/tls/cert.pem --key /opt/viridian/tls/key.pem --cacert /opt/viridian/tls/cert.peminfoEste comando nos conecta con la base de datos Redis dentro del contenedor.
- node_port: 6369 para acceder a
redis-replica, 6389 para acceder aredis-master - user_name: Los usuarios existentes pueden visualizarse en
defaults/local_vars.yml. Ej:insightPassword, dondeinsightes el nombre del usuario. - user_password: Este valor puede encontrarse en el archivo
defaults/local_vars.yml. Ej:insightPassword, donde el valor deinsightPasswordes la contraseña del usuarioinsight.
- node_port: 6369 para acceder a