Cómo instalar Apache ZooKeeper en Debian 10

Apache Zookeeper es un servicio gratuito y de código abierto para sistemas distribuidos que te ayuda a gestionar un gran conjunto de hosts. Es un servicio centralizado que se utiliza para mantener la información de configuración, los nombres y los servicios de grupo. Está escrito en Java y permite a los desarrolladores centrarse en la creación de funciones de software sin preocuparse por la naturaleza distribuida de la aplicación. Apache ZooKeeper se utiliza sobre todo en cargas de trabajo de «lectura dominante», en las que las lecturas son mucho más frecuentes que las escrituras. Viene con un rico conjunto de características que incluyen, Sincronización, Mensajes Ordenados, Serialización, Fiabilidad, Atomicidad, Procesamiento Rápido y muchas más. Tiene un mecanismo de bloqueo y sincronización que te ayuda en la recuperación automática de fallos al conectar otras aplicaciones distribuidas. El proyecto Zookeeper es uno de los más exitosos de la fundación Apache. Muchas empresas adoptaron Zookeeper para crear sistemas distribuidos de alta disponibilidad a gran escala.

En este tutorial, te mostraremos cómo configurar un clúster de Apache Zookeeper de un solo nodo en un servidor Debian 10.

Requisitos previos

  • Un servidor que ejecute Debian 10 con 2 GB de RAM.
  • Una contraseña de root configurada en tu servidor.

Cómo empezar

Antes de empezar, se recomienda actualizar tu servidor con la última versión. Puedes actualizarlo mediante el siguiente comando:

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

Una vez actualizado tu servidor, reinícialo para aplicar los cambios.

Instalar Java

Apache Zookeeper está escrito en lenguaje Java. Por tanto, necesitarás instalar Java en tu sistema. Por defecto, la última versión de Java está disponible en el repositorio por defecto de Debian 10. Puedes instalarla ejecutando el siguiente comando:

apt-get install default-jdk -y

Después de instalar Java, verifica la versión instalada de Java con el siguiente comando:

java --version

Deberías obtener la siguiente salida:

openjdk 11.0.5 2019-10-15
OpenJDK Runtime Environment (build 11.0.5+10-post-Debian-1deb10u1)
OpenJDK 64-Bit Server VM (build 11.0.5+10-post-Debian-1deb10u1, mixed mode, sharing)

Una vez que hayas terminado, puedes proceder a crear un usuario del sistema para Zookeeper.

Crear un usuario de sistema para Zookeeper

Es una buena idea crear un usuario dedicado para ejecutar el servicio Zookeeper. Esto mejorará su seguridad y capacidad de gestión.

En primer lugar, ejecuta el siguiente comando para crear un usuario zookeeper con directorio raíz:

useradd zookeeper -m

A continuación, establece el shell por defecto para el usuario zookeeper mediante el siguiente comando:

usermod --shell /bin/bash zookeeper

A continuación, establece una contraseña para el usuario zookeeper utilizando el siguiente comando:

passwd zookeeper

A continuación, añade el usuario zookeeper al grupo sudo:

usermod -aG sudo zookeeper

En este punto, has creado y configurado el usuario zookeeper. Ahora puedes proceder a descargar Zookeeper.

Descargar Zookeeper

En primer lugar, tendrás que descargar la última versión de Apache Zookeeper desde su sitio web oficial. En el momento de escribir este artículo, la última versión de Apache Zookeeper es la 3.5.6.

Para descargarla, cambia el directorio a /opt y ejecuta el siguiente comando:

cd /opt
wget https://archive.apache.org/dist/zookeeper/stable/apache-zookeeper-3.5.6-bin.tar.gz

Una vez completada la descarga, extrae el archivo descargado con el siguiente comando:

tar -xvzf apache-zookeeper-3.5.6-bin.tar.gz

A continuación, cambia el nombre del directorio extraído a zookeeper y dale los permisos adecuados:

mv apache-zookeeper-3.5.6-bin zookeeper
chown -R zookeeper:zookeeper /opt/zookeeper

A continuación, tendrás que crear un directorio de datos para que Zookeeper almacene todos los datos de configuración y estado. Puedes crearlo en el sistema de archivos local o en el sistema de archivos remoto, según tus necesidades.

Puedes crear un directorio de datos utilizando el siguiente comando:

mkdir -p /data/zookeeper

A continuación, cambia la propiedad del directorio de datos al usuario zookeeper:

chown -R zookeeper:zookeeper /data/zookeeper

En este punto, has descargado Zookeeper y has creado un directorio de datos para él. Ahora puedes proceder a configurar Zookeeper.

Configurar Zookeeper

Todos los archivos de configuración de Zookeeper se encuentran dentro del directorio /opt/zookeeper/conf/. Puedes crear un archivo de configuración de Zookeeper dentro del directorio /opt/zookeeper/conf/ utilizando 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.

