Serie ZooKeeper: Instalación de clúster y sesiones

Instalación de clúster

Antes de instalar zookeeper, primero debe instalar el entorno Java.

Este artículo ZooKeeper versión: 3.8.0

Descargar y descomprimir

Antes de comenzar, debe descargar el paquete de instalación y encontrar la versión correspondiente de ZooKeeper en el sitio web oficial zookeeper.apache.org/releases.ht… . Lo que descargué aquí es el paquete comprimido compilado de la versión 3.8 apache-zookeeper-3.8.0-bin.tar.gz (un paquete se puede usar en varias plataformas), si es en Linux, Mac OS u otros sistemas similares a Unix. se puede descomprimir directamente con el comando:

tar  -zxvf  apache-zookeeper-3.8.0-bin.tar.gz

Si es Windows, puede usar una herramienta de descompresión de terceros para procesarlo, como se muestra a continuación después de la descompresión

zk-descomprimir

El directorio bin anterior contiene la secuencia de comandos de inicio de ZooKeeper, .shla secuencia de comandos que termina con la secuencia de comandos se ejecuta en plataformas UNIX (Linux, Mac OS, etc.) y .cmdla secuencia de comandos que termina con esta se ejecuta en Windows. Los archivos de configuración relevantes se guardan en el directorio conf, entre los cuales zoo_sample.cfg es la plantilla de configuración oficial.Estos dos directorios son los más utilizados.

Modificar el archivo de configuración

Copie y cambie el nombre del archivo de configuración zoo_sample.cfg en el directorio conf a zoo.cfg (se carga el archivo de configuración con este nombre)

  1. Modificar la ubicación donde se almacenan las instantáneas y los registros de zkdataDir
  2. Agregue la información de todos los nodos en la parte inferior de zoo.cfg, de la siguiente manera
# server.id = ip:port:port
server.1=xxx:2888:3888
server.2=xxx:2888:3888
server.3=xxx:2888:3888
....... # 所有节点

Cada línea representa un nodo, y el significado de cada uno es el siguiente.

  • servidor: marque cada nodo, y el número de serie en él puede seleccionar rápidamente el líder (correspondiente al archivo myid creado)
  • xxx: IP de cada servidor de nodo de ZooKeeper (pista: puede usar el comando ifconfig para ver la dirección IP ).
  • 3888: Cuando el primer inicio o el líder cuelgan, se establece una conexión entre cada nodo a través de este puerto y el líder es elegido por votación.
  • 2888: 有leader之后,leader节点会启动2888端口,其他follower节点通过这个端口和leader建立连接,完成后续的命令,任务等。
  1. 客户端连接端口默认clientPort=2181,根据情况调整
  2. 在dataDir文件下创建对应myid文件,内容是数字序号与前面的server.1,server.2,server.3 .....中的数字对应

在一台机器上修改了完成,然后把这个ZooKeeper文件复制到各个机器上,修改对应的配置即可

因为我就一台电脑,总共弄了3节点,具体每个节点的配置如下

zk-group-path

zk-group-conf

启动

依次在三个bin目录下命令./zkServer.sh start 启动或者使用./zkServer.sh start-foreground 控制台输出的方式启动ZooKeeper( 启动期间会出现错误信息,是正常的,因为其他连接的节点还没有启动,暂时连接不上)

zk-inicio

如上三台启动成功,leader代表主节点,follower代表从节点,一主二从。

在另一个命令工具上使用./zhCli.sh 客户端连接ZooKeeper,开启新的session会话

cliente zk

可以看到客户端的一些操作命令

zk-cliente-cmd

session会话

客户端在对Zookeeper集群执行任何请求前,都需要先与集群中的服务间里连接,这个连接就是session会话。客户端通过某一个特定的语言套件来创建一个ZooKeeper句柄时,它就会通过服务建立一个会话。客户端初始连接到集群中的某一个服务器或者一个独立的服务器。客户端通过TCP协议与服务器进行连接通信,使用的端口默认是2181,当然这个端口可以在zoo.cfg中修改的,配置如下图

