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

Podman en Debian 11: instalación y uso
DevOps

Podman en Debian 11: instalación y uso

Apt-pinning en Debian: guía práctica
Sistemas

Apt-pinning en Debian: guía práctica

OptiScaler: inyectar FSR 4 en casi cualquier juego
Guía técnica

OptiScaler: inyectar FSR 4 en casi cualquier juego

Dansguardian + Squid NTLM en Debian Etch
Redes

Dansguardian + Squid NTLM en Debian Etch

Arreglar error de instalación Android en SD
Android

Arreglar error de instalación Android en SD

Conectar carpetas de red con KNetAttach
Redes

Conectar carpetas de red con KNetAttach