Donde:

  • tickTime: Esta opción establece la duración de un tick en milisegundos.
  • dataDir: Especifica el directorio de datos para almacenar los datos de Zookeeper.
  • clientPort: Especifica el puerto utilizado para escuchar las conexiones de los clientes.
  • maxClientCnxns: Sirve para limitar el número máximo de conexiones de clientes.

Nota: Los parámetros anteriores son para desarrollo y pruebas. Puedes modificarlos según tus necesidades.

Llegados a este punto, has configurado Zookeeper. Ahora puedes iniciar el servidor Zookeeper.

Iniciar y probar el servidor Zookeeper

Puedes iniciar el servidor Zookeeper con el siguiente comando:

/opt/zookeeper/bin/zkServer.sh start

Deberías obtener la siguiente salida:

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

A continuación, puedes conectarte al servidor Zookeeper en el puerto 2181 utilizando el siguiente comando:

/opt/zookeeper/bin/zkCli.sh -server 127.0.0.1:2181

Una vez conectado, deberías ver la siguiente salida:

[zk: 127.0.0.1:2181(CONNECTED) 0]

A continuación, ejecuta el comando help para obtener una lista de comandos que puedes ejecutar desde el cliente.

[zk: 127.0.0.1:2181(CONNECTED) 0] help

Deberías ver la siguiente salida:

ZooKeeper -server host:port cmd args
	addauth scheme auth
	close 
	config [-c] [-w] [-s]
	connect host:port
	create [-s] [-e] [-c] [-t ttl] path [data] [acl]
	delete [-v version] path
	deleteall path
	delquota [-n|-b] path
	get [-s] [-w] path
	getAcl [-s] path
	history 
	listquota path
	ls [-s] [-w] [-R] path
	ls2 path [watch]
	printwatches on|off
	quit 
	reconfig [-s] [-v version] [[-file path] | [-members serverID=host:port1:port2;port3[,...]*]] | [-add serverId=host:port1:port2;port3[,...]]* [-remove serverId[,...]*]
	redo cmdno
	removewatches path [-c|-d|-a] [-l]
	rmr path
	set [-s] [-v version] path data
	setAcl [-s] [-v version] [-R] path acl
	setquota -n|-b val path
	stat [-w] path
	sync path

Después de probar, sal de la sesión del cliente utilizando el comando quit:

[zk: 127.0.0.1:2181(CONNECTED) 0] quit

Ahora puedes detener el servicio Zookeeper con el siguiente comando:

/opt/zookeeper/bin/zkServer.sh stop

Deberías ver el siguiente comando:

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

En este punto, has iniciado y probado con éxito el servidor Zookeeper.

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 mediante systemd.

Puedes crearlo 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 con el siguiente comando

systemctl daemon-reload

A continuación, inicia el servicio Zookeeper y permite que se inicie tras el reinicio del sistema con el siguiente comando:

systemctl start zookeeper
systemctl enable zookeeper

Ahora puedes verificar el estado de 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 Sun 2019-12-29 15:12:39 UTC; 8min ago
     Docs: http://zookeeper.apache.org
  Process: 9229 ExecStart=/opt/zookeeper/bin/zkServer.sh start /opt/zookeeper/conf/zoo.cfg (code=exited, status=0/SUCCESS)
 Main PID: 9245 (java)
    Tasks: 29 (limit: 2359)
   Memory: 49.7M
   CGroup: /system.slice/zookeeper.service
           ??9245 java -Dzookeeper.log.dir=/opt/zookeeper/bin/../logs -Dzookeeper.log.file=zookeeper-zookeeper-server-debian10.log -Dzookeeper.

Dec 29 15:12:38 debian10 systemd[1]: Starting Zookeeper Daemon...
Dec 29 15:12:38 debian10 zkServer.sh[9229]: /usr/bin/java
Dec 29 15:12:38 debian10 zkServer.sh[9229]: ZooKeeper JMX enabled by default
Dec 29 15:12:38 debian10 zkServer.sh[9229]: Using config: /opt/zookeeper/conf/zoo.cfg
Dec 29 15:12:39 debian10 zkServer.sh[9229]: Starting zookeeper ... STARTED
Dec 29 15:12:39 debian10 systemd[1]: Started Zookeeper Daemon.

Ahora puedes gestionar fácilmente el servicio Zookeeper con systemd.

Conclusión

Enhorabuena! has instalado y configurado con éxito un clúster de un solo nodo de Zookeeper en un servidor Debian 10. Esta configuración es muy útil para entornos de desarrollo y pruebas. Espero que ahora tengas suficientes conocimientos para configurar un clúster de un solo nodo de Zookeeper. No dudes en preguntarme si tienes alguna duda.

Scroll al inicio