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 el mantenimiento de 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 notifica a los diferentes componentes 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 usa solo este centro de datos. Las direcciones IP deben aparecer en el mismo orden en todos los nodos de ZooKeeper en el centro de datos.En una instalación de un solo centro de datos, estos son los mismos nodos que se especifican en ZK_HOSTS. En un entorno de varios centros de datos, el archivo de configuración de Edge para cada centro de datos debe enumerar solo los nodos de ZooKeeper para ese centro de datos.
De forma predeterminada, todos los nodos de ZooKeeper se designan como nodos votantes. Eso significa que todos los nodos
participan en la elección del líder de ZooKeeper. Puedes incluir el
:observer modificador 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, se especifica el modificador :observer cuando se crean 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 la siguiente configuración en el 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, los seguidores, los votantes y los 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 nuevo procesador de mensajes 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 quorum de nodos de ZooKeeper votantes en funcionamiento disponibles. Un quorum significa que más de la mitad de todos los nodos de ZooKeeper votantes, en todos los centros de datos, están en funcionamiento.
Si no hay un quorum de nodos votantes disponibles, no se puede elegir ningún líder. En este caso, ZooKeeper no puede atender solicitudes. Eso significa que no puedes realizar una solicitud al servidor de administración de Edge, procesar solicitudes a la API ni acceder a la nueva IU de Edge hasta que se restablezca el quorum.
Por ejemplo, en una instalación de un solo centro de datos:
- Instalaste tres nodos de ZooKeeper.
- Todos los nodos de ZooKeeper son votantes.
- El quorum es de dos nodos votantes en funcionamiento.
- Si solo hay un nodo votante disponible, el conjunto de ZooKeeper no puede funcionar.
En una instalación con dos centros de datos:
- Instalaste tres nodos de ZooKeeper por centro de datos, para 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 quorum 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 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 sobre 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 se agregarán: votantes u observadores.
Debes asegurarte de tener suficientes nodos votantes para que, si uno o más nodos votantes dejan de funcionar el conjunto de ZooKeeper pueda seguir funcionando, lo que significa que aún hay un quorum de nodos votantes disponibles. Si agregas nodos votantes, aumentas el tamaño del quorum y, por lo tanto, puedes tolerar que más nodos votantes dejen de funcionar.
Sin embargo, agregar nodos votantes adicionales puede afectar negativamente el rendimiento de escritura, ya que las operaciones de escritura requieren que el quorum 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 debes hacer 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 a la sobrecarga de elegir un líder, ya que los nodos observadores no votan y no afectan el tamaño del quorum. 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 observadores puede causar una degradación en el rendimiento de lectura del conjunto de ZooKeeper porque hay menos nodos disponibles para atender las 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
Hay muchas razones por las que podrías querer 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 el nodo está inactivo y no se puede acceder a él.
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 tú deseas quitar.
- Vuelve a ejecutar el comando
setuppara Zookeeper para volver a configurar los nodos de ZooKeeper restantes:/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 procesadores de mensajes:
/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 de mantenimiento
Puedes realizar el mantenimiento de ZooKeeper en un conjunto en pleno funcionamiento 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 un momento dado, puedes asegurarte de que siempre haya un quorum de nodos votantes disponibles para elegir un líder.
Mantenimiento en varios centros de datos
Cuando trabajes con varios centros de datos, recuerda que el conjunto 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 solo conjunto.
La ubicación de los nodos votantes en un centro de datos determinado no es un factor cuando ZooKeeper realiza cálculos de quorum. Los nodos individuales pueden dejar de funcionar en los centros de datos, pero, siempre que se conserve un quorum en todo el conjunto, ZooKeeper seguirá funcionando.
Implicaciones del mantenimiento
En varios momentos, deberás desactivar un nodo de ZooKeeper para realizar el 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 falle la máquina que aloja ZooKeeper 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 ligera degradación en el rendimiento del conjunto 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 votante deje de funcionar, es importante mantener un quorum de nodos votantes disponibles.
Procedimiento de mantenimiento
Realiza los procedimientos de mantenimiento solo después de asegurarte de que un conjunto de ZooKeeper esté en funcionamiento. Esto supone que los nodos observadores están en funcionamiento y que hay suficientes nodos votantes disponibles durante el mantenimiento para conservar un quorum.
Cuando se cumplen estas condiciones, un conjunto de ZooKeeper de tamaño arbitrario puede tolerar la pérdida de un solo nodo en cualquier momento sin pérdida de datos ni impacto significativo en el rendimiento. Esto significa que puedes realizar el 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 nodo de ZooKeeper (líder, votante u observador):
- Si no está instalado en el nodo de ZooKeeper, instala
nc:sudo yum install nc
- Ejecuta el siguiente comando
ncen el nodo, donde 2181 es el puerto de ZooKeeper:echo stat | nc localhost 2181
Deberías ver un resultado con el siguiente formato:
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,leader, ofollower(lo que significa 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 conjunto de ZooKeeper es hacerlo en un nodo a la vez. Recuerda:
- Debes mantener un quorum de nodos votantes durante el mantenimiento para asegurarte de que el conjunto de ZooKeeper siga funcionando.
- Desactivar un nodo observador no afecta el quorum ni la capacidad de elegir un líder.
- El quorum 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 servidor anterior esté operativo.
- Usa el comando
ncpara inspeccionar el nodo de ZooKeeper.