Los conjuntos de ZooKeeper están diseñados para seguir funcionando, sin pérdida de datos, a pesar de la pérdida de uno o más nodos de ZooKeeper. Esta resiliencia se puede usar de manera eficaz para realizar tareas de mantenimiento en los nodos de ZooKeeper sin tiempo de inactividad del sistema.
Acerca de ZooKeeper y Edge
En Edge, los nodos de ZooKeeper contienen datos de configuración sobre la ubicación y la configuración de los diversos componentes de Edge, y notifican a los diferentes componentes de los cambios de configuración. Todas las topologías de Edge compatibles para un sistema de producción usan al menos tres nodos de ZooKeeper.
Usa las propiedades ZK_HOSTS y ZK_CLIENT_HOSTS en el archivo de configuración de Edge para especificar los nodos de ZooKeeper. Por ejemplo:
ZK_HOSTS="$IP1 $IP2 $IP3" ZK_CLIENT_HOSTS="$IP1 $IP2 $IP3"
Donde:
ZK_HOSTSespecifica las direcciones IP de los nodos de ZooKeeper. Las direcciones IP deben aparecer en el mismo orden en todos los nodos de ZooKeeper.En un entorno de varios centros de datos, enumera todos los nodos de ZooKeeper de todos los centros de datos.
ZK_CLIENT_HOSTSespecifica las direcciones IP de los nodos de ZooKeeper que solo usa este centro de datos. Las direcciones IP deben aparecer en el mismo orden en todos los nodos de ZooKeeper del centro de datos.En una instalación de un solo centro de datos, estos son los mismos nodos que especifica ZK_HOSTS. En un entorno de varios centros de datos, el archivo de configuración de Edge para cada centro de datos debe incluir solo los nodos de ZooKeeper para ese centro de datos.
De forma predeterminada, todos los nodos de ZooKeeper se designan como nodos votantes. Esto significa que todos los nodos
participan en la elección del líder de ZooKeeper. Puedes incluir el
modificador :observer con ZK_HOSTS para indicar que
el nodo es un nodo observador y no un votante. Un nodo observador no participa en
la elección del líder.
Por lo general, especificas el modificador :observer cuando creas varios centros de datos de Edge o cuando un solo centro de datos tiene una gran cantidad de nodos de ZooKeeper. Por ejemplo, en una
instalación de Edge de 12 hosts con dos centros de datos, ZooKeeper en el nodo 9 del centro de datos 2 es el
observador:

