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.