Cómo administrar réplicas y clientes en Redis en Ubuntu 18.04 LTS

1 mar 2021 6 min di lettura
Cómo administrar réplicas y clientes en Redis en Ubuntu 18.04 LTS
Indice dei contenuti

Introducción

Redis es un almacén de datos de valor-clave en memoria de código abierto. Una de las características más solicitadas es la compatibilidad con la replicación: cualquier servidor Redis puede replicar sus datos en cualquier número de réplicas, lo que permite una alta escalabilidad de lectura y una sólida redundancia de datos. Además, Redis fue diseñado para permitir que muchos clientes (hasta 10,000, de manera predeterminada) se conecten e interactúen con los datos, lo que lo convierte en una buena opción para los casos en los que muchos usuarios necesitan acceder al mismo conjunto de datos.

Este tutorial examina los comandos que se utilizan para administrar los clientes y las réplicas de Redis.

Prerrequisitos

Configuración de un entorno Redis en Ubuntu 18.04:

Gestión de la replicación

Una de las características más distintivas de Redis es su replicación incorporada. Al usar la replicación, Redis crea copias exactas de la instancia principal. Estas instancias secundarias se vuelven a conectar a la primaria cada vez que se pierden conexiones y siempre apuntan a seguir siendo una copia exacta de la primaria.

Si no está seguro de si la instancia de Redis a la que está conectado actualmente es una instancia principal o una réplica, puede verificarlo ejecutando el comando de role

role

Este comando devolverá master (primario) o slave (secundario), o potencialmente, sentinel si usa Redis Sentinel.

Para designar una instancia de Redis como réplica de otra instancia, ejecute el comando replicaof Este comando toma el nombre de host o la dirección IP o el puerto del servidor primario esperado como argumento:

replicaof hostname_o_indirizzo_ip porta

Si el servidor ya era una réplica de otro servidor primario, dejará de replicar el servidor anterior y comenzará inmediatamente a sincronizarse con el nuevo. También descartará el antiguo conjunto de datos.

Para promover una réplica como principal, ejecute el siguiente replicaof

replicaof no one

Esto evitará que la instancia replique el servidor principal, pero no eliminará el conjunto de datos que ya ha replicado. Esta sintaxis es útil en los casos en que falla el primario original. Después de ejecutar replicaof no one en una réplica principal fallida, la réplica anterior se puede utilizar como la nueva principal y tener sus propias réplicas como a prueba de fallos.

Notaslaveof

Gestión de clientes

Un cliente es cualquier máquina o software que se conecta a un servidor para acceder a un servicio. Redis viene con varios comandos que ayudan a rastrear y administrar las conexiones de los clientes.

El client list devuelve un conjunto de información legible por humanos sobre las conexiones de clientes actuales:

client list
"id=18165 addr=[2001:db8:0:0::12]:47460 fd=7 name=jerry age=72756 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=ping
 id=18166 addr=[2001:db8:0:1::12]:47466 fd=8 name= age=72755 idle=5 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=info
 id=19381 addr=[2001:db8:0:2::12]:54910 fd=9 name= age=9 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=26 qbuf-free=32742 obl=0 oll=0 omem=0 events=r cmd=client
 "

Esto es lo que significa cada uno de estos campos:

  • id: un ID de cliente único de 64 bits
  • name: el nombre de la conexión del cliente, según lo definido por un client setname
  • addr: la dirección y el puerto desde el que se conecta el cliente
  • fd: el descriptor de archivo que corresponde al socket en el que se conecta el cliente
  • age: la duración total de la conexión del cliente, en segundos
  • flags: un conjunto de una o más banderas de un solo carácter que proporcionan detalles más detallados del cliente; consulte la documentación del comando de client list
  • db: el número de identificación de la base de datos actual a la que está conectado el cliente (puede ser de 0 a 15 )
  • sub: el número de canales a los que el cliente está suscrito
  • psub: el número de suscripciones que coinciden con el modelo del cliente
  • mutli: el número de comandos que el cliente ha puesto en cola en una transacción (mostrará -1 si el cliente no ha iniciado una transacción o 0 si solo ha iniciado una transacción y no ha puesto en cola ningún comando)
  • qbuf: la longitud del búfer de consultas del cliente, 0 significa que no tiene consultas pendientes
  • qbuf-free: la cantidad de espacio libre en el búfer de consulta del cliente, 0 significa que el búfer de consulta está lleno
  • obl: longitud del búfer de salida del cliente
  • oll: la longitud de la lista de salida del cliente, donde las respuestas se ponen en cola cuando el búfer está lleno
  • omem: la memoria utilizada por el búfer de salida del cliente
  • events descriptor de archivo del cliente, estos pueden ser r "legibles", w "escribibles" o ambos
  • cmd: el último comando ejecutado por el cliente

