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.