Principios de tres modos de clúster de redis

Uno, sincronización / replicación maestro-esclavo
Inserte la descripción de la imagen aquí

A través de la función de persistencia, Redis garantiza que los datos no se perderán (o una pequeña cantidad de pérdida) incluso cuando se reinicia el servidor, porque la persistencia guardará los datos en la memoria en el disco duro y el reinicio cargará los datos del disco duro. Pero debido a que los datos se almacenan en un servidor, si este servidor tiene problemas, como una falla en el disco duro, también causará la pérdida de datos.

Para evitar un solo punto de falla, la práctica habitual es replicar múltiples copias de la base de datos para implementarlas en diferentes servidores, de modo que incluso si un servidor falla, otros servidores pueden continuar brindando servicios. Con este fin, Redis proporciona una función de replicación, que puede sincronizar automáticamente los datos actualizados con otras bases de datos cuando se actualizan los datos de una base de datos.

En el concepto de replicación, las bases de datos se dividen en dos categorías, una es la base de datos maestra (maestra) y la otra es la base de datos esclava (esclava). La base de datos maestra puede realizar operaciones de lectura y escritura, y cuando la operación de escritura causa cambios en los datos, sincronizará automáticamente los datos con la base de datos esclava. La base de datos esclava es generalmente de solo lectura y acepta datos sincronizados desde la base de datos maestra. Una base de datos maestra puede tener varias bases de datos esclavas y una base de datos esclava solo puede tener una base de datos maestra.

Características de replicación maestro-esclavo

* La base de datos maestra puede realizar operaciones de lectura y escritura. Cuando los datos cambian debido a operaciones de lectura y escritura, los datos se sincronizarán automáticamente con la base de datos esclava 

. Las bases de datos esclavas son generalmente de solo lectura y reciben datos sincronizados desde la base de datos maestra. 

* Un maestro puede tener múltiples esclavos, pero un esclavo solo puede corresponder a un maestro 

* El esclavo se cuelga no afecta la lectura y escritura de otros esclavos y la lectura y escritura del maestro. Después de reiniciar, los datos se sincronizarán desde el maestro. 

* Después el maestro se cuelga, no afectará la lectura del esclavo, pero Redis ya no proporciona servicios de escritura. Una vez que el maestro se reinicia, redis proporcionará servicios de escritura externos nuevamente 

. Después de que el maestro cuelgue, no volverá a seleccionar un maestro de el nodo esclavo.

ventaja:

Admite la replicación maestro-esclavo, el maestro sincronizará automáticamente los datos con el esclavo, que puede separar lectura y escritura;
para descargar la presión de operación de lectura del maestro, el servidor esclavo puede proporcionar al cliente servicios de operación de solo lectura, y el servicio de escritura aún debe ser proporcionado por el maestro Completo; el
esclavo también puede aceptar conexiones y solicitudes de sincronización de otros esclavos, lo que puede descargar de manera efectiva la presión de sincronización del
maestro ; el servidor maestro brinda servicios para los esclavos sin bloqueo. Por lo tanto, durante el período de sincronización maestro-esclavo, el cliente aún puede enviar consultas o solicitudes de modificación; el
servidor esclavo también completa la sincronización de datos sin bloqueo. Durante la sincronización, si un cliente envía una solicitud de consulta, Redis devolverá los datos antes de la sincronización;

Desventajas:

Redis no tiene funciones automáticas de recuperación y tolerancia a fallas. El tiempo de inactividad del host y el esclavo provocará que fallen algunas de las solicitudes de lectura y escritura del front-end. Debe esperar a que la máquina se reinicie o cambiar manualmente la IP del front-end. para recuperarse; el
host está inactivo y algunos datos no son oportunos antes del tiempo de inactividad Sincronice con el esclavo, y el problema de la inconsistencia de los datos se introducirá después del cambio de IP, lo que reduce la disponibilidad del sistema;
si se desconectan varios esclavos y debe reiniciarse, intente no reiniciar en el mismo período de tiempo. Porque mientras se inicie el esclavo, enviará una solicitud de sincronización y el host estará completamente sincronizado.Cuando se reinician varios esclavos, puede hacer que el IO maestro aumente drásticamente y cause tiempo de inactividad.
Redis es más difícil de admitir la expansión en línea, y la expansión en línea se volverá muy complicada cuando la capacidad del clúster alcance el límite superior; en
segundo lugar, el modo centinela
 

