Sobre a manutenção do ZooKeeper

Edge para nuvem privada v4.19.01

Os conjuntos do ZooKeeper foram projetados para permanecer funcionais, sem perda de dados, apesar da perda de um ou mais nós do ZooKeeper. Essa resiliência pode ser usada de maneira eficaz na manutenção dos nós do ZooKeeper sem inatividade do sistema.

Sobre o ZooKeeper e o Edge

No Edge, os nós do ZooKeeper contêm dados de configuração sobre o local e a configuração dos vários componentes do Edge e notificam os diferentes componentes sobre as alterações na configuração. Todas as topologias de Edge compatíveis com um sistema de produção usam pelo menos três nós do ZooKeeper.

Use as propriedades ZK_HOSTS e ZK_CLIENT_HOSTS no arquivo de configuração do Edge para especificar os nós do ZooKeeper. Exemplo:

ZK_HOSTS="$IP1 $IP2 $IP3"
ZK_CLIENT_HOSTS="$IP1 $IP2 $IP3"

Em que:

  • ZK_HOSTS especifica os endereços IP dos nós do ZooKeeper. Os endereços IP precisam ser listados na mesma ordem em todos os nós do ZooKeeper.

    Em um ambiente com vários data centers, liste todos os nós do ZooKeeper de todos os data centers.

  • ZK_CLIENT_HOSTS especifica os endereços IP dos nós do ZooKeeper usados somente por esse data center. Os endereços IP precisam estar listados na mesma ordem em todos os nós do ZooKeeper no data center.

    Em uma única instalação do data center, esses são os mesmos nós especificados por ZK_HOSTS. Em um ambiente com vários data centers, o arquivo de configuração do Edge para cada data center precisa listar apenas os nós do ZooKeeper desse data center.

Por padrão, todos os nós do ZooKeeper são designados como nós de voter. Isso significa que todos os nós participam da eleição do líder do ZooKeeper. Você pode incluir o modificador :observer com ZK_HOSTS para indicar que o nó é um nó de observador, e não um eleitor. Um nó de observador não participa da eleição do líder.

Normalmente, o modificador :observer é especificado ao criar vários data centers de borda ou quando um único data center tem um grande número de nós do ZooKeeper. Por exemplo, em uma instalação do Edge de 12 hosts com dois data centers, o ZooKeeper no nó 9 no Data Center 2 é o observador:

Em seguida, use as seguintes definições no seu arquivo de configuração para o Data Center 1:

ZK_HOSTS="$IP1 $IP2 $IP3 $IP7 $IP8 $IP9:observer"
ZK_CLIENT_HOSTS="$IP1 $IP2 $IP3"

E para o data center 2:

ZK_HOSTS="$IP1 $IP2 $IP3 $IP7 $IP8 $IP9:observer"
ZK_CLIENT_HOSTS="$IP7 $IP8 $IP9"

As seções a seguir contêm mais detalhes sobre os nós do líder, eleitor e do observador e descrevem as considerações sobre como adicionar nós de eleitor e de observador.

Sobre líderes, seguidores, eleitores e observadores

Em uma instalação de vários nós do ZooKeeper, um dos nós é designado como o líder. Todos os outros nós do ZooKeeper são designados como seguidores. Embora as leituras possam acontecer de qualquer nó do ZooKeeper, todas as solicitações de gravação são encaminhadas ao líder. Por exemplo, um novo processador de mensagens é adicionado ao Edge. Essas informações são escritas para o líder do ZooKeeper. Em seguida, todos os seguidores replicam os dados.

No momento da instalação do Edge, você designa cada nó do ZooKeeper como eleitor ou como observador. Em seguida, o líder é eleito por todos os nós de eleitores do ZooKeeper. O único requisito para a eleição de um líder é a necessidade de haver um quorum de nós de eleitores do ZooKeeper disponíveis. Um quórum significa que mais da metade de todos os nós de eleitores do ZooKeeper, em todos os data centers, estão funcionais.

Se não houver um quórum de nós eleitores disponíveis, nenhum líder poderá ser eleito. Nesse cenário, o Zookeeper não pode exibir solicitações. Isso significa que não é possível fazer uma solicitação ao Servidor de gerenciamento de borda, processar solicitações da API de gerenciamento ou fazer login na IU do Edge até que o quórum seja restaurado.

Por exemplo, em uma única instalação de data center:

  • Você instalou três nós do ZooKeeper
  • Todos os nós do ZooKeeper são eleitores
  • O quórum são dois nós de eleitores em funcionamento
  • Se apenas um nó de eleitor estiver disponível, o conjunto do ZooKeeper não poderá funcionar

Em uma instalação com dois data centers:

  • Você instalou três nós do ZooKeeper por data center, para um total de seis nós
  • O data center 1 tem três nós de eleitores
  • O data center 2 tem dois nós de eleitor e um nó de observador
  • O quórum é baseado nos cinco eleitores dos dois data centers e, portanto, são três nós eleitores em funcionamento
  • Se apenas dois ou menos nós de eleitores estiverem disponíveis, o conjunto do ZooKeeper não poderá funcionar

Considerações para adicionar nós como eleitores ou observadores

Os requisitos do sistema podem exigir a adição de nós do ZooKeeper adicionais à instalação do Edge. A documentação Como adicionar nós do ZooKeeper descreve como adicionar nós do ZooKeeper ao Edge. Ao adicionar nós do ZooKeeper, considere o tipo de nós a serem adicionados: eleitor ou observador.

Você precisa ter nós de eleitores suficientes para que, se um ou mais nós eleitores estiverem inativos, o conjunto do ZooKeeper ainda poderá funcionar, o que significa que ainda há um quórum de nós de eleitores disponíveis. Ao adicionar nós de eleitor, você aumenta o tamanho do quórum e, portanto, pode tolerar mais nós eleitores em queda.

