Tabla de contenido
2. Iniciar el proceso de elección de líderes
1. Proceso de elección de tiempo de inactividad de inicio o líder
2. Proceso de interacción cliente-servidor (NIO o Netty)
3. Protocolo de consistencia ZAB para escribir datos (cómo asegurar el orden de los mensajes)
4. Mira el mecanismo de activación del monitoreo.
1. Descarga del código fuente
https://github.com/apache/zookeeper.git
Corte del código, corte del archivo zkServer.sh
Especifique los parámetros del programa e inicie la función principal de QuorumPeerMain.java
La segunda forma de empezar
ZooKeeperMain, agregue los siguientes parámetros de inicio
Cree un grupo de cuidadores del zoológico, y cuando se abra normalmente, le indicará a cada uno cuál es el líder y cuál es la flor.
2. Iniciar el proceso de elección de líderes
1. La primera máquina vota por sí misma y lo envía a otras máquinas, y otras máquinas también votarán por sí misma y lo enviarán a otras máquinas para ver cuál tiene el zxid más alto, pero el zxid de la primera ronda de votación es todo 0 , así que continúe comparando myids Cuál es más grande, el que tiene myid=2 votó en la primera ronda, el ganador ingresa a la siguiente ronda de elección
2. Tanto myid=1 como myid=2 votan por la máquina con myid 2 y determinan (2,0) como el ganador
Entrada de código fuente
Analice el archivo de configuración en la memoria, limpie la tarea del archivo de instantáneas y el método runFromConfig del proceso de inicio principal.
De forma predeterminada, NIO se usa para cargar la configuración y también se puede iniciar con netty como se muestra en la figura a continuación.
Inicialice los parámetros de Qrorum, use internamente el objeto de nodo para generar
puesta en marcha
Cargar parámetros netos
Embarcadero de inicio por defecto, puerto 8080, utilizado por operación y mantenimiento
Comenzar elección de líder
Estado predeterminado del servidor: buscando
Ver el algoritmo de elección final
Omitir por defecto, ver el algoritmo de elección de 3
Inicie un puerto electoral para escuchar la información del voto.
Dos hilos enviando boletas
Los anteriores son algunos métodos de monitoreo de subprocesos, super.start es el método de elección real.
Lógica electoral básica:
1. Estado de inicio: Buscando
Estrategia electoral central: fastLeaderElection
Actualice el mensaje de la boleta y envíe el mensaje. Al depurar, el método sendqueue.offer puede perderse. Necesitamos saber que hay un método de encuesta arriba para obtener el mensaje en la cola.
manager.connectAll: establecer una conexión de socket