Construcción del entorno ZooKeeper (tutorial de nivel de niñera)

1. Introducción a ZooKeeper

En el campo distribuido, un componente indispensable es ZooKeeper.

ZooKeeper es un marco de gestión y coordinación de datos distribuidos de alta disponibilidad, y puede garantizar la coherencia de los datos en un entorno distribuido.

ZooKeeper fue creado por Yahoo y es una implementación de código abierto de Google Chubby. La coherencia de Chubby se basa en el algoritmo Paxos, y ZK utiliza una variante del protocolo Paxos, ZAB (protocolo de transmisión atómica de ZooKeeper, nombre completo: Protocolo de transmisión de mensajes atómicos de ZooKeeper).

Los principales escenarios de aplicación de ZooKeeper incluyen: publicación/suscripción de datos, equilibrio de carga, servicio de nombres, coordinación/notificación distribuida, gestión de clústeres, elección de maestro, bloqueos distribuidos, colas distribuidas, etc. Actualmente, Zookeeper se utiliza como componente central en cada vez más sistemas distribuidos (Hadoop, HBase, Storm, Kafka).

El servidor tiene dos roles principales: líder y seguidor.

  • Líder: responsable de la iniciación y resolución de votaciones, y actualización del estado del sistema;

  • Seguidor: Recibir solicitudes de clientes y devolver resultados al cliente, y participar en la votación en el proceso de elección;

Clúster de ZooKeeper

Dato curioso sobre el nombre ZooKeeper . En la etapa inicial del proyecto, teniendo en cuenta que muchos proyectos internos tenían nombres de animales (como el famoso proyecto Pig), los ingenieros de Yahoo esperaban darle a este proyecto un nombre de animal. Raghu Ramakrishnan, el científico jefe del instituto en ese momento, bromeó: "¡Si esto continúa así, nos convertiremos en un zoológico!" Al juntar los componentes, todo el sistema distribuido de Yahoo parece un gran zoológico, y Zookeeper solo se usa para coordinar el entorno distribuido, y así nació el nombre Zookeeper.

2. Instalación de ZooKeeper

Hay dos formas de implementar ZooKeeper:

  • Modo independiente (modo independiente): utilizado en el entorno de desarrollo, servidor único
  • Modo clúster (modo multiservidor): utilizado en el entorno de producción, la cantidad de servidores es impar

¿Por qué se establece ZK en un número impar?

Zookeeper tiene una característica de este tipo: siempre que más de la mitad de las máquinas del clúster funcionen normalmente, todo el clúster está disponible para el mundo exterior. Es decir, si hay 2 servidores zookeeper, mientras 1 servidor se cuelgue, no se podrá usar todo el clúster de zookeeper, porque 1 no es más de la mitad, por lo que la tolerancia de error de 2 servidores zookeeper es 0; de manera similar , si hay 3 Cuelga uno de los zookeepers, y quedan 2 funcionando normalmente, más de la mitad de ellos, entonces la tolerancia de 3 zookeepers es 1; por lo mismo, puedes enumerar unos cuantos más: 2 -> 0; 3 -> 1; 4 -> 1 ; 5 -> 2; 6 -> 2 encontrará una regla, la tolerancia de 2n y 2n-1 es la misma, ambos son n-1, así que para ser más eficiente, ¿por qué agregar un cuidador de zoológico innecesario?

Se puede ver que la cantidad de servidores en el clúster ZK es al menos tres.

0. Preparaciones

Lista de requisitos:

  • SO: Ubuntu-18.04

    Si necesita los pasos de instalación del sistema operativo, consulte: Instalación de máquina virtual (tutorial de nivel de niñera)

  • Guardián del zoológico 3.7.0

    Dirección de descarga del sitio web oficial: https://zookeeper.apache.org/releases.html

  • JDK:JDK1.8

    ZooKeeper se ejecuta en base a JVM. El ZK instalado en este artículo requiere la versión 1.8 de JDK y superior (JDK 8 LTS, JDK 11 LTS, JDK 12; las versiones de Java 9 y 10 no son compatibles)

    Dirección de descarga del sitio web oficial: http://java.sun.com/javase/downloads/index.jsp

