Mecanismo Redis Sentinel: garantía de alta disponibilidad
Tiene principalmente las siguientes funciones
Imagínese, si Sentinel, que se utiliza para garantizar la alta disponibilidad del clúster de Redis, fuera una máquina independiente y luego Sentinel se bloqueara. arriba, redis también cuelga. ¿Qué demonios? Por lo tanto, los centinelas también se reúnen en grupos y todas las acciones deben decidirse mediante votación.
(1) Durante la conmutación por error, juzgar que un nodo maestro está inactivo requiere el consentimiento de la mayoría de los centinelas, lo que implica la cuestión de la elección distribuida.
(2) Incluso si algunos ganglios linfáticos centinela cuelgan, el plexo centinela aún puede funcionar normalmente.
(1) Sentinel requiere al menos 3 instancias para garantizar su solidez.
(2) La arquitectura de implementación maestro-esclavo de Sentinel + redis no garantiza ninguna pérdida de datos, solo garantiza la alta disponibilidad del clúster de redis.
Implementamos centinelas en varias máquinas y necesitan colaborar para completar una tarea, formando así un "sistema distribuido".
En el campo de los sistemas distribuidos, el número de nodos de un problema que alcanzan un * * * algoritmo de conocimiento se denomina * * * algoritmo de conocimiento.
En este escenario, varios centinelas negocian entre sí para seleccionar un líder reconocido por todos. Esto se hace mediante el uso de * * * algoritmos de conocimiento.
Este algoritmo también estipula que el número de nodos debe ser un número impar, lo que puede garantizar que incluso si un nodo falla, más de la mitad de los nodos del sistema todavía estén en un estado normal y aún puedan proporcionar resultados correctos. Es decir, este algoritmo también es compatible con el caso de nodos fallidos.
Existen muchos * * * algoritmos de conocimiento en el campo de los sistemas distribuidos, como Paxos, Raft y el escenario de la elección del líder centinela. Se utiliza el algoritmo de conocimiento Raft *** porque es bastante simple y fácil de implementar.
Hay dos estados de falla: Sdown y odown.
Las condiciones para el sdown son muy sencillas. Si Sentry hace ping al servidor maestro durante más de la cantidad de milisegundos especificada por is-master-down-after-millisegundos (configurable en el archivo de configuración de Sentry), se considera subjetivamente que el servidor maestro está inactivo.
Las condiciones para la conversión de sdown a odown son muy sencillas. Si un centinela recibe un número específico de otros centinelas del quórum dentro de un tiempo específico y piensa que el propietario está caído, entonces se considera que está caído y, objetivamente, se considera que el propietario está caído.
Los centinelas se encuentran a través del sistema de publicación/suscripción de redis. Cada centinela envía un mensaje al canal __sentinel__:hola. En este momento, todos los demás centinelas pueden consumir esta información y percibir la existencia de otros centinelas.
Cada dos segundos, cada centinela enviará un mensaje al canal __sentinel__:hello correspondiente al maestro + esclavo que está monitoreando, incluyendo su propio host, IP y runid, así como la configuración de monitorización del maestro. .
Cada centinela también monitorea el canal __sentinel__:hello correspondiente a cada maestro+esclavo que monitorea, y luego detecta que otros centinelas también están monitoreando la existencia de este maestro+esclavo.
Cada centinela también intercambiará la configuración de monitoreo del maestro con otros centinelas y sincronizará la configuración de monitoreo entre sí.
Sentinel se encargará de corregir automáticamente algunos esclavos configurados. Por ejemplo, si se apaga el maestro y se selecciona un nuevo maestro, el esclavo original se conecta al maestro equivocado. Después de una conmutación por error, Sentinel se asegurará de que estén conectados al servidor primario correcto.
Si se considera que un dispositivo maestro está inactivo y la mayoría de los centinelas permiten la conmutación maestro-esclavo, entonces un centinela realizará una operación de conmutación maestro-esclavo y primero se debe elegir un dispositivo esclavo.
La selección de un nuevo nodo maestro tendrá en cuenta cierta información sobre los nodos esclavos.
(1) Primero filtre aquellos que han estado desconectados del maestro durante demasiado tiempo y luego seleccione.
(2) Prioridad del dispositivo esclavo
(3) Copiar desplazamiento
(4) ID de ejecución
Primero, si Si El esclavo se desconecta del maestro más de 10 veces, más el tiempo de inactividad del maestro, entonces el esclavo se considera inadecuado para ser seleccionado como maestro - (abajo después de mili relaciones * 10) + mili relaciones _ maestro _ está _ en _.
Elimine los nodos que han estado desconectados durante demasiado tiempo y luego ordene los nodos esclavos.
(1) Ordenar por prioridad subordinada. Cuanto menor sea la prioridad del esclavo, mayor será la prioridad.
(2) Si las prioridades del esclavo son las mismas, entonces mire el desplazamiento de copia, qué esclavo copia más datos, cuanto más tarde sea el desplazamiento, mayor será la prioridad.
(3) Si las dos condiciones anteriores son las mismas, elija ejecutar el esclavo con una ID más pequeña.
Existe un principio básico, se infiere que la máquina esclava tiene los datos más recientes;
Quórum: Se cumplen las condiciones propias.
La mayoría: situación de conmutación activo/en espera.
Cada vez que un centinela necesita cambiar entre activo y respaldo, primero se debe reducir el número de centinelas en el quórum y luego se selecciona un centinela para cambiar, y este centinela debe estar autorizado por la mayoría. de centinelas antes de que pueda cambiar oficialmente.
Sentinel monitoreará un conjunto de redis maestro + esclavo y tiene la configuración de monitoreo correspondiente. El período de configuración es un número de versión y el número de versión de cada conmutador debe ser único. (El período de configuración se utiliza para comparar si la configuración de un nodo es la más reciente. Ver punto 8.)
El centinela que realiza el cambio obtendrá una época de configuración del nuevo interruptor maestro (guardar-> Maestro), y el centinela obtiene Luego, realice el cambio de nodo maestro-esclavo.
Si el primer centinela seleccionado no logra cambiar, los otros centinelas esperarán el tiempo de espera de conmutación por error, luego tomarán el control y continuarán realizando el cambio. En este momento, el nuevo período de configuración se volverá a adquirir como el nuevo número de versión.
Una vez que el centinela complete el cambio, se actualizará localmente para generar la última configuración principal y luego se sincronizará con otros centinelas, es decir, a través del mecanismo de mensajes pub/sub mencionado anteriormente.
El número de versión anterior es importante aquí, porque se publican y monitorean varios mensajes a través de un canal, por lo que después de que un centinela completa un nuevo cambio, a la nueva configuración principal le sigue el nuevo número de versión.
Otros centinelas actualizan sus configuraciones principales de acuerdo con el tamaño del número de versión (si encuentran que su versión va por detrás de la versión obtenida, actualizarán su configuración principal).