Cómo instalar Apache ZooKeeper en Debian 10

Cómo instalar Apache ZooKeeper en Debian 10

Apache Zookeeper es un servicio gratuito y de código abierto para sistemas distribuidos que lo ayuda a administrar un gran conjunto de hosts. Es un servicio centralizado utilizado para mantener información de configuración, nombres y servicios de grupo. Está escrito en Java y permite a los desarrolladores concentrarse en crear funciones de software sin preocuparse por la naturaleza distribuida de la aplicación. Apache ZooKeeper se usa más comúnmente en cargas de trabajo «dominantes de lectura» donde las lecturas son mucho más comunes que las escrituras. Viene con un amplio conjunto de características que incluyen sincronización, mensajes ordenados, serialización, confiabilidad, atomicidad, procesamiento rápido y muchas más. Tiene un mecanismo de bloqueo y sincronización que lo ayuda en la recuperación automática de fallas mientras conecta otras aplicaciones distribuidas. El proyecto Zookeeper es uno de los proyectos 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, le mostraremos cómo configurar un clúster Apache Zookeeper de un solo nodo en el servidor Debian 10.

requisitos previos

  • Un servidor que ejecuta Debian 10 con 2 GB de RAM.
  • Una contraseña de root está configurada en su servidor.

Empezando

Antes de comenzar, se recomienda actualizar su servidor con la última versión. Puedes actualizarlo usando el siguiente comando:

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

Una vez que su servidor esté actualizado, reinícielo para implementar los cambios.

Instalar Java

Apache Zookeeper está escrito en lenguaje Java. Por lo tanto, deberá instalar Java en su sistema. De forma predeterminada, la última versión de Java está disponible en el repositorio predeterminado de Debian 10. Puede instalarlo ejecutando el siguiente comando:

apt-get install default-jdk -y

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

java --version

Deberías obtener el siguiente resultado:

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 haya terminado, puede proceder a crear un usuario del sistema para Zookeeper.

Crear un usuario del sistema para Zookeeper

Es una buena idea crear un usuario dedicado para ejecutar el servicio Zookeeper. Esto mejorará su seguridad y manejabilidad.

Primero, ejecute el siguiente comando para crear un usuario de zookeeper con el directorio de inicio:

useradd zookeeper -m

A continuación, configure el shell predeterminado para el usuario del cuidador del zoológico con el siguiente comando:

usermod --shell /bin/bash zookeeper

A continuación, establezca una contraseña para el usuario del cuidador del zoológico con el siguiente comando:

passwd zookeeper

A continuación, agregue el usuario zookeeper al grupo sudo:

usermod -aG sudo zookeeper

En este punto, ha creado y configurado el usuario de Zookeeper. Ahora puede proceder a descargar Zookeeper.

Descargar Zookeeper

Primero, deberá descargar la última versión de Apache Zookeeper desde su sitio web oficial. Al momento de escribir este artículo, la última versión de Apache Zookeeper es la 3.5.6.

Para descargarlo, cambie el directorio a /opt y ejecute el siguiente comando:

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

Una vez que se complete la descarga, extraiga el archivo descargado con el siguiente comando:

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

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

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

A continuación, deberá crear un directorio de datos para que Zookeeper almacene todos los datos de configuración y estado. Puede crear en el sistema de archivos local o en el sistema de archivos remoto según sus necesidades.

Puede crear un directorio de datos usando el siguiente comando:

mkdir -p /data/zookeeper

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

chown -R zookeeper:zookeeper /data/zookeeper

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

Configurar Zookeeper

Todos los archivos de configuración de Zookeeper se encuentran dentro del directorio /opt/zookeeper/conf/. Puede crear un archivo de configuración de Zookeeper dentro del directorio /opt/zookeeper/conf/ usando el siguiente comando:

nano /opt/zookeeper/conf/zoo.cfg

Agregue las siguientes líneas:

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

Guarde y cierre el archivo cuando haya terminado.

Dónde:

  • marcaTiempo : esta opción establece la duración de un tick en milisegundos.
  • dirección de datos : especifique el directorio de datos para almacenar los datos de Zookeeper.
  • puertocliente : especifique el puerto utilizado para escuchar las conexiones de los clientes.
  • maxClientCnxns : Se utiliza para limitar el número máximo de conexiones de clientes.

Nota : Los parámetros anteriores son para desarrollo y prueba. Puedes cambiarlos según tu necesidad.

En este punto, ha configurado Zookeeper. Ahora puede estar listo para iniciar el servidor Zookeeper.

Iniciar y probar el servidor Zookeeper

Puede iniciar el servidor Zookeeper con el siguiente comando:

/opt/zookeeper/bin/zkServer.sh start

Deberías obtener el siguiente resultado:

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

A continuación, puede conectarse al servidor de Zookeeper en el puerto 2181 con el siguiente comando:

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

Una vez conectado, debería ver el siguiente resultado:

[zk: 127.0.0.1:2181(CONNECTED) 0]

A continuación, ejecute el comando de ayuda para obtener una lista de comandos que puede ejecutar desde el cliente.

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

Debería ver el siguiente resultado:

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 la prueba, salga de la sesión del cliente usando el comando quit:

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

Ahora puede 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, ha iniciado y probado con éxito el servidor Zookeeper.

Crear un archivo de servicio de Systemd para Zookeeper

A continuación, deberá crear un archivo de servicio systemd para administrar el servicio Zookeeper mediante systemd.

Puedes crearlo con el siguiente comando:

nano /etc/systemd/system/zookeeper.service

Agregue 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

Guarde y cierre el archivo cuando haya terminado. Luego, vuelva a cargar el demonio systemd con el siguiente comando:

systemctl daemon-reload

A continuación, inicie el servicio Zookeeper y habilítelo para que se inicie después de reiniciar el sistema con el siguiente comando:

systemctl start zookeeper
systemctl enable zookeeper

Ahora puede verificar el estado de Zookeeper con el siguiente comando:

systemctl status zookeeper

Debería ver el siguiente resultado:

? 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, puede administrar fácilmente el servicio Zookeeper con systemd.

Conclusión

¡Felicidades! Ha instalado y configurado correctamente un clúster de Zookeeper de un solo nodo en el servidor Debian 10. Esta configuración es muy útil para entornos de desarrollo y pruebas. Espero que ahora tenga suficiente conocimiento para configurar un clúster de Zookeeper de un solo nodo. No dude en preguntarme si tiene alguna pregunta.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *