Guía de tecnologías

Cómo instalar y configurar un clúster ZooKeeper de un solo nodo en Ubuntu 18.04

6 min read DevOps Actualizado 18 Oct 2025
Instalar ZooKeeper en Ubuntu 18.04
Instalar ZooKeeper en Ubuntu 18.04

Instalación y configuración de ZooKeeper en Ubuntu

Introducción breve

Apache ZooKeeper es un servicio centralizado de código abierto para gestionar información de configuración, nombrado, sincronización distribuida y servicios de grupo. Está escrito en Java y ofrece alta disponibilidad mediante servicios redundantes. ZooKeeper usa un espacio de nombres jerárquico de nodos (Znodes) para coordinar procesos distribuidos y está diseñado para almacenar estados, configuraciones e información de localización con baja latencia y control de acceso.

Importante: esta guía instala un clúster de un solo nodo para pruebas y desarrollo. Para producción, use un clúster multinodo con al menos tres nodos.

Variantes de búsqueda (intención principal y sinónimos)

  • Instalar ZooKeeper en Ubuntu 18.04
  • Configurar ZooKeeper single-node
  • ZooKeeper tutorial Ubuntu
  • ZooKeeper systemd service
  • ZooKeeper Java instalación

Requisitos

  • Un servidor con Ubuntu 18.04.
  • Contraseña de root configurada (o acceso sudo desde un usuario con privilegios).
  • Conexión a Internet para descargar paquetes y archivos.

1. Actualizar el sistema

Actualiza la lista de paquetes y aplica actualizaciones:

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

Reinicia el servidor si el kernel u otros componentes críticos se han actualizado.

2. Instalar Java

ZooKeeper requiere Java. Añade el PPA y instala Oracle Java 11 (método mostrado tal como en el origen):

add-apt-repository ppa:linuxuprising/java
apt-get update -y
apt-get install oracle-java11-set-default

Verifica la versión de Java instalada:

java --version

Salida esperada (ejemplo):

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)

Nota: también puede usar OpenJDK 11 si prefiere paquetes libres: apt-get install openjdk-11-jdk.

3. Crear el usuario ZooKeeper

Crea un usuario sin privilegios para ejecutar el servicio:

useradd zookeeper -m
usermod --shell /bin/bash zookeeper
passwd zookeeper
usermod -aG sudo zookeeper

Esto crea la cuenta, asigna una shell y le añade al grupo sudo si necesita privilegios administrados.

4. Instalar ZooKeeper

Crea el directorio de datos y asigna permisos:

mkdir -p /data/zookeeper
chown -R zookeeper:zookeeper /data/zookeeper

Descarga y extrae la versión de ZooKeeper (ejemplo: 3.4.9 en el archivo original):

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

Nota: revise la página oficial de Apache para obtener la versión más reciente y considere usar versiones LTS o la rama 3.5/3.6+ si su entorno requiere características más modernas.

5. Configurar ZooKeeper

Crea el archivo de configuración principal:

nano /opt/zookeeper/conf/zoo.cfg

Añada las siguientes líneas:

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

Guarde y cierre el archivo. Las claves más relevantes:

  • tickTime: unidad de tiempo (ms) usada para latidos y elecciones.
  • dataDir: ruta donde ZooKeeper almacena su estado.
  • clientPort: puerto por defecto 2181.

Inicie ZooKeeper manualmente para probar:

cd /opt/zookeeper
bin/zkServer.sh start

Salida esperada:

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

Conéctese con el cliente local:

bin/zkCli.sh -server 127.0.0.1:2181

Debería ver el prompt del cliente:

[zk: 127.0.0.1:2181(CONNECTED) 1]

Escriba help para ver comandos útiles (ls, get, create, set, delete, etc.). Salga con quit.

Para detener el servidor manualmente:

bin/zkServer.sh stop

6. Crear un servicio systemd para ZooKeeper

Cree el archivo de unidad systemd:

nano /etc/systemd/system/zookeeper.service

Pegue el contenido siguiente:

