Cómo configurar el clúster Apache ZooKeeper en Ubuntu 18.04 LTS

Zookeeper es un servicio centralizado para gestionar la información de configuración, la asignación de nombres, la sincronización distribuida y el aprovisionamiento de servicios de grupo que se publica como software de código abierto. Está escrito en un lenguaje Java que te permite centrarte en la lógica central de la aplicación sin preocuparte por la naturaleza distribuida de la misma. La arquitectura de ZooKeeper admite una alta disponibilidad mediante servicios redundantes. Zookeeper permite que los procesos distribuidos se coordinen entre sí a través de un espacio de nombres jerárquico común de registros de datos. Zookeeper también ofrece a sus clientes un alto rendimiento, alta disponibilidad, baja latencia y un acceso estrictamente controlado a los Znodes. Zookeeper está diseñado específicamente para almacenar información de estado, configuraciones, información de ubicación y mucho más. ZooKeeper ofrece muchas características como un sistema fiable, una arquitectura sencilla, un procesamiento rápido, escalabilidad y mucho más.

En este tutorial, aprenderemos a configurar un clúster Apache ZooKeeper de un solo nodo en Ubuntu 18.04.

Requisitos

  • Un servidor con Ubuntu 18.04.
  • Una contraseña de root configurada en tu servidor.

Cómo empezar

En primer lugar, tendrás que actualizar tu sistema con la última versión. Puedes hacerlo ejecutando el siguiente comando:

apt-get update -y
apt-get upgrade -y

Una vez actualizado el sistema, reinicia tu sistema para aplicar todos los cambios.

Instalar Java

Zookeeper está escrito en Java. Por tanto, necesitarás instalar Java en tu sistema. Por defecto, la última versión de Java no está disponible en el repositorio por defecto de Ubuntu 18.04. Así que añade el repositorio de Java con el siguiente comando:

add-apt-repository ppa:linuxuprising/java

A continuación, actualiza el repositorio e instala Java con el siguiente comando:

apt-get update -y
apt-get install oracle-java11-set-default

Una vez instalado Java, puedes comprobar la versión de Java con el siguiente comando:

java --version

Deberías ver la siguiente salida:

java 11.0.2 2018-10-16 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.2+7-LTS)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.2+7-LTS, mixed mode)

Una vez que hayas terminado, puedes pasar al siguiente paso.

Crear un usuario de ZooKeeper

A continuación, tendrás que crear un usuario zookeeper para ejecutar el servicio zookeeper.

Primero, crea un usuario zookeeper con el siguiente comando:

useradd zookeeper -m
usermod --shell /bin/bash zookeeper

A continuación, establece una contraseña con el siguiente comando:

passwd zookeeper

A continuación, añade el usuario zookeeper al grupo sudo para que pueda ejecutar comandos en modo privilegiado:

usermod -aG sudo zookeeper

Después de crear el usuario, puedes proceder a instalar ZooKeeper.

Instalar ZooKeeper

ZooKeeper almacena todos los datos de configuración y estado en el disco. Por tanto, tendrás que crear una estructura de directorios para ZooKeeper con el siguiente comando:

mkdir -p /data/zookeeper

A continuación, da la propiedad adecuada al directorio /data con el siguiente comando:

chown -R zookeeper:zookeeper /data/zookeeper

A continuación, cambia el directorio a /opt y descarga la última versión de ZooKeeper con el siguiente comando:

cd /opt
wget https://archive.apache.org/dist/zookeeper/zookeeper-3.4.9/zookeeper-3.4.9.tar.gz

A continuación, extrae el archivo descargado con el siguiente comando:

tar -xvzf zookeeper-3.4.9.tar.gz

A continuación, cambia el nombre del binario extraído con el siguiente comando

mv zookeeper-3.4.9 zookeeper

A continuación, da la propiedad al usuario de ZooKeeper con el siguiente comando

chown -R zookeeper:zookeeper /opt/zookeeper

Configurar ZooKeeper

A continuación, tendrás que crear un archivo de configuración para ZooKeeper. Puedes hacerlo con el siguiente comando

nano /opt/zookeeper/conf/zoo.cfg

Añade las siguientes líneas:

tickTime=2500
dataDir=/data/zookeeper
clientPort=2181
maxClientCnxns=80

Guarda y cierra el archivo, cuando hayas terminado.

A continuación, inicia el servicio ZooKeeper con el siguiente comando:

