- Descarga y Descompresión
Primero, descarga la distribución de ZooKeeper y extráela en el directorio deseado. Por ejemplo:
tar -xzf zookeeper-3.4.5-cdh5.6.0.tar.gz -C /ruta/a/tu/directorio
- Configuración de Variabels de Entorno
Añade las variables de entorno para ZooKeeper a tu archivo ~/.bashrc o /etc/profile.
`[hadoopuser@Linux01 ~]$ vi ~/.bashrc# ZooKeeper configurationexport ZOOKEEPER_HOME=/home/hadoopuser/zookeeper-3.4.5-cdh5.6.0export PATH=$PATH:$ZOOKEEPER_HOME/bin[hadoopuser@Linux01 ~]$ source ~/.bashrc # Para aplicar los cambios`
- Ajuste de la Ubicación de los Logs
Modifica el script zkEnv.sh para especificar la ruta del directorio de logs.
`[hadoopuser@Linux01 ~]$ vi $ZOOKEEPER_HOME/libexec/zkEnv.sh# En la línea ~56, modifica la siguiente sentencia:ZOO_LOG_DIR="$ZOOKEEPER_HOME/logs"`
Nota: En versiones no CDH de ZooKeeper 3.4.8, la ruta del script podría ser bin/zkEnv.sh.
- Cnofiguración del Archivo Principal (zoo.cfg)
Edita el archivo zoo.cfg para definir los parámetros del clúster.
`[hadoopuser@Linux01 ~]$ vi $ZOOKEEPER_HOME/conf/zoo.cfg# ZooKeeper core settingstickTime=2000initLimit=10syncLimit=5dataDir=/home/hadoopuser/zookeeper-3.4.5-cdh5.6.0/dataclientPort=2181# Cluster configurationserver.1=node1.example.com:2888:3888server.2=node2.example.com:2888:3888server.3=node3.example.com:2888:3888`
Reemplaza nodeX.example.com con los nombres de host o IPs de tus nodos ZooKeeper.
- Creación del Archivo myid
En cada nodo del clúster, crea el directorio de datos y el archivo myid con un identificador único para cada servidor.
- Nodo 1: ```
mkdir $ZOOKEEPER_HOME/data
echo 1 > $ZOOKEEPER_HOME/data/myid
- Nodo 2: ```
mkdir $ZOOKEEPER_HOME/data
echo 2 > $ZOOKEEPER_HOME/data/myid
- Nodo 3: ```
mkdir $ZOOKEEPER_HOME/data
echo 3 > $ZOOKEEPER_HOME/data/myid
- Inicio de los Nodos del Clúster
Inicia el servicio ZooKeeper en cada nodo utilizando el script proporcionado.
`[hadoopuser@Linux01 ~]$ zkServer.sh start`
- Verificación del Proceso ZooKeeper
Utiliza el comando jps para confirmar que el proceso QuorumPeerMain está en ejecución en cada nodo.
`[hadoopuser@Linux01 ~]$ jps3051 Jps2829 QuorumPeerMain`
- Comprobación del Estado del Servicio
Verifica el rol (leader, follower) de cada servidor en el clúster.
`[hadoopuser@Linux01 ~]$ zkServer.sh statusJMX enabled by defaultUsing config: /home/zero/zookeeper/zookeeper-3.4.5-cdh5.0.1/bin/../conf/zoo.cfgMode: follower`
- Descripción de los Parámetros de zoo.cfg
| Parámetro | Descripción |
|---|---|
tickTime |
Unidad de tiempo base para ZooKeeper. Se utiliza para latidos y timeouts de sesión. El timeout mínimo de sesión es 2 * tickTime. |
dataDir |
Directorio donde ZooKeeper almacena instantáneas de la memoria y el log de transacciones. |
clientPort |
Puerto en el que ZooKeeper escucha las conexiones de los clientes. |
initLimit |
Número máximo de tickTime que un follower puede esperar para conectarse y sincronizarse con el leader. Si se excede, la conexión se considera fallida. |
syncLimit |
Número máximo de tickTime que un follower puede tardar en enviar una solicitud al leader y recibir una respuesta. Ayuda a detectar problemas de latencia en la comunicación. |
server.A=B:C:D |
Define los servidores del clúster. - A: Identificador numérico del servidor (coincide con el valor en myid). - B: Dirección IP o nombre de host del servidor. - C: Puerto para la comunicación entre followers y el leader. - D: Puerto utilizado para la reelección del leader en caso de falo. En configuraciones de pseudo-clúster, este puerto debe ser único para cada instancia. |
- Comandos Comunes de ZooKeeper
- Iniciar servicio ZK:
bin/zkServer.sh start - Ver estado del servicio ZK:
bin/zkServer.sh status - Detener servicio ZK:
bin/zkServer.sh stop - Reiniciar servicio ZK:
bin/zkServer.sh restart - Conectar al servidor:
zkCli.sh -server 127.0.0.1:2181 - Listar nodos raíz:
ls / - Crear nodo:
create /ruta/nodo "valor"(Ej:create /zk/testnode "zz") - Obtener contenido de nodo:
get /ruta/nodo(Ej:get /zk/testnode) - Establecer contenido de nodo:
set /ruta/nodo "nuevo_valor"(Ej:set /zk/testnode abc) - Eliminar nodo:
delete /ruta/nodo(Ej:delete /zk/testnode)