[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

Recargue systemd, inicie y habilite el servicio:

systemctl daemon-reload
systemctl start zookeeper
systemctl enable zookeeper
systemctl status zookeeper

Salida esperada (fragmento):

Active: active (running) since ...
Starting Zookeeper Daemon...
Using config: /opt/zookeeper/conf/zoo.cfg
Starting zookeeper ... STARTED

Comprobaciones rápidas y comandos útiles (cheat sheet)

  • Reiniciar servicio: systemctl restart zookeeper
  • Logs (si usa stdout por el script): journalctl -u zookeeper -f
  • Cliente local: /opt/zookeeper/bin/zkCli.sh -server 127.0.0.1:2181
  • Directorio de datos por defecto: /data/zookeeper
  • Puerto cliente por defecto: 2181

Criterios de aceptación (pruebas básicas)

  • El servicio systemd está activo: systemctl is-active zookeeper -> active.
  • zkCli.sh puede conectarse y mostrar prompt conectado.
  • Se puede crear un znode: create /test "hello" y leerlo con get /test.
  • El proceso Java aparece en ps aux | grep zookeeper.

Seguridad y endurecimiento

  • No exponga el puerto 2181 directamente a Internet. Use firewalls (ufw/iptables) y redes privadas.
  • Habilite autenticación SASL/ACLs en entornos de producción para controlar el acceso a Znodes.
  • Use SELinux/AppArmor policies si su distribución las soporta.
  • Aplique permisos de filesystem restrictivos al directorio de datos (chown y chmod apropiados).

Nota: la configuración de seguridad avanzada (SASL, TLS) requiere cambios adicionales en zoo.cfg y en la JVM.

Migración a clúster multinodo (consejos)

  • Para alta disponibilidad en producción, use un conjunto impar de nodos (3, 5, 7).
  • Cada nodo debe tener un myid distinto en dataDir e entries de servidor en zoo.cfg, por ejemplo:
server.1=10.0.0.1:2888:3888
server.2=10.0.0.2:2888:3888
server.3=10.0.0.3:2888:3888
  • Considere replicar la configuración, usar NTP para sincronización horaria y probar fallos simulados antes de pasar a producción.

Alternativas y cuándo no usar ZooKeeper

  • Si necesita un almacenador de configuración simple y local, use etcd o Consul (ambos ofrecen integración con service discovery y KV store con API HTTP).
  • Para casos donde la latencia es crítica y el volumen de escritura es enorme, evalúe sistemas diseñados para escala horizontal específica.
  • ZooKeeper es excelente para coordinación y locking distribuido; no es un sistema de base de datos general para grandes blobs.

Modelos mentales y heurísticas

  • Piensa en ZooKeeper como un directorio jerárquico de configuración y estados (pequeños datos, many reads, few writes).
  • Consistencia fuerte: prioridad a consistencia y disponibilidad para lecturas coordinadas.
  • Mantén los Znodes ligeros; no almacenes grandes blobs.

Playbook de migración de single-node a multinodo (resumen)

  1. Preparar N nodos (N impar ≥ 3) con Java y estructura de directorios.
  2. Copiar misma versión de ZooKeeper a cada nodo.
  3. Configurar zoo.cfg con entradas server.X y dataDir en cada nodo.
  4. Establecer myid en cada dataDir (valor entero único por nodo).
  5. Iniciar simultáneamente los nodos y verificar quorum.
  6. Probar failover borrando un nodo y comprobando continuidad.

Checklist según rol

  • Administrador de sistema: asegurar backups del dataDir, monitoreo, rotación de logs.
  • DevOps: automatizar despliegue (Ansible/Terraform), configurar alertas y SLI basados en latencia/conexiones.
  • Desarrollador: usar cliente ZooKeeper para pruebas, evitar escribir datos grandes en Znodes.

Preguntas frecuentes

Q: ¿Puedo usar OpenJDK en vez de Oracle Java? A: Sí. OpenJDK 11 es una alternativa soportada y más sencilla para repositorios estándar.

Q: ¿Es seguro ejecutar ZooKeeper en un único nodo en producción? A: No. Un único nodo es un punto único de fallo; para producción use un clúster de al menos tres nodos.

Resumen final

Has instalado y verificado un ZooKeeper de un solo nodo en Ubuntu 18.04. Esto es útil para pruebas y desarrollo; para producción planifica un clúster multinodo, activa medidas de seguridad (firewall, ACLs/SASL/TLS) y añade monitoreo y backups.

Cierre: Si quieres, te puedo generar un playbook de Ansible para automatizar toda la instalación, o una versión adaptada a Docker/Kubernetes.

Glosario (una línea): Znode: unidad de datos en el espacio de nombres jerárquico de ZooKeeper, diseñada para almacenar pequeños estados o configuraciones.

Autor
Edición

Materiales similares

Easter eggs del Estadio en Warzone: guía completa
Videojuegos

Easter eggs del Estadio en Warzone: guía completa

Configurar WiKID con OpenVPN AS
VPN

Configurar WiKID con OpenVPN AS

Matriz de trazabilidad: guía completa
QA

Matriz de trazabilidad: guía completa

Cómo configurar y aprovechar monitores múltiples
Monitores

Cómo configurar y aprovechar monitores múltiples

Instalar OpenLiteSpeed, MariaDB y PHP 7.4 en CentOS 8
Servidores

Instalar OpenLiteSpeed, MariaDB y PHP 7.4 en CentOS 8

Controlar consumo de datos 3G/4G en Windows 10
Redes

Controlar consumo de datos 3G/4G en Windows 10