Preguntas frecuentes sobre Zookeeper
En términos de protocolos de coherencia, preste atención al CP.
En primer lugar, hay varios conceptos clave en el clúster de Zookeeper, como líderes, seguidores y observadores. En Zookeeper, solo el nodo líder puede escribir, y los seguidores y observadores solo son responsables de leer. Sin embargo, los seguidores participarán en la elección de los nodos y la mitad de las escrituras serán exitosas, mientras que los observadores no. Simplemente proporciona la función de leer datos.
Por lo general, esta configuración es para evitar que demasiados nodos esclavos participen en el proceso de media escritura y afecten el rendimiento. De esta manera, Zookeeper puede lograr un alto rendimiento utilizando sólo un pequeño grupo de varias máquinas. Si quiere escalar, simplemente agregue nodos de punto de vigilancia.
ZooKeeper recomienda un número impar de nodos del clúster. Mientras más de la mitad de las máquinas puedan proporcionar servicios normalmente, todo el clúster estará disponible.
Los datos en Zookeeper se almacenan en la memoria. Este nodo de datos se llama Znode, que es una estructura de árbol, como /a/b/c.
Znode se puede dividir en nodos persistentes, nodos temporales y nodos secuenciales.
Los nodos persistentes significan que deben almacenarse en Zookeeper mientras se crean, a menos que se eliminen activamente.
La diferencia con un nodo temporal es que su ciclo de vida es el mismo que el ciclo de vida de la sesión del cliente. Si la sesión falla, se eliminará el nodo temporal.
También existen nodos de secuencia temporales y nodos de secuencia persistentes. Además de las características básicas, también están ordenados los nombres de los nodos secundarios.
La conversación se refiere naturalmente a la comunicación entre el cliente Zookeeper y el servidor. Utilizan conexiones persistentes TCP para mantener la comunicación. Por lo general, existe un mecanismo de detección de latidos que puede aceptar notificaciones de eventos de visualización del servidor.
Los usuarios pueden registrar Wather en el nodo especificado, de modo que cuando se active el evento, el cliente recibirá una notificación del servidor.
Zookeeper usa ACL para controlar los permisos, incluidos los siguientes cinco tipos:
Crear, permiso para crear nodos secundarios
Eliminar, permiso para eliminar nodos secundarios.
Leer y obtener permisos para datos de nodos y lista de nodos secundarios.
Escribir y actualizar permisos de nodo
Administrador, establece los permisos ACL del nodo.
Por tanto, ZooKeeper logra una alta disponibilidad a través de clústeres y un alto rendimiento a través de los nodos de datos de memoria Znode, pero la cantidad de datos almacenados no puede ser demasiado grande, lo que suele ser adecuado para escenarios donde hay más lectura y menos escritura.
Zookeeper puede confiar en el mecanismo de monitoreo de Wather para proporcionar funciones de publicación/suscripción de datos distribuidos.
El cliente puede registrar el monitoreo del agua con el servidor. Cuando se activa el evento especificado del servidor, se enviará una notificación del evento al cliente.
Tiene varias características:
Zookeeper logra la coherencia de la secuencia final de los datos a través del protocolo de transmisión atómica ZAB, que es un proceso de envío de dos etapas similar a 2PC.
Dado que Zookeeper solo tiene el nodo líder para escribir datos, si otros nodos reciben una solicitud para escribir datos, se reenviará al nodo líder.
El proceso principal es el siguiente:
Después de que el líder recibe la solicitud, la convierte en una propuesta y asigna un ID de transacción incremental único global: zxid a cada propuesta, y Luego, la propuesta se coloca en una cola FIFO y se envía a todos los seguidores de acuerdo con la política FIFO.
El seguidor escribe la propuesta en el disco local en forma de registro de transacciones y devuelve ACK al líder después de que la escritura sea exitosa.
Después de que el líder recibe más de la mitad de los reconocimientos de los seguidores, puede considerar que los datos se han escrito correctamente y enviará un comando de confirmación a los seguidores para decirles que pueden enviar la propuesta.
ZAB incluye dos modos básicos, recuperación de fallos y transmisión de mensajes.
Cuando se inicia todo el servicio de clúster y la red se interrumpe o reinicia, primero entrará en el estado de recuperación de fallos.
En este momento es el momento de elegir el nodo líder. ZAB saldrá del modo de recuperación cuando más de la mitad de los nodos del clúster estén sincronizados con el estado Líder. Luego ingresará al modo de transmisión de mensajes.
La elección de líderes se puede dividir en dos aspectos. Al mismo tiempo, la elección incluye principalmente transacciones zxid y myid, y el nodo incluye principalmente tres estados.
Primero, cada nodo vota por sí mismo y luego transmite la información de votación a otros nodos del clúster.
Los nodos reciben información de votación de otros nodos y luego la comparan con sus propios votos. Primero, el zxid más grande tiene prioridad. Si el zxid es el mismo, elegirán el que tenga el myid más grande. En este momento, todos están mirando.
Una vez completada la votación, se contará la información de la votación. Si más de la mitad de las máquinas del clúster eligen una máquina de nodo como líder, la elección termina.
Finalmente, se actualiza el estado de cada nodo, el líder cambia al estado de líder y el seguidor cambia al estado de seguidor.
Si el nodo líder elegido falla, el líder elegido será reelegido durante la operación.
Después de que el líder dimita, el nodo no observador cambiará su estado al estado MIRANDO y luego volverá a ingresar al proceso electoral.
Generar información de votación (myid, zxid). Asimismo, todos votan por sí mismos en la primera ronda de votación y luego transmiten la información de la votación.
El siguiente proceso es el mismo que la elección anterior. Primero se seleccionará zxid, luego myid y finalmente se contará la información de la votación, se modificará el estado del nodo y finalizará la elección.
Seguirá existiendo. Este problema se puede describir en tres escenarios.
Porque "Zookeeper" es la mitad de la batalla, lo que significa éxito. Digamos que tenemos cinco nodos. Si el nodo 123 se escribe correctamente, si solicita acceso al nodo 4 o 5 en este momento, es posible que los datos no se lean porque es posible que no estén sincronizados con los nodos 4 o 5, lo que también puede considerarse un problema de inconsistencia de datos.
La solución puede ser utilizar el comando sync antes de leer.
Esto también es un problema de sincronización de datos.
El líder acaba de generar una sugerencia antes de enviarla. En ese momento, el líder renunció y luego de la reelección se convirtió en seguidor, pero el nuevo líder no hizo esta propuesta.
Los registros en este caso serán descartados.
Si la propuesta se envía correctamente pero se cierra antes de enviar el comando de confirmación, si se vuelve a realizar una elección, el nodo con el zxid más grande seguirá siendo elegido como líder. Por lo tanto, este registro no se descartará y se resincronizará con otros nodos después de que se elija el líder.