zk-sesión-puerto

而且会话提供了顺序保障,也就是同一个会话的请求会以FIFO(先进先出)的顺序执行,前提是要保证一个客户端只打开一个会话。如果客户端有多个并发会话,不一定能够保持顺序了。

会话的创建

sessionID: 会话ID,用来唯一标识一个会话,每次客户端创建的时候,ZooKeeper都会为其分配一个全局唯一的sessionID。

Timeout: 会话超时时间,客户端在构造ZooKeeper实例时候,向服务端发送配置的超时时间,server端会根据自己的超时时间限制最终确认会话的超时时间。

TickTime: 下次会话超时时间点,默认2000毫秒,可以在配置文件zoo.cfg中修改,

isClosing: 标记一个会话是否已经关闭,当sever端检测到会话已经超时失效,改会话标记为已关闭,不再处理新的请求。

创建过程如下
  1. 客户端启动程序建立一个会话。
  2. 客户端尝试连接到localhost/127.0.0.1:2181.
  3. 客户端连接成功,服务器开始初始化这个新的会话。
  4. 会话初始化成功。
  5. 服务端向客户端发送一个SyncConnected事件

zk-sesión-crear

如上客户端连接的日志,可以看到这个客户端当前的session id以及客户端使用SyncConnected事件通知应用的相关操作。

会话的状态与生命周期

会话的生命周期是指会话从创建到结束的时期(正常关闭或者超时导致过期),

会话的主要状态是:

  • CONNECTING:连接中,此状态的时间很短。
  • CONNECTED:已连接。连接成功之后的状态。
  • CLOSED:已关闭,session过期或者服务端宕机或者客户端主动断开的状态。
  • NOT_CONNECTED:未连接,客户端还没有连接之前的状态。

zk-sesión-estado

Una sesión comienza en el estado NOT_CONNECTED y pasa al estado CONNECTING (1) cuando se inicializa el cliente. Normalmente, después de establecer con éxito una conexión con el servidor zk, la sesión pasará al estado CONECTADO (2). Cuando el cliente se desconecta del servidor zk o no recibe una respuesta del servidor, volverá a CONECTAR (3) e intentará descubrir otros servidores zk. Si se encuentra un servidor disponible y se confirma que la sesión es válida, el estado pasará a CONECTADO nuevamente. En caso contrario, la sesión se declarará caducada y el estado pasará a ser CERRADO(4).

hora de término de la sesión

Hay un parámetro de detección de tiempo de espera tickTime al crear una sesión. Si el servicio no recibe ningún mensaje para esta sesión después del tiempo t, el servicio declara que la sesión ha expirado. En el lado del cliente, si no se recibe ningún mensaje después de t/3, el cliente enviará un mensaje de latido (detección de latido) al servidor. Después de 2t/3, el cliente de ZooKeeper comienza a buscar otros servidores, lo que significa que todavía hay t/3 para encontrar la sesión de conexión.

En el modo de clúster, el tiempo de espera de la sesión hará que el cliente se vuelva a conectar. Al volver a conectarse a un nuevo nodo de servidor, existe el requisito de que el estado de ZooKeeper de este nodo se mantenga actualizado con el estado de ZooKeeper del último servidor conectado. ZooKeeper determina si el estado está actualizado solicitando actualizaciones en el servicio. El clúster asigna identificadores de transacción según el orden en que se estableció cada actualización.

Soy el Sr. Ji. Utilizo la salida para forzar la entrada para continuar aprendiendo. Sigo compartiendo artículos de series técnicas, y toda la red vale la pena recopilar buenos artículos. Bienvenido a prestar atención a la cuenta pública y ser una persona técnica. que sigue creciendo.

Supongo que te gusta

Origin juejin.im/post/7121629260149686302
Recomendado
Clasificación