Tabla de contenido
1. Descripción general del cuidador del zoológico
Mecanismo de trabajo del cuidador del zoológico
Características del cuidador del zoológico
2. Escenarios de aplicación de Zookeeper
Gestión de configuración unificada
Gestión de clústeres unificada
Servidor dinámico en línea y fuera de línea
3. Mecanismo de elección de cuidadores del zoológico
Lanzamiento del mecanismo electoral por primera vez
No poner en marcha el mecanismo electoral por primera vez
4. Implementar el clúster Zookeeper
El primer paso es apagar el firewall y el mecanismo de seguridad.
El segundo paso es instalar el entorno JDK.
El tercer paso es importar el paquete de software y optimizar la ruta.
Paso 4: hacer una copia de seguridad de los archivos de configuración
Paso 5 Modificar el archivo de configuración
Paso 6: copiar archivos de configuración de forma remota
Paso 7: crear un directorio de datos y un directorio de registro
Paso 8 Configurar el Myid de cada servidor
Paso 9: escriba el script de inicio del cuidador del zoológico
Paso 10: Si el nombre del archivo se ingresa incorrectamente, es necesario cambiarle el nombre.
Paso 11: autorice el archivo de secuencia de comandos y agregue los servicios del sistema
Paso 12: inicie zookeeper en todos los servidores
5. Implementación de Zookeeper + Kafka
El primer paso es importar el paquete de software y descomprimir la ruta de optimización.
Paso 2: hacer una copia de seguridad de los archivos de configuración
El tercer paso es modificar el archivo de configuración.
Paso 4: cambiar las variables de entorno
Paso 5: actualice el archivo de configuración
Paso 6: configurar el script de inicio del cuidador del zoológico
Paso 7: copie de forma remota el archivo de secuencia de comandos a todos los servidores
Paso 8: potenciar y agregar identificación del sistema
Paso 9: inicie el servicio Kafka de todos los servidores de nodo
Paso 10: crea un tema y nómbralo
Paso 11 Ver el tema del servicio actual
Paso 12 Ver los detalles del Tema
Paso 14 Modificar el número de particiones
Paso 15: Cómo eliminar el tema especificado
1. Descripción general del cuidador del zoológico
Zookeeper es un proyecto Apache distribuido de código abierto que proporciona servicios de coordinación para marcos distribuidos.
Mecanismo de trabajo del cuidador del zoológico
Zookeeper se entiende desde la perspectiva del patrón de diseño: es un marco de gestión de servicios distribuidos diseñado en base al patrón de observador, es responsable de almacenar y administrar los datos que interesan a todos y luego acepta el registro de los observadores. Una vez que se conoce el estado de estos cambios de datos, Zookeeper Será responsable de notificar a los observadores registrados en Zookeeper para que reaccionen en consecuencia. En otras palabras, Zookeeper = sistema de archivos + mecanismo de notificación.
Características del cuidador del zoológico
① Zookeeper: un grupo compuesto por un líder y varios seguidores.
② Siempre que sobrevivan más de la mitad de los nodos del clúster Zookeeper, el clúster Zookeeper puede funcionar normalmente. Por tanto, Zookeeper es adecuado para instalar un número impar de servidores.
③ Coherencia de datos global: cada servidor guarda una copia de los mismos datos. No importa a qué servidor se conecte el cliente, los datos son consistentes.
④ Las solicitudes de actualización se ejecutan en secuencia. Las solicitudes de actualización del mismo Cliente se ejecutan en el orden en que se envían, es decir, primero en entrar, primero en salir.
⑤ Atomicidad de la actualización de datos, una actualización de datos tiene éxito o falla.
⑥ En tiempo real, dentro de un cierto rango de tiempo, el Cliente puede leer los datos más recientes.
Estructura de datos de ZooKeeper
La estructura del modelo de datos de ZooKeeper es muy similar a la del sistema de archivos de Linux: puede considerarse como un árbol en su conjunto y cada nodo se denomina ZNode. Cada ZNode puede almacenar 1 MB de datos de forma predeterminada y cada ZNode puede identificarse de forma única por su ruta.
2. Escenarios de aplicación de Zookeeper
Servicio de nombres unificado
En un entorno distribuido, a menudo es necesario nombrar las aplicaciones/servicios de manera uniforme para una fácil identificación. Por ejemplo: la IP no es fácil de recordar, pero el nombre de dominio es fácil de recordar.
Gestión de configuración unificada
① En un entorno distribuido, la sincronización de archivos de configuración es muy común. Generalmente se requiere que la información de configuración de todos los nodos en un clúster sea consistente, como un clúster de Kafka. Después de modificar el archivo de configuración, espero que se pueda sincronizar rápidamente con cada nodo.
② ZooKeeper puede implementar la gestión de la configuración. La información de configuración se puede escribir en un Znode en ZooKeeper. Cada servidor cliente escucha este Znode. Una vez que se modifican los datos en Znode, ZooKeeper notificará a cada servidor cliente.
Gestión de clústeres unificada
① En un entorno distribuido, es necesario conocer el estado de cada nodo en tiempo real. Se pueden realizar algunos ajustes según el estado en tiempo real del nodo.
② ZooKeeper puede monitorear los cambios de estado del nodo en tiempo real. La información del nodo se puede escribir en un ZNode en ZooKeeper. Supervise este ZNode para obtener sus cambios de estado en tiempo real.
Servidor dinámico en línea y fuera de línea
El cliente puede obtener información en tiempo real sobre los cambios en línea y fuera de línea del servidor.
Equilibrio de carga suave
Registre la cantidad de visitas a cada servidor en Zookeeper y deje que el servidor con la menor cantidad de visitas maneje la última solicitud del cliente.
3. Mecanismo de elección de cuidadores del zoológico
Lanzamiento del mecanismo electoral por primera vez
① El servidor 1 se inicia e inicia una elección. El servidor 1 emite su voto. En este momento, el servidor 1 tiene un voto, que no es suficiente para más de la mitad (3 votos), la elección no se puede completar y el estado del servidor 1 permanece MIRANDO;
② El servidor 2 se inicia e inicia otra elección. Los servidores 1 y 2 votan por sí mismos e intercambian información de voto: en este momento, el servidor 1 encuentra que el myid del servidor 2 es mayor que el que está votando actualmente (servidor 1) y cambia el voto para recomendar el servidor 2. En este momento, el servidor 1 tiene 0 votos, el servidor 2 tiene 2 votos y no hay más de la mitad de los resultados, la elección no se puede completar y el estado de los servidores 1 y 2 sigue MIRANDO.
③ El servidor 3 se inicia e inicia una elección. En este momento, tanto el servidor 1 como el 2 cambiarán los votos al servidor 3. Los resultados de esta votación: el servidor 1 tiene 0 votos, el servidor 2 tiene 0 votos y el servidor 3 tiene 3 votos. En este momento, el servidor 3 tiene más de la mitad de los votos y el servidor 3 es elegido líder. Los servidores 1 y 2 cambian el estado a SIGUIENTE y el servidor 3 cambia el estado a LÍDER;
④ El servidor 4 se inicia e inicia una elección. En este momento, los servidores 1, 2 y 3 ya no están en estado MIRANDO y no cambiarán la información de votación. El resultado del intercambio de información de voto: el servidor 3 tiene 3 votos y el servidor 4 tiene 1 voto. En este momento, el servidor 4 obedece a la mayoría, cambia la información de votación al servidor 3 y cambia el estado a SIGUIENTE
No poner en marcha el mecanismo electoral por primera vez
① Cuando un servidor en el clúster ZooKeeper encuentra una de las dos situaciones siguientes, comenzará a ingresar a la elección de Líder:
Comienza la inicialización del servidor.
No se puede mantener la conexión con Leader mientras el servidor está en ejecución.
② Cuando una máquina ingresa al proceso de elección de Líder, el grupo actual también puede estar en los dos estados siguientes:
Ya existe un líder en el clúster.
Para situaciones donde ya existe un líder, cuando la máquina intenta elegir un líder, se le informará la información del líder del servidor actual. Para esta máquina, solo necesita establecer una conexión con la máquina líder y sincronizar el estado.
③ De hecho, no hay ningún líder en el grupo.
Supongamos que ZooKeeper consta de 5 servidores, con SID 1, 2, 3, 4 y 5, y ZXID 8, 8, 8, 7 y 7. En este momento, el servidor con SID 3 es el líder. En algún momento, los servidores 3 y 5 fallaron, por lo que comenzó la elección de líder.
Reglas de elección de líder:
1. El que tiene el EPOCH más grande gana directamente.
2. El que tiene el mismo EPOCH y el ID de transacción más grande gana.
3. El que tiene el mismo ID de transacción y el ID de servidor más grande gana.
SID: ID del servidor. Se utiliza para identificar de forma única una máquina en el clúster de ZooKeeper. Cada máquina no se puede repetir y es coherente con myid.
ZXID: ID de transacción. ZXID es un ID de transacción que se utiliza para identificar un cambio en el estado del servidor. En un momento determinado, el valor ZXID de cada máquina en el clúster puede no ser exactamente el mismo, esto está relacionado con la velocidad lógica de procesamiento por parte del servidor ZooKeeper de la "solicitud de actualización" del cliente.
Época: el nombre en clave de cada término líder. Cuando no hay líder, el valor del reloj lógico en la misma ronda de votación es el mismo. Estos datos aumentarán cada vez que se emita un voto.
4. Implementar el clúster Zookeeper
El primer paso es apagar el firewall y el mecanismo de seguridad.
Instrucción: systemctl detener firewalld
setenforce 0
El segundo paso es instalar el entorno JDK.
Ejemplo:yum -y install java-1.8.0-openjdk java-1.8.0-openjdk-devel
El tercer paso es importar el paquete de software y optimizar la ruta.
Comando: tar xf apache-zookeeper-3.5.7-bin.tar.gz
mv apache-zookeeper-3.5.7-bin /usr/local/zookeeper-3.5.7
Paso 4: hacer una copia de seguridad de los archivos de configuración
Comando: cp -a /usr/local/zookeeper-3.5.7/conf/zoo_sample /usr/local/zookeeper-3.5.7/conf/zoo.cfg
Paso 5 Modificar el archivo de configuración
Comando: vim /usr/local/zookeeper-3.5.7/conf/zoo.cfg
Paso 6: copiar archivos de configuración de forma remota
Comando: scp /usr/local/zookeeper-3.5.7/conf/zoo.cfg 192.168.8.130:/usr/local/zookeeper-3.5.7/conf
scp /usr/local/zookeeper-3.5.7/conf/zoo.cfg 192.168.8.140:/usr/local/zookeeper-3.5.7/conf
Paso 7: crear un directorio de datos y un directorio de registro
Comando: mkdir /usr/local/zookeeper-3.5.7/data
mkdir /usr/local/zookeeper-3.5.7/logs
Paso 8 Configurar el Myid de cada servidor
Comando: eco 1 >> /usr/local/zookeeper-3.5.7/data/myid
eco 2 >> /usr/local/zookeeper-3.5.7/data/myid
eco 3 >> /usr/local/zookeeper-3.5.7/data/myid
Paso 9: escriba el script de inicio del cuidador del zoológico
Comando: vim /etc/init.d/zookeeper
Paso 10: Si el nombre del archivo se ingresa incorrectamente, es necesario cambiarle el nombre.
Comando: mv /etc/init.d/zookeeper.sh /etc/init.d/zookeeper
Paso 11: autorice el archivo de secuencia de comandos y agregue los servicios del sistema
Comando: chmod 777 /etc/init.d/zookeeper
chkconfig --añadir cuidador del zoológico
Paso 12: inicie zookeeper en todos los servidores
Instrucción: inicio del cuidador del zoológico
estado del cuidador del zoológico del servicio
5. Implementación de Zookeeper + Kafka
El primer paso es importar el paquete de software y descomprimir la ruta de optimización.
comando: tar xf kafka_2.13-2.7.1.tgz
mv kafka_2.13-2.7.1 /usr/local/kafka
Paso 2: hacer una copia de seguridad de los archivos de configuración
cp /usr/local/kafka/config/server.properties /usr/local/kafka/config/server.properties.bak
El tercer paso es modificar el archivo de configuración.
Comando: vim /usr/local/kafka/config/server.properties
Paso 4: cambiar las variables de entorno
Comando: vim /etc/perfil
Paso 5: actualice el archivo de configuración
Instrucción: fuente /etc/profile
Contenido: export KAFKA_HOME=/usr/local/kafka
export PATH=$PATH:$KAFKA_HOME/bin
Paso 6: configurar el script de inicio del cuidador del zoológico
Comando: vim /etc/init.d/kafka
内容:#!/bin/bash
#chkconfig:2345 22 88
#description:Kafka Service Control Script
KAFKA_HOME='/usr/local/kafka'
case $1 in
start)
echo "---------- Kafka 启动------------"
${KAFKA_HOME}/bin/kafka-server-start.sh -daemon ${KAFKA_HOME}/config/server.properties
;;
stop)
echo "---------- Kafka 停止 ------------"
${KAFKA_HOME}/bin/kafka-server-stop.
sh ;;
reiniciar)
$0 detener
$0 iniciar
;;
status)
echo "---------- Kafka 状态 ------------"
count=$(ps -ef | grep kafka | egrep -cv "grep|$$")
if [ "$count" -eq 0 ]; entonces
echo "kafka no se está ejecutando"
else
echo "kafka se está ejecutando"
fi
;;
*)
echo "Uso: $0 {inicio|detener|reiniciar|estado}"
esac
Paso 7: copie de forma remota el archivo de secuencia de comandos a todos los servidores
Comando: scp /etc/init.d/kafka 192.168.8.130:/etc/init.d/
scp /etc/init.d/kafka 192.168.8.140:/etc/init.d/
Paso 8: potenciar y agregar identificación del sistema
Comando: chmod 777 /etc/init.d/kafka
chkconfig --añadir kafka
Paso 9: inicie el servicio Kafka de todos los servidores de nodo
Instrucción: inicio del servicio kafka
Paso 10: crea un tema y nómbralo
Instrucción: kafka-topics.sh --create --zookeeper 192.168.8.200:2181,192.168.8.130:2181,192.168.8.140:2181 --replication-factor 2 --partitions 3 --topic [nombre]
Paso 11 Ver el tema del servicio actual
Comando: kafka-topics.sh --list --zookeeper 192.168.8.200:2181,192.168.8.130:2181,192.168.8.140:2181
Paso 12 Ver los detalles del Tema
Instrucción: kafka-topics.sh --describe --zookeeper 192.168.8.200:2181,192.168.8.130:2181,192.168.8.140:2181
Paso 13: Publicar la noticia
Comando: kafka-console-producer.sh --broker-list 192.168.8.200:9092,192.168.8.130:9092,192.168.8.140:9092 --prueba de tema
Mensajes del consumidor: kafka-console-consumer.sh --bootstrap-server 192.168.8.200:9092,192.168.8.130:9092,192.168.8.140:9092 --prueba de tema --desde el principio
Paso 14 Modificar el número de particiones
Comando: kafka-topics.sh --zookeeper 192.168.8.200:2181,192.168.8.130:2181,192.168.8.140:2181 --alter --topic test --partitions [número]
Paso 15: Cómo eliminar el tema especificado
Comando: kafka-topics.sh --delete --zookeeper 192.168.8.200:2181,192.168.8.130:2181,192.168.8.140:2181 --topic [nombre del tema]