En el primer modo de sincronización / replicación maestro-esclavo, cuando el servidor maestro deja de funcionar, un servidor esclavo debe cambiarse manualmente al servidor maestro. Esto requiere una intervención manual, laboriosa y laboriosa, y hará que el servicio no esté disponible por un tiempo. período de tiempo. Esta no es una forma recomendada. Más a menudo, damos prioridad al modo centinela.

El modo centinela es un modo especial. En primer lugar, Redis proporciona el comando del centinela. El centinela es un proceso independiente. Como proceso, se ejecutará de forma independiente. El principio es que el centinela puede monitorear múltiples instancias de Redis en ejecución enviando comandos y esperando la respuesta del servidor de Redis.
Inserte la descripción de la imagen aquí

El papel del modo centinela:

Envíe un comando para permitir que el servidor Redis vuelva a monitorear su estado de ejecución, incluidos el servidor maestro y el servidor esclavo;
cuando el centinela detecta que el maestro está inactivo, cambiará automáticamente el esclavo al maestro y luego notificará a otros servidores esclavos a través del modo publicar y suscribirse, y modificar el archivo de configuración, dejar que cambien de host,
sin embargo, un proceso centinela para monitorear el servidor Redis también puede tener problemas, por esta razón podemos usar múltiples centinelas para monitorear. También se llevará a cabo un seguimiento entre cada centinela, formando así un modo multi-centinela.

El proceso de conmutación por error:

Suponiendo que el servidor principal está inactivo, Sentinel 1 detecta este resultado primero y el sistema no realizará de inmediato el proceso de conmutación por error. Es solo que Sentinel 1 cree subjetivamente que el servidor principal no está disponible y este fenómeno se vuelve subjetivo fuera de línea. Cuando los siguientes centinelas también detectan que el servidor principal no está disponible y el número alcanza un cierto valor, se llevará a cabo una votación entre los centinelas, y un centinela iniciará el resultado de la votación para realizar una operación de conmutación por error. Una vez que el cambio es exitoso, cada centinela utilizará el modo de publicación-suscripción para cambiar el host del servidor esclavo que supervisa.Este proceso se denomina fuera de línea objetivo. De esta forma, todo es transparente para el cliente.

Cómo funciona el modo centinela:

Cada proceso de Sentinel envía un comando PING al servidor maestro maestro, servidor esclavo y otros procesos de Sentinel en todo el clúster con una frecuencia de una vez por segundo.
Si una instancia es mayor que el valor especificado por la opción down-after-milliseconds de la última respuesta válida al comando PING, la instancia será marcada como subjetiva abajo (SDOWN) por el proceso de Sentinel
si un servidor maestro está marcado como subjetivo fuera de línea (SDOWN), todos los procesos de Sentinel que están monitoreando este servidor maestro maestro deben confirmar con una frecuencia de una vez por segundo que el servidor maestro maestro ha entrado efectivamente en el estado fuera de línea subjetivo.
Cuando hay un número suficiente de Sentinel (centinela) El proceso (mayor o igual al valor especificado en el archivo de configuración) confirma que el servidor maestro maestro ha entrado en el estado subjetivo fuera de línea (SDOWN) dentro del rango de tiempo especificado, luego el servidor maestro maestro se marcará como fuera de línea objetivo (ODOWN) .
en general, cada proceso Sentinel enviará los comandos INFO a todos los servidores maestro y esclavo en el clúster a una frecuencia de una vez cada 10 segundos.
Cuando el servidor maestro maestro está marcado como objetivamente fuera de línea (ODOWN) por el proceso de Sentinel, la frecuencia de envío de comandos INFO desde todos los servidores esclavos del servidor maestro maestro que el proceso de Sentinel se desconecta cambiará de una vez cada 10 segundos a cada segundo.
Si no hay suficientes procesos Sentinel para aceptar la desconexión del servidor maestro maestro, se eliminará el estado objetivo fuera de línea del servidor maestro maestro. Si el servidor maestro maestro envía un comando PING al proceso de Sentinel nuevamente y devuelve una respuesta válida, se eliminará el estado subjetivo fuera de línea del servidor maestro maestro.

ventaja:

