Acerca del mantenimiento de ZooKeeper

Edge para la nube privada v4.19.01

Los conjuntos de ZooKeeper están diseñados para permanecer funcionales, 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.

Información acerca de ZooKeeper y Edge

En Edge, los nodos de ZooKeeper contienen datos de configuración sobre la ubicación y configuración de los distintos 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_HOSTS especifica 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_HOSTS especifica 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 del centro de datos.

    En una única instalación de centro de datos, estos son los mismos nodos que especifica ZK_HOSTS. En un entorno de varios centros de datos, en el archivo de configuración de Edge de cada centro de datos, solo se deben enumerar los nodos de ZooKeeper para ese centro de datos.

De forma predeterminada, todos los nodos de ZooKeeper se designan como nodos de voter. 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. Los nodos de observación no participan en la elección del líder.

Por lo general, debes especificar el modificador :observer cuando creas varios centros de datos perimetrales o cuando uno solo 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 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 de 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 líder. Todos los demás nodos de ZooKeeper se designan como seguidores. Si bien las operaciones de lectura 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 al 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 observador. Luego, todos los nodos de ZooKeeper eligen al líder. El único requisito para la elección de un líder es que debe haber un quorum de nodos votantes de ZooKeeper disponibles que funcionen. Un quórum significa que más de la mitad de los nodos de ZooKeeper de todos los votantes funcionan en todos los centros de datos.

Si no hay un quórum de nodos disponibles, no se puede elegir ningún líder. En esta situación, Zookeeper no puede entregar solicitudes. Esto significa que no podrás realizar una solicitud al servidor de administración perimetral, procesar solicitudes a la API de Management ni acceder a la IU de Edge hasta que se restablezca el quórum.

Por ejemplo, en una sola instalación de centro de datos, sucede lo siguiente:

  • Instalaste tres nodos de ZooKeeper
  • Todos los nodos de ZooKeeper son votantes.
  • El quórum son 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, ocurre lo siguiente:

  • Instalaste tres nodos de ZooKeeper por centro de datos, lo que suma 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, consta de tres nodos votantes en funcionamiento.
  • Si solo hay dos nodos votantes o menos disponibles, no podrá funcionar el ensamble de ZooKeeper.

Consideraciones para agregar nodos como observadores o votantes

Es posible que los requisitos del sistema requieran que agregues nodos adicionales de ZooKeeper a la instalación de Edge. En la documentación sobre cómo agregar nodos de ZooKeeper, se describe cómo agregar nodos adicionales de ZooKeeper a Edge. Cuando agregues nodos de ZooKeeper, debes tener en cuenta el tipo de nodos que agregarás: votante o observador.

Deseas asegurarte de tener suficientes nodos de votantes para que, si uno o más nodos votantes estén fuera de servicio, el ensamble de ZooKeeper pueda seguir funcionando, lo que significa que todavía hay un quórum de nodos votantes disponible. 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 de votantes adicionales puede afectar negativamente el rendimiento de escritura, ya que las operaciones de escritura requieren quórum para acordar en la variante principal. El tiempo que lleva determinar al líder se basa en la cantidad de nodos votantes, que aumentará a medida que agregues más nodos votantes. Por lo tanto, no te recomendamos que todos los nodos sean votantes.

En lugar de agregar nodos votantes, puedes agregar nodos de observador. Agregar nodos observadores aumenta el rendimiento general de lectura del sistema sin aumentar 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 de observador deja de funcionar, no afecta la capacidad del ensamble de elegir a un líder. Sin embargo, la pérdida de nodos de observador puede provocar una degradación en el rendimiento de lectura del ensamble de ZooKeeper debido a que hay menos nodos disponibles para las solicitudes de datos de servicio.

En un solo centro de datos, Apigee recomienda que no tengas más de cinco votantes, sin importar la cantidad de nodos de observador. 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 de observador como sea necesario para los requisitos del sistema.

Quita un nodo de Zookeeper

Existen muchos motivos por los 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 está disponible.

Para quitar un nodo de Zookeeper, haz lo siguiente:

  1. Edita el archivo de configuración silencioso y quita la dirección IP del nodo de Zookeeper que deseas quitar.
  2. Vuelve a ejecutar el comando setup para que Zookeeper vuelva a configurar los nodos restantes de ZooKeeper:
    /opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper setup -f updated_config_file
  3. Reinicia todos los nodos de Zookeeper:
    /opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper restart
  4. 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
  5. Reconfigura 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
  6. 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
  7. 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
  8. 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 ensamble completamente funcional sin tiempo de inactividad si lo realizaste en un solo nodo a la vez. Si te aseguras de que solo un nodo de ZooKeeper esté inactivo a la vez, puedes asegurarte de que siempre haya un quórum de nodos votantes disponibles para elegir a 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 ensamblados de ZooKeeper ven todos los nodos de ZooKeeper en todos los centros de datos como un ensamble.

La ubicación de los nodos votantes en un centro de datos determinado no es un factor cuando ZooKeeper realiza cálculos de quórum. Los nodos individuales pueden transferirse a través de los centros de datos, pero siempre que se conserve un quórum en todo el ensamble, ZooKeeper sigue funcionando.

Implicaciones del mantenimiento

En varios momentos, deberás desactivar un nodo de ZooKeeper por mantenimiento, ya sea un nodo de votante o un nodo de observador. Por ejemplo, es posible que debas actualizar la versión de Edge en el nodo, que la máquina que aloja a ZooKeeper falle o que el nodo deje de estar disponible por otro motivo, como un error de red.

Si el nodo que deja de funcionar es un nodo de observador, es posible que se produzca una leve degradación en el rendimiento del ensamble de ZooKeeper hasta que se restablezca el nodo. Si el nodo es un votante, puede afectar la viabilidad del ensamble de ZooKeeper debido a la pérdida de un nodo que participa en el proceso de elección de líder. Sin importar la razón por la que el nodo votante se haya caído, es importante mantener un quórum de nodos votantes disponibles.

Procedimiento de mantenimiento

Realiza procedimientos de mantenimiento solo después de asegurarte de que un ensamble de ZooKeeper funcione. En este caso, se supone que los nodos del observador son funcionales y que hay suficientes nodos votantes disponibles durante el mantenimiento para retener un quórum.

Cuando se cumplen estas condiciones, un ensamble de ZooKeeper de tamaño arbitrario puede tolerar la pérdida de un nodo único en cualquier momento, sin pérdida de datos ni impacto significativo en el rendimiento. Esto significa que puedes realizar mantenimiento en cualquier nodo del ensamble siempre que esté 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 o observador):

  1. Si no está instalado en el nodo de ZooKeeper, instala nc:
    sudo yum install nc
    .
  2. Ejecuta el siguiente comando nc en el nodo, en el que 2181 es el puerto de ZooKeeper:
    echo stat | nc localhost 2181

    Deberías ver un resultado en el formulario:

    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 Mode del resultado de los nodos, deberías ver observer, leader o follower (es decir, un votante que no es el líder) según la configuración del nodo.

  3. Repite los pasos 1 y 2 en cada nodo de ZooKeeper.

Resumen

La mejor manera de realizar el mantenimiento de un ensamble de ZooKeeper es hacerlo un nodo a la vez. Recuerda:

  • Debes mantener un quórum de nodos de votantes durante el mantenimiento para asegurarte de que el ensamble de ZooKeeper siga funcionando.
  • Quitar 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 una vez que el servidor anterior esté operativo.
  • Usa el comando nc para inspeccionar el nodo de ZooKeeper.