Análisis de los primeros principios de la arquitectura maestro-esclavo de Redis. ¿Cómo lograr la separación de lectura y escritura en los primeros días?
Según la arquitectura de replicación maestro-esclavo, para lograr la separación de lectura y escritura, el nodo esclavo de Redis es de solo lectura. La configuración abierta predeterminada es: esclavo de solo lectura, sí. del nodo de solo lectura rechazará todas las operaciones de escritura, por lo que se puede forzar su integración en una arquitectura separada de lectura y escritura.
(1) redis utiliza el modo asincrónico para copiar datos al nodo esclavo.
(2) Un nodo maestro se puede configurar con múltiples nodos esclavos.
(3) Un nodo esclavo también se puede conectar a otros nodos esclavos.
(4) Cuando un nodo esclavo se replica, no bloqueará el funcionamiento normal del nodo maestro.
(5) Al replicar desde un nodo, no bloqueará sus propias consultas ni utilizará el conjunto de datos anterior para proporcionar servicios, pero una vez completada la replicación, deberá eliminar el conjunto de datos anterior y cargarlo; el nuevo conjunto de datos, suspenderá los servicios externos en este momento.
(6) El nodo esclavo se utiliza principalmente para la expansión horizontal para separar la lectura y la escritura. La expansión del nodo esclavo puede mejorar el rendimiento de lectura.
Si utiliza una arquitectura maestro-esclavo, se recomienda que el nodo maestro habilite la persistencia. No se recomienda utilizar el nodo esclavo como un nodo de espera activo para los datos del nodo maestro, porque si la persistencia del nodo maestro está desactivada, cuando el nodo maestro se apaga y se reinicia, los datos pueden estar vacíos, y una vez que los datos se replica, los datos del nodo esclavo también se perderán.
(1) Cuando se inicia el nodo esclavo, enviará el comando PSYNC al nodo maestro.
(2) Si esta es la primera vez que el nodo esclavo se vuelve a conectar al nodo maestro, entonces el nodo maestro solo copiará parte de los datos perdidos al nodo esclavo; de lo contrario, si esta es la primera vez Cuando el nodo esclavo se conecta al nodo maestro, el nodo maestro solo copiará parte de los datos perdidos al nodo esclavo. De lo contrario, si el nodo esclavo se conecta al nodo maestro por primera vez, se activa una resincronización completa y el nodo maestro inicia un subproceso en segundo plano para generar el archivo de instantánea RDB y almacenar en caché en la memoria todos los comandos de escritura recibidos del cliente. Después de generar el archivo RDB, la estación maestra primero enviará el archivo RDB a la estación esclava, y la estación esclava primero escribirá el archivo RDB en el disco local y luego cargará el archivo RDB desde el disco local a la memoria. Luego, el maestro envía el comando de escritura almacenado en la memoria caché al esclavo, y el esclavo sincroniza los datos.
(3) Si un nodo esclavo experimenta una falla en la red y se desconecta del nodo maestro, se volverá a conectar automáticamente. Si el nodo maestro ve que varios nodos esclavos se reconectan, iniciará una operación de guardado de rdb para proporcionar una copia de los datos a todos los nodos esclavos. El maestro crea un trabajo pendiente en la memoria. Tanto el maestro como los esclavos guardan un desplazamiento de réplica y una ID del maestro (ID de ejecución. El desplazamiento se almacena en el trabajo pendiente). Si se interrumpe la conexión de red entre el maestro y el esclavo, el esclavo permitirá que el maestro continúe replicando desde el desplazamiento de réplica anterior, pero si no puede encontrar el desplazamiento correspondiente, realizará una resincronización completa.
El maestro crea el rdb directamente en la memoria y lo envía al esclavo en lugar de colocarlo en su propio disco local.
repl-diskless-sync no Cambie a activado y podrá comenzar
repl-diskless-sync-delay espera un tiempo determinado antes de iniciar la replicación, porque está esperando más esclavos Es importante que los nodos se vuelvan a conectar para proporcionar un único punto de datos.
El nodo esclavo no vence la clave, simplemente espera a que el nodo maestro venza la clave. Si el maestro caduca una clave o elimina una clave a través de LRU, se simula un comando del y se envía al esclavo.
(1) Después de iniciar el nodo esclavo, solo se guarda la información del nodo maestro. Después de iniciar el nodo esclavo, solo se guarda la información del nodo maestro, incluido el host y la IP de. el nodo maestro, pero el proceso de replicación no se inicia.
(2) El nodo esclavo tiene una tarea programada que verifica una vez por segundo si hay un nuevo nodo maestro que pueda conectarse y replicarse desde él. De ser así, se establece una conexión de red de socket con el maestro. nodo.
(3) El nodo esclavo envía el comando ping al nodo maestro.
(4) Autenticación de contraseña, si el nodo maestro establece requirepass (habilite la configuración de autenticación segura en el nodo maestro y requirepass viene con su propio nombre), el nodo esclavo debe enviar la contraseña de masterauth al nodo maestro . Contraseña de autenticación de Masterauth (masterauth viene con su propio nombre)
(5) El nodo maestro realiza una replicación completa por primera vez, enviando todos los datos al nodo esclavo.
(6) El nodo maestro continúa escribiendo comandos en el nodo esclavo y realiza una replicación asincrónica incremental. p>
Esto se refiere a la copia de volumen completo realizada cuando el nodo esclavo se conecta por primera vez a msater. Hay algunos mecanismos detallados en este proceso
(1) Nodo maestro y nodo esclavo. Los nodos mantienen compensaciones
El nodo maestro acumulará su propia compensación y el nodo esclavo también acumulará su propia compensación. La estación esclava informa su propio desplazamiento a la estación maestra cada segundo, y la estación maestra también mantiene el desplazamiento de cada estación esclava. Esto no es específicamente para una replicación completa, sino principalmente porque tanto el maestro como el esclavo necesitan conocer el desplazamiento de sus propios datos para poder comprender la inconsistencia de los datos del otro.
(2) Trabajo pendiente
El nodo maestro tiene un trabajo pendiente con un tamaño predeterminado de 1 MB. Cuando el nodo maestro replica datos en el nodo esclavo, también escribirá una copia sincronizada. los datos al trabajo pendiente.
(3) ID de ejecución principal
A través del comando del servidor de información, puede ver el ID de ejecución principal. Si ubicar el nodo maestro según el host + ip no es confiable, si el nodo maestro se reinicia o los datos cambian, los nodos esclavos deben distinguirse según diferentes identificadores de ejecución. Si necesita reiniciar Redis sin cambiar el ID de ejecución, puede usar el comando de recarga de depuración redis-cli.
(4) psync
El nodo esclavo usa psync para copiar el desplazamiento del runid de psync del nodo maestro. El nodo maestro devuelve un mensaje de respuesta según su propia situación. Puede ser que el desplazamiento del runid de FULLRESYNC desencadene la replicación completa o puede continuar desencadenando la replicación incremental.
(1) El nodo maestro ejecuta bgsave para generar un archivo de instantánea rdb local.
(2) El nodo maestro envía el archivo de instantánea rdb al nodo esclavo. Si el tiempo de espera de replicación de rdb excede los 60 segundos (tiempo de espera de respuesta), el nodo esclavo considerará que la replicación ha fallado y este parámetro se puede ajustar adecuadamente.
(3) Para máquinas que utilizan tarjetas de red Gigabit, que normalmente transfieren archivos de 100 MB y 6G por segundo, el tiempo requerido puede exceder los 60 segundos.
(4) El nodo maestro almacena en caché todos los comandos de escritura nuevos en la memoria cuando genera el rdb y luego copia los nuevos comandos de escritura al nodo esclavo después de que el nodo esclavo guarda el rdb.
(5) client-output-buffer-limit esclavo 256 MB 64 MB 60, si el búfer de memoria continúa consumiendo más de 64 MB durante el proceso de replicación, o excede los 256 MB a la vez, o el tiempo de replicación excede los 60 segundos, detenga la replicación, la copia falló.
(6) Después de recibir el rdb del nodo, vuelva a cargar el rdb en su propia memoria y proporcione servicios al mundo exterior de acuerdo con la versión anterior de los datos. Después de escribir, borre sus datos antiguos y utilícelos. los nuevos datos. Proporcionar servicios de lectura al mundo exterior.
(7) Si el nodo esclavo ha abierto el AOF, inmediatamente ejecutará BGREWRITEAOF para reescribir el AOF. En este proceso, la generación de rdb, la copia de rdb a través de la red, la limpieza de datos antiguos de los nodos esclavos y la reescritura del AOF del nodo esclavo requieren mucho tiempo.
(1) Si la conexión de red maestro-esclavo se interrumpe durante la replicación completa, se activará la replicación incremental cuando el nodo esclavo se vuelva a conectar al nodo maestro.
(2) El nodo maestro obtiene directamente parte de los datos perdidos de sus propios datos pendientes y los envía al nodo esclavo. Los datos pendientes predeterminados son 1 MB.
(3) El nodo maestro obtiene datos del trabajo pendiente en función del desplazamiento en psync enviado por el nodo esclavo.
La siguiente sección explica la arquitectura Sentinel, pero antes de eso, ¿puedes responder las siguientes dos preguntas?
1. Pérdida de datos causada por la replicación asincrónica
Sentinel puede resolver el problema de la arquitectura maestro-esclavo, porque después de que la estación maestra deja de funcionar, puede elegir una nueva estación maestra sin recibir escribir solicitudes. Lograr efectos de alta disponibilidad.
Debido a que la replicación maestro -> esclavo es asíncrona, es posible que haya algunos datos que no se hayan copiado al esclavo. Entonces el maestro deja de funcionar y esta parte de los datos se pierde.
2. Pérdida de datos causada por fisión cerebral
Fisión cerebral, es decir, la máquina donde el control principal se desconecta repentinamente de la red normal y otras máquinas esclavas no pueden conectarse, pero de hecho, el control principal todavía está funcionando.
En este momento, Sentinel puede pensar que la máquina maestra está inactiva y luego abrir la elección para cambiar otras máquinas esclavas a la máquina maestra. En este punto, hay dos maestros en el grupo, que es el llamado "brain crack".
En este momento, aunque una estación esclava se cambia a la estación maestra, es posible que el cliente no tenga tiempo para cambiar a la nueva estación maestra y los datos que continúan escribiéndose en la antigua estación maestra pueden se perderá, por lo que la antigua estación maestra puede perderse. Cuando la estación maestra se restablezca nuevamente, se colgará en la nueva estación maestra como una estación esclava y sus propios datos también se borrarán. Cuando el antiguo host se restablezca nuevamente, se conectará al nuevo host como esclavo, sus propios datos también se borrarán y los datos se copiarán nuevamente del nuevo host, lo que provocará la pérdida de datos.
Considere esto primero, lo explicaremos en la siguiente sección.
Considere primero este tema, lo explicaremos en la siguiente sección.