El modo centinela se basa en el modo maestro-esclavo, todas las ventajas del modo maestro-esclavo tiene el modo centinela.
El maestro y el esclavo pueden cambiar automáticamente, el sistema es más robusto y la usabilidad es mayor.

Desventajas:

Redis es difícil de admitir la expansión en línea, y la expansión en línea se volverá muy complicada cuando la capacidad del clúster alcance el límite superior.

Fenómeno del cerebro dividido:

¿Qué es el cerebro dividido?

El llamado problema del cerebro dividido (similar a la esquizofrenia) es que diferentes nodos en el mismo grupo tienen una comprensión diferente del estado del grupo.

¿Por qué el cerebro dividido de Redis es causado por el modo centinela?

Por ejemplo (1 maestro, 1 esclavo, 2 centinelas), debido a razones de red o algunas razones especiales, el centinela pierde su conocimiento del dispositivo del nodo maestro y realizará una conmutación por error a través de elecciones para promover el nodo esclavo al nodo maestro, lo que conduce Hay dos maestros en el grupo actual, que es una manifestación del fenómeno del cerebro dividido. Diferentes clientes están vinculados a diferentes redis para lectura y escritura, entonces los datos de redis en las dos máquinas serán inconsistentes. Cuando el centinela restaura su percepción del antiguo nodo maestro, será degradado a un nodo esclavo y luego sincronizará los datos del nuevo maestro (resincronización completa), lo que resultará en la pérdida de datos escritos por el antiguo maestro durante el cerebro dividido. período.

solución

Redis.conf modifica los atributos para limitar la operación de escritura del nodo maestro a través del número de nodos esclavos activos y el tiempo de retardo de sincronización de datos.

# master Al menos x réplicas están conectadas.

min-esclavos-para-escribir x

# El retraso de la replicación y sincronización de datos no puede exceder los x segundos.

min-esclavos-max-lag x

Efecto barril

 

3.
El modo centinela de Cluster cluster Redis básicamente puede lograr una alta disponibilidad y separación de lectura y escritura, pero en este modo, cada servidor Redis almacena los mismos datos, lo cual es una pérdida de memoria, por lo que el modo Cluster cluster se agrega a redis3. 0, se da cuenta del almacenamiento distribuido de Redis, lo que significa que se almacena contenido diferente en cada nodo de Redis.
Inserte la descripción de la imagen aquí

Configuración de clúster

De acuerdo con la recomendación oficial, una implementación de clúster requiere al menos 3 nodos maestros, y es mejor usar un modelo de seis nodos con 3 maestros, 3 esclavos. En el entorno de prueba, solo se pueden abrir 6 instancias de servicio en una máquina para simular.

Características del cluster

Todos los nodos de redis están interconectados entre sí (mecanismo PING-PONG) y el protocolo binario se utiliza internamente para optimizar la velocidad de transmisión y el ancho de banda.

La falla de un nodo tiene efecto solo cuando más de la mitad de los nodos del clúster detectan la falla.

El cliente está conectado directamente al nodo de Redis y no requiere una capa de proxy intermedia. El cliente no necesita conectarse a todos los nodos en el clúster, simplemente conectarse a cualquier nodo disponible en el clúster.

Todos los nodos son un maestro y un esclavo (o un maestro y varios esclavos), que nunca brindan servicios, solo sirven como respaldo

Admite la adición y eliminación de nodos en línea

El cliente puede conectarse a cualquier nodo maestro para leer y escribir.

Cómo funciona el clúster

En cada nodo de Redis, hay dos cosas, una es una ranura y su rango de valores es 0--16383. También existe el clúster, que puede entenderse como un complemento de administración de clúster. Cuando llegue nuestra clave de acceso, Redis obtendrá un resultado de acuerdo con el algoritmo de crc16, y luego calculará el resto del resultado a 16384, de modo que cada clave corresponderá a una ranura de hash numerada entre 0-16383, y pasará este valor se utiliza para encontrar el nodo correspondiente a la ranura correspondiente, y luego saltar automáticamente al nodo correspondiente para las operaciones de acceso.
 

El clúster de Redis usa fragmentación de datos en lugar de hash de coherencia para lograr: un clúster de Redis contiene 16384 ranuras de hash y cada clave de la base de datos pertenece a estas 16384 ranuras de hash. Una de ellas, el clúster usa la fórmula CRC16 (clave)% 16384 para calcular cuál ranura a la que pertenece la clave, y la declaración CRC16 (clave) se utiliza para calcular la suma de comprobación CRC16 de la clave.

