sql >> Base de Datos >  >> NoSQL >> Redis

centinela redis

Redis Sentinel es la recomendación oficial para ejecutar una configuración de Redis de alta disponibilidad mediante la ejecución de una serie de procesos adicionales de redis sentinel para monitorear activamente las instancias maestras y esclavas de redis existentes, asegurándose de que funcionen como se espera. Si por consenso se determina que el maestro ya no está disponible, se conmutará por error automáticamente y promoverá a uno de los esclavos replicados como el nuevo maestro. Los centinelas también mantienen una lista autorizada de instancias redis disponibles que brindan a los clientes un repositorio central para descubrir las instancias disponibles a las que pueden conectarse.

La compatibilidad con Redis Sentinel está disponible con RedisSentinel class que escucha los Sentinels disponibles para obtener su lista de instancias redis maestras, esclavas y otras instancias sentinel disponibles que utiliza para configurar y mantener los administradores de clientes de Redis, iniciando cualquier conmutación por error a medida que se informa.

Número de uso

Para usar la nueva compatibilidad con Sentinel, en lugar de completar los administradores de clientes de Redis con la cadena de conexión de las instancias maestra y esclava, debe crear un solo RedisSentinel instancia configurada con la cadena de conexión de Redis Sentinels en ejecución:

var sentinelHosts = new[]{ "sentinel1", "sentinel2:6390", "sentinel3" };
var sentinel = new RedisSentinel(sentinelHosts, masterName: "mymaster");

Esto muestra un ejemplo típico de configuración de un RedisSentinel que hace referencia a 3 hosts centinela (es decir, el número mínimo para una configuración de alta disponibilidad que puede sobrevivir a cualquier falla de nodo). También está configurado para mirar el mymaster conjunto de configuración (el grupo maestro predeterminado).

INFORMACIÓN

Redis Sentinels puede monitorear más de 1 grupo maestro/esclavo, cada uno con un nombre de grupo maestro diferente.

El puerto predeterminado para centinelas es 26379 (cuando no se especifica) y como RedisSentinel puede detectar automáticamente otros centinelas, la configuración mínima requerida es solo:

var sentinel = new RedisSentinel("sentinel1");

INFORMACIÓN

El escaneo y la detección automática de otros Sentinels se pueden desactivar con ScanForOtherSentinels=false

Comenzar a monitorear Centinelas #

Una vez configurado, puede comenzar a monitorear los servidores Redis Sentinel y acceder al administrador de clientes preconfigurado con:

IRedisClientsManager redisManager = sentinel.Start();

Que como antes, puede registrarse en su IOC preferido como singleton instancia:

container.Register<IRedisClientsManager>(c => sentinel.Start());

Configuración avanzada de Sentinel #

RedisSentinel administra de manera predeterminada un PooledRedisClientManager configurado instancia que resuelve ambos clientes maestros de Redis para lectura/escritura GetClient() y esclavos para solo lectura GetReadOnlyClient() API.

Esto se puede cambiar para usar el nuevo RedisManagerPool con:

sentinel.RedisManagerFactory = (master,slaves) => new RedisManagerPool(master);

Cadena de conexión Redis personalizada n.º

El host con el que está configurado RedisSentinel solo se aplica a ese host de Sentinel; aún puede usar la flexibilidad de Redis Connection Strings para configurar los clientes de Redis individuales especificando un HostFilter personalizado :

sentinel.HostFilter = host => "{0}?db=1&RetryTimeout=5000".Fmt(host);

Esto devolverá a los clientes configurados para usar la base de datos 1 y un tiempo de espera de reintento de 5 segundos (usado en la nueva función de reintento automático).

Otra configuración de RedisSentinel #

Si bien lo anterior cubre la configuración popular de Sentinel que normalmente se usaría, casi todos los aspectos de RedisSentinel el comportamiento es personalizable con la siguiente configuración:

OnSentinelMessageRecibido Se activa cuando el trabajador de Sentinel recibe un mensaje de la suscripción de Sentinel
Conmutación por error Se activa cuando Sentinel conmuta por error el Administrador de clientes de Redis a un nuevo maestro
OnWorkerError Se activa cuando falla la conexión de Redis Sentinel Worker
Mapa de direcciones IP Asignar las IP internas del host redis devueltas por Sentinels a su IP externa
BuscarOtrosCentinelas Si buscar de forma rutinaria otros hosts Sentinel (verdadero predeterminado)
RefreshSentinelHostsAfter Qué intervalo buscar otros hosts centinela (predeterminado 10 minutos)
Esperar entre hosts fallidos Cuánto tiempo esperar después de fallar antes de conectarse a la siguiente instancia de redis (predeterminado 250 ms)
Espera máxima entre hosts fallidos Cuánto tiempo para volver a intentar conectarse a los hosts antes de lanzar (predeterminado 60 s)
Esperar antes de forzar la conmutación por error del maestro Cuánto tiempo después de los intentos fallidos consecutivos de forzar la conmutación por error (predeterminado 60 s)
ResetWhenSubjectivelyDown Restablecer clientes cuando Sentinel informa que redis está subjetivamente inactivo (verdadero predeterminado)
ResetWhenObjectivelyDown Restablecer clientes cuando Sentinel informa que redis está objetivamente inactivo (valor predeterminado verdadero)
SentinelWorkerConnectTimeoutMs El tiempo máximo de conexión para Sentinel Worker (predeterminado 100ms)
SentinelWorkerSendTimeoutMs Tiempo máximo de envío de socket TCP para Sentinel Worker (predeterminado 100ms)
SentinelWorkerReceiveTimeoutMs Tiempo máximo de recepción de socket TCP para Sentinel Worker (predeterminado 100ms)