Para atender a los usuarios básicos, el software necesario se coloca en el disco de red de Baidu

链接:https://pan.baidu.com/s/1kjcuNNCY2FxYA5o7Z2tgkQ 
提取码:nuli 

Pasos oficiales de instalación:

1) Instalar JDK

2) Establecer el tamaño del montón de Java (tamaño de la pila de Java)

Este es un paso importante para evitar el intercambio de memoria que afecta el rendimiento de ZooKeeper. Para determinar el valor correcto, debe realizar una prueba de carga y asegurarse de estar muy por debajo del límite de uso que provoca el intercambio.

3) Instalar ZooKeeper

4) Cree un archivo de configuración, el nombre del archivo se puede elegir arbitrariamente, se recomienda colocar el archivo de configuración en el directorio conf de ZooKeeper y nombrarlo zoo.cfg, para que sea conveniente iniciar el servicio sin especificar el archivo de configuración .

Complete la siguiente configuración:

tickTime=2000
initLimit=5
syncLimit=2
dataDir=/var/lib/zookeeper/
clientPort=2181
maxClientCnxns=60
server.1=zoo1:2888:3888
server.2=zoo2:2888:3888
server.3=zoo3:2888:3888

Descripción de parámetros:

parámetro valores predeterminados ilustrar
marcaTiempo 2000 Tiempo de latido de la comunicación cliente-servidor
El intervalo de tiempo para mantener los latidos entre los servidores de Zookeeper o entre clientes y servidores, es decir, se envía un latido cada tickTime. tickTime está en milisegundos.
initLimit 10 Límite de tiempo de comunicación inicial líder-seguidor
El número máximo de latidos (el número de tickTimes) que se puede tolerar durante la conexión inicial entre el servidor seguidor (F) y el servidor líder (L) en el clúster.
límite de sincronización 5 Límite de tiempo de comunicación síncrona líder-seguidor
El número máximo de latidos (el número de tickTimes) que se puede tolerar entre la solicitud y la respuesta entre el servidor seguidor y el servidor líder en el clúster.
dirección de datos /tmp/guardián del zoológico El directorio de archivos de datos
Zookeeper guarda el directorio de datos. De manera predeterminada, Zookeeper también guarda los archivos de registro para escribir datos en este directorio.
puertocliente 2181 Puerto de conexión del cliente
El puerto en el que el cliente se conecta al servidor de Zookeeper. Zookeeper escuchará este puerto y aceptará las solicitudes de acceso de los clientes.
maxClientCnxns 60 Máximo de conexiones de cliente admitidas
servidor.id=host:puerto:puerto La información del clúster (número de servidor, dirección del servidor, puerto de comunicación LF, puerto de elección)
se escribe en un formato especial Las reglas son las siguientes:
server.N=YYY:A:B, donde N se utiliza para indicar un número de serie del servidor en el clúster, necesitamos crear un archivo en el directorio dataDir , el myidcontenido del archivo es el número correspondiente N
A es el número de puerto, que se utiliza para la comunicación de la máquina en el clúster (solo el líder escucha este puerto
B es el número de puerto, que se usa para elegir al líder (todo Zookeeper lo escucha) este puerto)

Para obtener más información sobre los parámetros, consulte: https://zookeeper.apache.org/doc/r3.7.0/zookeeperAdmin.html#sc_configuration

5) Crear archivo myid

myidCree un archivo en el directorio dataDir establecido en el paso anterior .

myidEl archivo

​ El tamaño de la ID está entre 1 y 255. Si las funciones extendidas están habilitadas, como los nodos TTL, la ID debe estar entre 1 y 254.

6) Crear archivo de identidad inicialinitialize