Cada nodo del clúster es responsable de procesar parte de la ranura hash. Por ejemplo, un clúster puede tener tres ranuras hash, de las cuales:

El nodo A es responsable de procesar las ranuras hash de 0 a 5500.
El nodo B es responsable de procesar las ranuras hash 5501 a 11000.
El nodo C es responsable de procesar las ranuras hash 11001 a 16384.
Este método de distribuir ranuras hash a diferentes nodos facilita a los usuarios agregar o eliminar nodos del clúster.
 

Para garantizar una alta disponibilidad, el clúster redis-cluster introduce un modo maestro-esclavo. Un nodo maestro corresponde a uno o más nodos esclavos. Cuando el nodo maestro cae, los nodos esclavos se habilitan. Cuando otros nodos maestros hacen ping a un nodo maestro A, si más de la mitad de los nodos maestros se comunican con A en horas extras, entonces se considera que el nodo maestro A está inactivo. Si el nodo maestro A y su nodo esclavo A1 están inactivos, el clúster ya no puede proporcionar servicios.
 

La diferencia entre centinela y enjambre

centinela

El rol del centinela es monitorear el estado de funcionamiento del sistema Redis. Sus funciones incluyen las dos siguientes.
Supervise si la base de datos principal y la secundaria funcionan con normalidad.
Cuando falla la base de datos primaria, la base de datos secundaria se convierte automáticamente en la base de datos primaria.
Cuando el centinela descubre que el maestro está caído, volverá a elegir a un maestro de entre los esclavos.
El modo centinela enfatiza que el
sistema Sentinel de alta disponibilidad se usa para administrar múltiples servidores Redis (instancia) El sistema realiza las siguientes tres tareas:
Monitoreo: Sentinel verificará constantemente si su servidor maestro y esclavo están funcionando normalmente.
Notificación: cuando hay un problema con un servidor Redis monitoreado, Sentinel puede enviar notificaciones a los administradores u otras aplicaciones a través de la API.
Conmutación por error automática: cuando un servidor maestro no funciona normalmente, Sentinel iniciará una operación de conmutación por error automática. Actualizará uno de los servidores esclavos del servidor maestro fallido a un nuevo servidor maestro y dejará que el servidor maestro falle. Se cambian otros servidores esclavos para replicar el nuevo servidor maestro; cuando el cliente intenta conectarse al servidor maestro fallado, el clúster también devolverá la dirección del nuevo servidor maestro al cliente, de modo que el clúster pueda usar el nuevo servidor maestro para reemplazar el servidor fallado .
El cliente no registra la dirección de redis (una determinada IP), sino la dirección de centinela, para que podamos obtener la dirección de redis directamente de centinela, porque centinela monitoriza a todos los amos y esclavos, y sabe quién es exactamente el real. maestro. Por ejemplo, fallamos. En este momento, para el centinela, el maestro ha cambiado, y luego se notifica al cliente. El cliente no necesita preocuparse por quién es el verdadero maestro en absoluto, solo el maestro informado por el centinela.

Grupo
Incluso si se utilizan centinelas, cada instancia de redis se almacena en su totalidad, y el contenido almacenado en cada redis son datos completos, lo que desperdicia memoria y tiene un efecto de barril. Para maximizar el uso de la memoria, se pueden utilizar clústeres, que es almacenamiento distribuido. Es decir, cada redis almacena contenido diferente, un total de 16384 ranuras. A cada redis se le asignan algunas ranuras, hash_slot = crc16 (clave) mod 16384 para encontrar la ranura correspondiente, la clave es la clave disponible, si hay {}, tome {} como la clave disponible, de lo contrario, la clave completa es la disponible El
clúster de claves requiere al menos 3 maestros 3 esclavos, y cada instancia utiliza un archivo de configuración diferente, no es necesario configurar el maestro y el esclavo, el clúster elegirá por sí mismo.
El clúster debe resolver el problema de la capacidad limitada de un solo Redis, y los datos se distribuyen a varias máquinas de acuerdo con ciertas reglas.
El modo de clúster aumenta la cantidad de simultaneidad.

Supongo que te gusta

Origin blog.csdn.net/wr_java/article/details/115323583
Recomendado
Clasificación