Luego, usa los siguientes parámetros de configuración en tu archivo de configuración para el centro de datos 1:
ZK_HOSTS="$IP1 $IP2 $IP3 $IP7 $IP8 $IP9:observer" ZK_CLIENT_HOSTS="$IP1 $IP2 $IP3"
Y para el centro de datos 2:
ZK_HOSTS="$IP1 $IP2 $IP3 $IP7 $IP8 $IP9:observer" ZK_CLIENT_HOSTS="$IP7 $IP8 $IP9"
En las siguientes secciones, se incluyen más detalles sobre los nodos líderes, votantes y observadores, y se describen las consideraciones para agregar nodos votantes y observadores.
Acerca de los líderes, seguidores, votantes y observadores
En una instalación de ZooKeeper de varios nodos, uno de los nodos se designa como el líder. Todos los demás nodos de ZooKeeper se designan como seguidores. Si bien las lecturas pueden ocurrir desde cualquier nodo de ZooKeeper, todas las solicitudes de escritura se reenvían al líder. Por ejemplo, se agrega un Message Processor nuevo a Edge. Esa información se escribe en el líder de ZooKeeper. Luego, todos los seguidores replican los datos.
En el momento de la instalación de Edge, designas cada nodo de ZooKeeper como votante o como observador. Luego, todos los nodos de ZooKeeper votantes eligen al líder. El único requisito para la elección de un líder es que debe haber un quórum de nodos votantes de ZooKeeper en funcionamiento disponibles. Un quórum significa que más de la mitad de todos los nodos de ZooKeeper votantes, en todos los centros de datos, son funcionales.
Si no hay un quórum de nodos votantes disponibles, no se puede elegir un líder. En este caso, Zookeeper no puede entregar solicitudes. Esto significa que no puedes realizar una solicitud al servidor de administración de Edge, procesar solicitudes a la API ni acceder a la IU de Edge hasta que se restablezca el quórum.
Por ejemplo, en una instalación de un solo centro de datos, se aplica lo siguiente:
- Instalaste tres nodos de ZooKeeper
- Todos los nodos de ZooKeeper son votantes
- El quórum es de dos nodos votantes en funcionamiento
- Si solo hay un nodo votante disponible, el ensamble de ZooKeeper no puede funcionar
En una instalación con dos centros de datos, haz lo siguiente:
- Instalaste tres nodos de ZooKeeper por centro de datos, lo que da un total de seis nodos.
- El centro de datos 1 tiene tres nodos votantes.
- El centro de datos 2 tiene dos nodos votantes y un nodo observador
- El quórum se basa en los cinco votantes de ambos centros de datos y, por lo tanto, es de tres nodos votantes en funcionamiento.
- Si solo hay dos o menos nodos de votantes disponibles, el conjunto de ZooKeeper no puede funcionar.
Consideraciones para agregar nodos como votantes o observadores
Es posible que los requisitos del sistema requieran que agregues nodos de ZooKeeper adicionales a tu instalación de Edge. En la documentación de Cómo agregar nodos de ZooKeeper, se describe cómo agregar nodos de ZooKeeper adicionales a Edge. Cuando agregues nodos de ZooKeeper, debes tener en cuenta el tipo de nodos que agregarás: votante u observador.
Debes asegurarte de tener suficientes nodos de votantes para que, si uno o más nodos de votantes están inactivos, el ensamble de ZooKeeper pueda seguir funcionando, lo que significa que todavía hay un quórum de nodos de votantes disponibles. Si agregas nodos votantes, aumentas el tamaño del quórum y, por lo tanto, puedes tolerar que más nodos votantes estén inactivos.
Sin embargo, agregar nodos votantes adicionales puede afectar negativamente el rendimiento de escritura, ya que las operaciones de escritura requieren que el quórum esté de acuerdo con el líder. El tiempo que se tarda en determinar el líder se basa en la cantidad de nodos votantes, que aumenta a medida que agregas más nodos votantes. Por lo tanto, no querrás que todos los nodos sean votantes.
En lugar de agregar nodos votantes, puedes agregar nodos observadores. Agregar nodos observadores aumenta el rendimiento general de lectura del sistema sin agregar la sobrecarga de elegir un líder, ya que los nodos observadores no votan y no afectan el tamaño del quórum. Por lo tanto, si un nodo observador deja de funcionar, no afecta la capacidad del conjunto para elegir un líder. Sin embargo, perder nodos de observador puede causar una degradación en el rendimiento de lectura del ensamble de ZooKeeper, ya que hay menos nodos disponibles para entregar solicitudes de datos.
En un solo centro de datos, Apigee recomienda que no tengas más de cinco votantes, independientemente de la cantidad de nodos observadores. En dos centros de datos, Apigee recomienda que no tengas más de nueve votantes (cinco en un centro de datos y cuatro en el otro). Luego, puedes agregar tantos nodos observadores como sea necesario para los requisitos del sistema.
Quita un nodo de ZooKeeper
Existen muchos motivos por los que puedes quitar un nodo de ZooKeeper. Por ejemplo, un nodo se dañó o se agregó al entorno incorrecto.
En esta sección, se describe cómo quitar un nodo de ZooKeeper cuando está inactivo y no se puede alcanzar.
Para quitar un nodo de ZooKeeper, haz lo siguiente:
- Edita el archivo de configuración silenciosa y quita la dirección IP del nodo de ZooKeeper que deseas quitar.
- Vuelve a ejecutar el comando
setuppara que ZooKeeper vuelva a configurar los nodos restantes de ZooKeeper:/opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper setup -f updated_config_file
- Reinicia todos los nodos de ZooKeeper:
/opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper restart
- Vuelve a configurar el nodo del servidor de administración:
/opt/apigee/apigee-service/bin/apigee-service edge-management-server setup -f updated_config_file
/opt/apigee/apigee-service/bin/apigee-service edge-management-server restart - Vuelve a configurar todos los routers:
/opt/apigee/apigee-service/bin/apigee-service edge-router setup -f updated_config_file
/opt/apigee/apigee-service/bin/apigee-service edge-router restart - Vuelve a configurar todos los Message Processors:
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor setup -f updated_config_file
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart - Vuelve a configurar todos los nodos de Qpid:
/opt/apigee/apigee-service/bin/apigee-service edge-qpid-server setup -f updated_config_file
/opt/apigee/apigee-service/bin/apigee-service edge-qpid-server restart - Vuelve a configurar todos los nodos de Postgres:
/opt/apigee/apigee-service/bin/apigee-service edge-postgres-server setup -f updated_config_file
/opt/apigee/apigee-service/bin/apigee-service edge-postgres-server restart
Consideraciones sobre el mantenimiento
Puedes realizar el mantenimiento de ZooKeeper en un conjunto completamente funcional sin tiempo de inactividad si lo realizas en un solo nodo a la vez. Si te aseguras de que solo un nodo de ZooKeeper esté inactivo en cualquier momento, puedes garantizar que siempre haya un quórum de nodos de votantes disponibles para elegir un líder.
Mantenimiento en varios centros de datos
Cuando trabajes con varios centros de datos, recuerda que el ensamble de ZooKeeper no distingue entre centros de datos. Los ensamblajes de ZooKeeper ven todos los nodos de ZooKeeper en todos los centros de datos como un conjunto.
La ubicación de los nodos de votantes en un centro de datos determinado no es un factor cuando ZooKeeper realiza cálculos de quórum. Los nodos individuales pueden fallar en los centros de datos, pero mientras se conserve un quórum en todo el conjunto, ZooKeeper seguirá funcionando.
Implicaciones de mantenimiento
En varias ocasiones, deberás desactivar un nodo de ZooKeeper para realizar tareas de mantenimiento, ya sea un nodo votante o un nodo observador. Por ejemplo, es posible que debas actualizar la versión de Edge en el nodo, que la máquina que aloja ZooKeeper falle o que el nodo deje de estar disponible por algún otro motivo, como un error de red.
Si el nodo que deja de funcionar es un nodo observador, puedes esperar una leve degradación en el rendimiento del ensamble de ZooKeeper hasta que se restablezca el nodo. Si el nodo es un nodo votante, puede afectar la viabilidad del conjunto de ZooKeeper debido a la pérdida de un nodo que participa en el proceso de elección del líder. Independientemente del motivo por el que el nodo de votante se caiga, es importante mantener un quórum de nodos de votantes disponibles.
Procedimiento de mantenimiento
Realiza procedimientos de mantenimiento solo después de asegurarte de que un conjunto de ZooKeeper esté en funcionamiento. Esto supone que los nodos observadores son funcionales y que hay suficientes nodos votantes disponibles durante el mantenimiento para conservar un quórum.
Cuando se cumplen estas condiciones, un ensamble de ZooKeeper de tamaño arbitrario puede tolerar la pérdida de un solo nodo en cualquier momento sin pérdida de datos ni un impacto significativo en el rendimiento. Esto significa que puedes realizar tareas de mantenimiento en cualquier nodo del conjunto, siempre que sea en un nodo a la vez.
Como parte del mantenimiento, usa el siguiente procedimiento para determinar el tipo de un nodo de ZooKeeper (líder, votante o de observación):
- Si no está instalado en el nodo de ZooKeeper, instala
nc:sudo yum install nc
- Ejecuta el siguiente comando
ncen el nodo, en el que 2181 es el puerto de ZooKeeper:echo stat | nc localhost 2181
Deberías ver un resultado similar al siguiente:
Zookeeper version: 3.4.5-1392090, built on 09/30/2012 17:52 GMT Clients: /a.b.c.d:xxxx[0](queued=0,recved=1,sent=0) Latency min/avg/max: 0/0/0 Received: 1 Sent: 0 Connections: 1 Outstanding: 0 Zxid: 0xc00000044 Mode: follower Node count: 653
En la línea
Modedel resultado de los nodos, deberías verobserver,leaderofollower(es decir, un votante que no es el líder) según la configuración del nodo. - Repite los pasos 1 y 2 en cada nodo de ZooKeeper.
Resumen
La mejor manera de realizar el mantenimiento en un ensamble de ZooKeeper es hacerlo en un nodo a la vez. Recuerda:
- Debes mantener un quórum de nodos votantes durante el mantenimiento para garantizar que el conjunto de ZooKeeper siga funcionando.
- La eliminación de un nodo observador no afecta el quórum ni la capacidad de elegir un líder.
- El quórum se calcula en todos los nodos de ZooKeeper de todos los centros de datos.
- Continúa con el mantenimiento del siguiente servidor después de que el anterior esté operativo.
- Usa el comando
ncpara inspeccionar el nodo de ZooKeeper.