Configurar servidores Redis Sentinel #

El proyecto de configuración de redis simplifica la configuración y ejecución de una configuración de Redis Sentinel de múltiples nodos de alta disponibilidad que incluye secuencias de comandos de inicio/detención para configurar instantáneamente la configuración mínima de Redis Sentinel de alta disponibilidad en uno (o varios) servidores Windows, OSX o Linux. Esta configuración de servidor único/multiproceso es ideal para establecer una configuración de centinela funcional en una estación de trabajo de un solo desarrollador o en un servidor remoto.

El repositorio redis-config también incluye los binarios redis de MS OpenTech Windows y no requiere la instalación de ningún software.

Número de uso de Windows

Para ejecutar la configuración de Sentinel incluida, clone el repositorio redis-config en el servidor en el que desea ejecutarlo:

git clone https://github.com/ServiceStack/redis-config.git

A continuación, inicie 1 servidor maestro, 2 esclavos y 3 servidores Redis Sentinel con:

cd redis-config\sentinel3\windows
start-all.cmd

Cerrar instancias iniciadas:

stop-all.cmd

Si está ejecutando los procesos de redis localmente en su estación de trabajo de desarrollo, la configuración mínima para conectarse a las instancias en ejecución es solo:

var sentinel = new RedisSentinel("127.0.0.1:26380");
container.Register(c => sentinel.Start());

Host local frente a IP de red #

La configuración de Sentinel asume que todas las instancias de Redis se ejecutan localmente en 127.0.0.1 . Si, en cambio, lo está ejecutando en un servidor remoto al que desea que todos los desarrolladores de su red puedan acceder, deberá cambiar la dirección IP en *.conf archivos para usar los servidores IP de red. De lo contrario, puede dejar los valores predeterminados y usar RedisSentinel Función de asignación de direcciones IP para asignar de forma transparente las direcciones IP del servidor local a la dirección IP de la red a la que se puede conectar cada PC de su red.

P.ej. si esto se ejecuta en un servidor remoto con un 10.0.0.9 IP de red, se puede configurar con:

var sentinel = new RedisSentinel("10.0.0.9:26380") {
    IpAddressMap = {
        {"127.0.0.1", "10.0.0.9"},
    }
};
container.Register(c => sentinel.Start());

Google Cloud:haga clic para implementar Redis #

El servicio en la nube más fácil que hemos encontrado que puede configurar instantáneamente una configuración de Redis Sentinel de varios nodos es usar la función de hacer clic para implementar Redis de Google Cloud disponible en Google Cloud Console en Implementar y administrar :

Al hacer clic en Implementar le permitirá configurar el tipo, el tamaño y la ubicación donde desea implementar las VM de Redis. Consulte la guía completa Haga clic para implementar Redis para obtener un recorrido sobre cómo configurar e inspeccionar una configuración de redis de alta disponibilidad en Google Cloud.

Cambiar para usar RedisManagerPool #

De forma predeterminada, RedisSentinel usa un PooledRedisClientManager , esto se puede cambiar para usar el nuevo RedisManagerPool con:

sentinel.RedisManagerFactory = (master,replicas) => new RedisManagerPool(master);

Comenzar a monitorear Centinelas #

Una vez configurado, puede comenzar a monitorear los servidores Redis Sentinel y acceder al administrador de clientes preconfigurado con:

IRedisClientsManager redisManager = sentinel.Start();

Que como antes, puede registrarse en su IOC preferido como singleton instancia:

container.Register<IRedisClientsManager>(c => sentinel.Start());

Configurar servidores Redis Sentinel #

Consulte el proyecto de configuración de redis para obtener una forma rápida de configurar la configuración mínima de Redis Sentinel de alta disponibilidad, incluidos los scripts de inicio/detención para ejecutar instantáneamente varias instancias de redis en uno (o varios) servidores Windows, OSX o Linux.

Número de estadísticas de Redis

Puede usar RedisStats clase para visibilidad e introspección en sus instancias en ejecución. El wiki Redis Stats enumera las estadísticas disponibles.

Reintentos automáticos #

Para mejorar la resiliencia de las conexiones de los clientes, RedisClient volverá a intentar de forma transparente las operaciones fallidas de Redis debido a excepciones de E/S y socket en un retroceso exponencial a partir de 10 ms hasta el RetryTimeout de 10000ms . Estos valores predeterminados se pueden modificar con:

RedisConfig.DefaultRetryTimeout = 10000;
RedisConfig.BackOffMultiplier = 10;