cd /opt/zookeeper
bin/zkServer.sh start

Deberías ver la siguiente salida:

ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

Puedes conectarte al servidor local de ZooKeeper con el siguiente comando:

bin/zkCli.sh -server 127.0.0.1:2181

Una vez que te hayas conectado con éxito, deberías ver la siguiente salida:

[zk: 127.0.0.1:2181(CONNECTED) 1] 

Ahora, escribe help en el prompt, deberías ver la lista de comandos que puedes ejecutar desde el cliente.

help
ZooKeeper -server host:port cmd args
	stat path [watch]
	set path data [version]
	ls path [watch]
	delquota [-n|-b] path
	ls2 path [watch]
	setAcl path acl
	setquota -n|-b val path
	history 
	redo cmdno
	printwatches on|off
	delete path [version]
	sync path
	listquota path
	rmr path
	get path [watch]
	create [-s] [-e] path data acl
	addauth scheme auth
	quit 
	getAcl path
	close 
	connect host:port

Ahora, escribe quit para salir de la sesión conectada.

Puedes detener el ZooKeeper con el siguiente comando:

bin/zkServer.sh stop

Deberías ver la siguiente salida:

ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Stopping zookeeper ... STOPPED

Crear un archivo de servicio Systemd para ZooKeeper

A continuación, tendrás que crear un archivo de servicio systemd para gestionar el servicio ZooKeeper. Puedes hacerlo con el siguiente comando:

nano /etc/systemd/system/zookeeper.service

Añade las siguientes líneas:

[Unit]
Description=Zookeeper Daemon
Documentation=http://zookeeper.apache.org
Requires=network.target
After=network.target

[Service]    
Type=forking
WorkingDirectory=/opt/zookeeper
User=zookeeper
Group=zookeeper
ExecStart=/opt/zookeeper/bin/zkServer.sh start /opt/zookeeper/conf/zoo.cfg
ExecStop=/opt/zookeeper/bin/zkServer.sh stop /opt/zookeeper/conf/zoo.cfg
ExecReload=/opt/zookeeper/bin/zkServer.sh restart /opt/zookeeper/conf/zoo.cfg
TimeoutSec=30
Restart=on-failure

[Install]
WantedBy=default.target

Guarda y cierra el archivo, cuando hayas terminado.

A continuación, recarga el demonio systemd, inicia el servicio ZooKeeper y habilítalo para que se inicie en el arranque con el siguiente comando:

systemctl daemon-reload
systemctl start zookeeper
systemctl enable zookeeper

Puedes comprobar el estado del servicio ZooKeeper con el siguiente comando:

systemctl status zookeeper

Deberías ver la siguiente salida:

? zookeeper.service - Zookeeper Daemon
   Loaded: loaded (/etc/systemd/system/zookeeper.service; disabled; vendor preset: enabled)
   Active: active (running) since Wed 2019-03-06 15:03:01 UTC; 5s ago
     Docs: http://zookeeper.apache.org
  Process: 3909 ExecStart=/opt/zookeeper/bin/zkServer.sh start /opt/zookeeper/conf/zoo.cfg (code=exited, status=0/SUCCESS)
 Main PID: 3926 (java)
    Tasks: 17 (limit: 1113)
   CGroup: /system.slice/zookeeper.service
           ??3926 java -Dzookeeper.log.dir=. -Dzookeeper.root.logger=INFO,CONSOLE -cp /opt/zookeeper/bin/../build/classes:/opt/zookeeper/bin/..

Mar 06 15:03:00 ubuntu1804 systemd[1]: Starting Zookeeper Daemon...
Mar 06 15:03:00 ubuntu1804 zkServer.sh[3909]: ZooKeeper JMX enabled by default
Mar 06 15:03:00 ubuntu1804 zkServer.sh[3909]: Using config: /opt/zookeeper/conf/zoo.cfg
Mar 06 15:03:01 ubuntu1804 zkServer.sh[3909]: Starting zookeeper ... STARTED
Mar 06 15:03:01 ubuntu1804 systemd[1]: Started Zookeeper Daemon.

Enhorabuena! has instalado y configurado con éxito el clúster de un solo nodo de ZooKeeper en el servidor Ubuntu 18.04. Ahora puedes desplegar un clúster de varios nodos de ZooKeeper para la producción. No dudes en preguntarme si tienes alguna duda.

También te podría gustar...