La configuración de los nombres de los clientes es útil para depurar las pérdidas de conexión en cualquier aplicación que utilice Redis. Cada nueva conexión comienza sin un nombre asignado, pero el nombre de conjunto de client setname se puede usar para crear uno para la conexión de cliente actual. No hay límite en la longitud de los nombres de los clientes, aunque Redis generalmente limita la longitud de las cadenas a 512 MB. Sin embargo, tenga en cuenta que los nombres de los clientes no pueden incluir espacios:

client setname elaine

Para recuperar el nombre de una conexión de cliente, use el comando client getname

client getname
"elaine"

Para recuperar el ID de conexión de un cliente, use el comando de client id

client id
(integer) "19492"

Los ID de cliente de Redis nunca se repiten y son monótonamente incrementales. Esto significa que si un cliente tiene un ID mayor que otro, se ha establecido más tarde.

Bloquear clientes y cerrar conexiones de clientes

Los sistemas de replicación se describen generalmente como síncronos o asincrónicos. En la replicación sincrónica, cada vez que un cliente agrega o modifica datos, debe recibir un tipo de reconocimiento de un cierto número de réplicas para que el cambio se registre como confirmado. Esto ayuda a prevenir conflictos de datos entre nodos, pero tiene un costo de latencia, ya que el cliente tiene que esperar para realizar otra operación hasta que recibe una respuesta de un cierto número de réplicas.

Sin embargo, en la replicación asincrónica, el cliente ve una confirmación de que la operación ha finalizado tan pronto como los datos se escriben en la memoria local. Sin embargo, puede haber un retraso entre esto y cuando las réplicas realmente escriben los datos. Si una de las réplicas falla antes de poder escribir el cambio, esa escritura se perderá para siempre. Por lo tanto, aunque la replicación asincrónica permite a los clientes continuar realizando operaciones sin la latencia causada por la espera de réplicas, puede generar conflictos de datos entre nodos y puede requerir trabajo adicional por parte del administrador de la base de datos para resolver esos conflictos.

Debido a su enfoque en el rendimiento y la baja latencia, Redis implementa la replicación asincrónica de forma predeterminada. Sin embargo, la replicación síncrona se puede simular con el comando wait wait bloquea la conexión del cliente actual durante un período de tiempo específico (en milisegundos) hasta que todos los comandos de escritura anteriores se transfieren con éxito y son aceptados por un número específico de réplicas. Este comando usa la siguiente sintaxis:

wait number_of_replicas number_of_milliseconds

Por ejemplo, si desea bloquear la conexión del cliente hasta que todas las escrituras anteriores sean registradas por al menos 3 réplicas dentro de un tiempo de espera de 30 milisegundos, la wait debería verse así:

wait 3 30

El wait devuelve un número entero que representa el número de réplicas que han reconocido los comandos de escritura, aunque no todas las réplicas lo hacen:

2

Para desbloquear una conexión de cliente que estaba previamente bloqueada, desde los xread wait, brpop o xread, puede ejecutar un client unblock con la siguiente sintaxis:

client unblock client_id

Para suspender temporalmente a todos los clientes conectados actualmente al servidor de Redis, puede utilizar el client pause es útil en los casos en que necesita realizar cambios en la configuración de Redis de forma controlada. Por ejemplo, si está promocionando una de sus réplicas como instancia principal, puede pausar todos los clientes antes para poder promover la réplica y hacer que los clientes se conecten a ella como la nueva principal sin perder ninguna escritura en el proceso.

El client pause solicita que especifique la cantidad de tiempo (en milisegundos) que desea pausar los clientes. El siguiente ejemplo suspenderá a todos los clientes durante un segundo:

client pause 1000

La client kill permite cerrar una sola conexión o un conjunto de conexiones específicas basadas en diferentes filtros. La sintaxis se ve así:

client kill filter_1 value_1... filter_n value_n

Los siguientes filtros están disponibles en las versiones 2.8.12 y posteriores de Redis:

  • addr: cierra una conexión de cliente desde una dirección IP y un puerto especificados
  • client-id: cierra una conexión de cliente en función de su campo de ID único
  • type: cierra cualquier cliente de un tipo determinado, que puede ser normal, master, slave o pubsub
  • skipme: las opciones de valor para este filtro son yes y no: si no especifica no, el cliente que llama al client kill del cliente no será ignorado y terminará si se aplican otros filtros. Si yes especifica sí, el cliente que ejecuta el comando será ignorado y el comando kill no tendrá ningún efecto en el cliente. skipme siempre es yes por defecto

Conclusión

Esta guía detalla un conjunto de comandos que se utilizan para administrar clientes y réplicas de Redis. Si hay otros comandos, temas o procedimientos relacionados que le gustaría que se describieran en esta guía, pregunte o haga sugerencias en los comentarios a continuación.

Support us with a

Successivamente, completa il checkout per l'accesso completo a Noviello.it.
Bentornato! Accesso eseguito correttamente.
Ti sei abbonato con successo a Noviello.it.
Successo! Il tuo account è completamente attivato, ora hai accesso a tutti i contenuti.
Operazione riuscita. Le tue informazioni di fatturazione sono state aggiornate.
La tua fatturazione non è stata aggiornata.