initializeEl archivo se encuentra en el directorio dataDir y se crea cuando se inicia un nuevo clúster.

7) Inicie el servicio ZooKeeper de la siguiente manera

$ java -cp zookeeper.jar:lib/*:conf org.apache.zookeeper.server.quorum.QuorumPeerMain zoo.conf

1. Modo autónomo

El modo independiente es la primera forma para principiantes o usuarios con recursos limitados. Este artículo presenta principalmente la instalación en modo independiente de ZK.

Suponiendo que el nombre de usuario actual es xiaobai(si su nombre de usuario no es xiaobai, puede tomar dos formas: una es crear un usuario xiaobai y la otra es modificar la configuración correspondiente según su nombre de usuario), combinado con la instalación oficial pasos, presionamos Instalar de la siguiente manera:

1) Instalar JDK

Si ya está instalado, omita

Convención:

  • Cargue o descargue el paquete de instalación requerido en el directorio de software en el directorio de inicio~/soft

  • El directorio de instalación se encuentra en el directorio opt en el directorio de inicio~/opt

Cargue jdk en el ~/softdirectorio, asegúrese de que el archivo se haya cargado, ingrese el comando ls ~/softpara ingresar la verificación

ls comando

Luego descomprima el archivo

mkdir ~/opt
tar -xvf ~/soft/jdk-8u261-linux-x64.tar.gz  -C ~/opt

establecer conexión suave

cd ~/opt
ln -s jdk1.8.0_261/ jdk

Configure las variables de entorno y abra el archivo de configuración de bash

cd 
vi .bashrc

Presione ipara ingresar al modo de inserción, agregue el siguiente código al final , luego presione para escsalir de la edición, ingrese para :xguardar

export JAVA_HOME=/home/xiaobai/opt/jdk
export PATH=$PATH:$JAVA_HOME/bin

Ingrese el siguiente comando para que la modificación surta efecto, puede usar el javacomando para verificar si la configuración es exitosa

source .bashrc
java

comando java

2) Instalar ZooKeeper

(1) Cargue el paquete de instalación de ZooKeeper descargado del disco de red de Baidu apache-zookeeper-3.7.0-bin.tar.gzal ~/softdirectorio

Por supuesto, también puede copiar el enlace de descarga del sitio web oficial y usar el wgetcomando para descargar.

Asegúrese de que el archivo se haya cargado, ingrese el comando ls ~/softpara ingresar la verificación

ls comando

(2) Descomprima el paquete de instalación de ZooKeeper en el ~/optdirectorio

tar -xvf ~/soft/apache-zookeeper-3.7.0-bin.tar.gz  -C ~/opt
ls ~/opt/apache-zookeeper-3.7.0-bin

(3) Crear enlaces blandos

cd ~/opt
ln -s apache-zookeeper-3.7.0-bin zookeeper

ls comando

  • El directorio bin incluye scripts ejecutables, como el zkServer.sh, zkCli.sh de uso común
  • El directorio conf contiene archivos de configuración
  • El directorio docs contiene documentación relacionada.
  • El directorio lib contiene paquetes jar relacionados

(4) Modificar el archivo de configuración -

cd ~/opt/zookeeper/conf
cp zoo_sample.cfg zoo.cfg
vi zoo.cfg

El valor modificado dataDires/home/xiaobai/opt/zookeeper/tmp

Tenga en cuenta que para Xiaobai, si no desea usar el comando vi, puede usar sudo gedit ~/opt/zookeeper/conf/zoo.cfgel Bloc de notas para abrir un archivo similar a Windows para editar el archivo y manejar situaciones similares más adelante.

El comando vi es fácil de usar : después de ingresar el archivo, ingrese la letra ipara ingresar al modo de inserción => modifique el contenido del archivo a node1 => presione la Esctecla para ingresar al modo de línea de comando => ingrese :al modo de línea inferior = > entrar xo wqguardar y salir.

Si no desea guardar el archivo después de la modificación, ingrese al modo de línea inferior y luego ingrese q!para ejecutar y salir sin guardar.

directorio dataDir

3) Configurar variables de entorno

vi  ~/.bashrc  

Agregue lo siguiente al final del archivo:

export ZOOKEEPER_HOME=/home/xiaobai/opt/zookeeper
export PATH=$ZOOKEEPER_HOME/bin:$PATH

Hacer que las variables de entorno surtan efecto:

source ~/.bashrc

4) Iniciar Guardián del Zoológico

zkServer.sh start

Ver progreso

Ingrese el comando para jpsver si el inicio es exitoso

QuórumPeerMain

Ver el estado de

Introduzca un comando para zkServer.sh statusver estado

Vista de estado de ZooKeeper

5) Conexión del cliente

método de entrevista:

  • A través de las herramientas del cliente:

    • Herramienta de línea de comandos: zkCli.sh

    • Herramienta de interfaz: ZooInspector

      Dirección de descarga: https://issues.apache.org/jira/secure/attachment/12436620/ZooInspector.zip

      También se puede descargar desde el disco de red de Baidu proporcionado anteriormente.

  • A través de la API de Java

Aquí hay una demostración simple con la herramienta de línea de comando zkCli.sh,

(1) Inicie el cliente

zkCli.sh -server localhost:2181

Inicio del cliente ZK

(2) Crear un nodo

create /test 888
create -s /test/lock 666
create -s /test/lock 666

crear crear nodo

(3) Ver nodos

ls /
ls -s /tset

Ver información del nodo

ZooKeeper mantiene una jerarquía similar a un árbol. Los nodos en el árbol se denominan znodes. Cada znode guardará su propio contenido de datos y una serie de información de atributos. Cada Znode tiene un identificador de ruta único; cabe señalar que los datos del znode no pueden superar 1 MB.

El árbol de directorios de ZooKeeper se puede ver a través de la herramienta ZooInspector .

Puede ver información detallada del nodo a través de los comandos ls -s pathA continuación, se incluye una breve explicación de la información anterior:

  • [lock0000000000, lock0000000001] //Consulte qué nodos hay en este directorio

  • cZxid = 0xd //ZXID creado, que indica el ID de la transacción cuando se creó el ZNode

  • ctime = Thu Dec 16 20:52:57 CST 2021 // Hora de creación, que indica la hora en que se creó el ZNode

  • mZxid = 0xd //ZXID modificado, indicando el ID de la transacción cuando se actualizó por última vez el ZNode

  • mtime = Thu Dec 16 20:52:57 CST 2021 //Modified Time, que indica la última vez que se actualizó el nodo

  • pZxid = 0xf //Indica el ID de la transacción cuando se modificó por última vez la lista de nodos secundarios de este nodo. Tenga en cuenta que pZxid solo se cambiará si se cambia la lista de nodos secundarios, y los cambios en el contenido de los nodos secundarios no afectarán a pZxid.

  • cversion = 2 // número de versión del nodo secundario

  • dataVersion = 0 // número de versión del nodo de datos

  • aclVersion = 0 //Número de versión de ACL

  • ephemeralOwner = 0x0 //seddionID de la sesión que creó este nodo. Si el nodo es un nodo persistente, el valor de este atributo es 0.

  • dataLength = 3 // Longitud del contenido de datos

  • numChildren = 2 //Número de nodos secundarios

(4) Eliminar nodo

delete /test/local0000000001
deleteall /test
ls

eliminar eliminar nodo

(5) Salir del cliente

quit

Los comandos de uso común se enumeran a continuación





























Clasificación Pedido describir
ayudar ayudar Ver ayuda
crear nodo crear crear [-s] [-e] datos de ruta acl Entre ellos, -s o -e especifican las características del nodo, la secuencia o el nodo temporal respectivamente, si no se especifica, significa nodo persistente; acl se usa para el control de permisos
nodo de lectura ls ls camino [reloj]
conseguir obtener ruta [ver]
ls2 ruta ls2 [reloj]
estadística stat path [ver] Obtener la información de estado del nodo
nodo de actualización colocar set path data [version] data es el nuevo contenido que se actualizará, version indica la versión de datos
Eliminar nodo Eliminar borrar ruta [versión]
eliminar todos es un comando de eliminación recursivo
Sincronizar sincronizar 使客户端的Znode视图与Zookeeper同步
ACL getACL/setACL 为Znode获取/设置ACL
配额 setquota 设置子节点个数以及数据长度的配额 setquota –n 4 /zookeeper/node 设置/zookeeper/node 子节点个数最大为4
delquota delquota命令用于删除配额, -n为子节点个数, -b为节点数据长度,如:delquota –n 2
listquota 命令用于显示配额,如listquota /storm
操作历史 history/redo history用于列出最近的命令历史,redo命令用于再次执行某个命令,使用方式为redo cmdid 如 redo 20
会话 connect 连接服务器
close 关闭当前连接,可用connect 再次连接,不会退出客户端
quit 关闭连接并退出连接客户端

2. 集群模式

集群模式这里只做简单介绍,假设有三台服务器node1node2node3

在单机模式的步骤:2)安装ZooKeeper -> (4)修改配置文件

1)修改zoo.cfg文件时,在后面添加如下集群信息:

server.1=node1:2888:3888
server.2=node2:2888:3888
server.3=node3:2888:3888

2)分别在node1node2node3三台服务器的/home/xiaobai/opt/zookeeper/tmp目录中,创建两个文件

touch myid
touch initialize
  • myid: 分别设置node1node2node3三台服务器的文件myid的内容分别为123,比如对服务器node1,它对应的集群id号为1,myid文件的内容即为1

  • initialize: 文件initialize留空即可

注意

  • Si se usa el nombre del servidor en lugar de ip entre servidores, preste atención a modificar el archivo de hosts de cada servidor
  • Al configurar varios servidores, primero puede configurar un determinado servidor, luego usar el comando de copia remota scppara sincronizar y luego ajustar los servidores respectivos, como modificar el archivo myid.

3. Excepciones comunes y soluciones

1. El puerto está ocupado

Mensaje de error: la dirección ya está en uso

Solución:

  • Por un lado, puede optar por detener el proceso que actualmente está ocupando el puerto y usar el comando netstat -nltpen combinación con el comando greppara consultar

  • Por otro lado, puedes modificar zoo.cfg y cambiar el número de puerto

2. No hay suficiente espacio en disco

Mensaje de error: No queda espacio en el dispositivo

Solución: borrar el disco o disco

3. No se puede encontrar el archivo myid

Mensaje de error: falta el archivo myid

Solución: dataDirCree un archivo myid en el directorio correspondiente y configure el contenido correcto (la identificación correspondiente al servidor)

4. El puerto de elección líder de otras máquinas en el clúster no está abierto

Mensaje de error: No se puede abrir el canal 2 en la dirección electoral /122.228.242.21:3888

Solución:

  • Verifique si el firewall de cada servidor está cerrado, use el comandosudo ufw status

  • Verifique si el contenido en cada servidor /etc/hostses consistente y si las IP de todos los nodos están configuradas

  • Verifique que la hora de cada servidor sea consistente

  • Modifique el zoo.cfg de cada servidor y modifique el host correspondiente a su propia información de clúster en cada servidor para0.0.0.0

    Por ejemplo, para el servidor node1 en el ejemplo, modifique la información del clúster de su zoo.cfg a

    server.1=0.0.0.0:2888:3888
    server.2=node2:2888:3888
    server.3=node3:2888:3888
    

5. La solución más directa y eficiente es analizar los archivos de registro

Supongo que te gusta

Origin blog.csdn.net/tangyi2008/article/details/121984758
Recomendado
Clasificación