No entanto, adicionar mais nós de eleitores pode afetar negativamente o desempenho de gravação, porque as operações de gravação exigem que o quórum chegue a um líder. O tempo necessário para determinar o líder é baseado no número de nós de eleitores, que aumenta à medida que você adiciona mais nós de eleitores. Portanto, você não quer tornar todos os nós votantes.

Em vez de adicionar nós de eleitor, é possível adicionar nós de observadores. Adicionar nós de observador aumenta o desempenho geral de leitura do sistema sem aumentar a sobrecarga de eleger um líder, porque os nós do observador não votam e não afetam o tamanho do quórum. Portanto, se um nó do observador ficar inativo, isso não afetará a capacidade do conjunto de eleger um líder. No entanto, a perda de nós de observador pode causar degradação no desempenho de leitura do conjunto do ZooKeeper, porque há menos nós disponíveis para solicitações de dados de serviço.

Em um único data center, a Apigee recomenda que você não tenha mais de cinco eleitores, independentemente do número de nós do observador. Em dois data centers, a Apigee recomenda que você não tenha mais de nove eleitores (cinco em um data center e quatro no outro). Em seguida, você pode adicionar quantos nós de observador forem necessários para os requisitos do sistema.

Remover um nó do Zookeeper

Há muitas razões para remover um nó do Zookeeper. Por exemplo, um nó foi corrompido ou foi adicionado ao ambiente errado.

Esta seção descreve como remover um nó do Zookeeper quando o nó estiver inativo e inacessível.

Para remover um nó do Zookeeper:

  1. Edite o arquivo de configuração silenciosa e remova o endereço IP do nó do Zookeeper que você quer remover.
  2. Execute novamente o comando setup do Zookeeper para reconfigurar os nós restantes do ZooKeeper:
    /opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper setup -f updated_config_file
  3. Reinicie todos os nós do Zookeeper:
    /opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper restart
  4. Reconfigure o nó do servidor de gerenciamento:
    /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. Reconfigure todos os roteadores:
    /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. Reconfigure todos os processadores de mensagens:
    /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. Reconfigure todos os nós 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. Reconfigure todos os nós do 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

Considerações de manutenção

É possível executar a manutenção do ZooKeeper em um conjunto totalmente funcional sem inatividade se você o executou em um único nó por vez. Ao garantir que apenas um nó do ZooKeeper esteja inativo por vez, você garante que sempre haja um quórum de nós de eleitores disponíveis para eleger um líder.

Manutenção em vários data centers

Ao trabalhar com vários data centers, lembre-se de que o conjunto do ZooKeeper não faz distinção entre data centers. Os conjuntos do ZooKeeper veem todos os nós do ZooKeeper em todos os data centers como um conjunto.

A localização dos nós de eleitores em um determinado data center não é considerada quando o ZooKeeper realiza cálculos de quórum. Nós individuais podem ir para os data centers, mas, desde que um quórum seja preservado em todo o conjunto, o ZooKeeper permanecerá funcional.

Implicações da manutenção

Em vários momentos, será necessário desativar um nó do ZooKeeper para manutenção, seja um nó de eleitor ou de um nó de observador. Por exemplo, talvez seja necessário fazer upgrade da versão do Edge no nó, a máquina que hospeda o ZooKeeper pode falhar ou o nó pode ficar indisponível por algum outro motivo, como um erro de rede.

Se o nó que desce é um nó de observador, é possível esperar uma ligeira degradação no desempenho do conjunto do ZooKeeper até que o nó seja restaurado. Se o nó for de eleitor, isso poderá afetar a viabilidade do conjunto do ZooKeeper devido à perda de um nó que participa do processo de eleição de líder. Seja qual for o motivo da desativação do nó eleitor, é importante manter um quórum de nós eleitores disponíveis.

Procedimento de manutenção

Execute procedimentos de manutenção somente depois de garantir que o conjunto do ZooKeeper esteja funcionando. Isso pressupõe que os nós do observador são funcionais e que há nós eleitores suficientes disponíveis durante a manutenção para reter um quórum.

Quando essas condições são atendidas, um conjunto do ZooKeeper de tamanho arbitrário pode tolerar a perda de um único nó a qualquer momento sem perda de dados ou impacto significativo no desempenho. Isso significa que você está livre para realizar a manutenção em qualquer nó no conjunto, desde que ele esteja em um nó por vez.

Como parte da manutenção, use o procedimento a seguir para determinar o tipo de um nó do ZooKeeper (líder, eleitor ou observador):

  1. Se ele não estiver instalado no nó do ZooKeeper, instale nc:
    sudo yum install nc
  2. Execute o seguinte comando nc no nó, em que 2181 é a porta do ZooKeeper:
    echo stat | nc localhost 2181

    Você verá a saída no formulário:

    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

    Na linha Mode da saída para os nós, você verá observer, leader ou follower (ou seja, um eleitor que não é o líder), dependendo da configuração do nó.

  3. Repita as etapas 1 e 2 em cada nó do ZooKeeper.

Resumo

A melhor maneira de realizar a manutenção em um conjunto do ZooKeeper é realizar um nó por vez. Lembrete:

  • É preciso manter um quórum de nós eleitores durante a manutenção para garantir que o conjunto do ZooKeeper permaneça funcional.
  • Remover um nó do observador não afeta o quórum ou a capacidade de eleger um líder.
  • O quórum é calculado em todos os nós do ZooKeeper em todos os data centers.
  • Continuar com a manutenção para o próximo servidor depois que o anterior começar a funcionar.
  • Use o comando nc para inspecionar o nó do ZooKeeper.