Os conjuntos do ZooKeeper são 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 para realizar manutenção em 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 mudanças de configuração. Todas as topologias do 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_HOSTSespecifica 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_HOSTSespecifica os endereços IP dos nós do ZooKeeper usados apenas por este Data Center. Os endereços IP precisam ser 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 voter. Isso significa que todos os nós participam da eleição do líder do ZooKeeper. É possível incluir o modificador :observer com ZK_HOSTS para indicar que o nó é um nó observador, e não um nó votante. Um nó observador não participa da eleição do líder.
Normalmente, você especifica o modificador :observer ao criar vários data centers do Edge 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 configurações no arquivo de configuração do 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 líder, votante e observador e descrevem as considerações sobre a adição de nós votantes e observadores.
Sobre líderes, seguidores, eleitores e observadores
Em uma instalação do ZooKeeper com vários nós, 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 em qualquer nó do ZooKeeper, todas as solicitações de gravação são encaminhadas para o líder. Por exemplo, um novo processador de mensagens é adicionado ao Edge. Essas informações são gravadas no líder do ZooKeeper. Todos os seguidores replicam os dados.
No momento da instalação do Edge, você designa cada nó do ZooKeeper como um votante ou um observador. O líder é eleito por todos os nós do ZooKeeper que votam. O único requisito para a eleição de um líder é que haja um quórum de nós de votação do ZooKeeper em funcionamento disponíveis. Um quórum significa que mais da metade de todos os nós do ZooKeeper de eleitores, em todos os data centers, estão funcionando.
Se não houver um quórum de nós de votação disponíveis, nenhum líder poderá ser eleito. Nesse cenário, o Zookeeper não pode atender a solicitações. Isso significa que não é possível fazer uma solicitação ao servidor de gerenciamento do Edge, processar solicitações de API ou fazer login na IU do Edge até que o quórum seja restaurado.
Por exemplo, em uma única instalação do Data Center:
- Você instalou três nós do ZooKeeper
- Todos os nós do ZooKeeper são votantes
- O quórum é de dois nós de votação em funcionamento
- Se apenas um nó de votação 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, totalizando seis nós.
- O data center 1 tem três nós de votação
- O Data Center 2 tem dois nós de votação e um nó observador.
- O quórum é baseado nos cinco eleitores nos dois data centers e, portanto, é composto por três nós de eleitores em funcionamento
- Se apenas dois ou menos nós de votação 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 que você adicione mais nós do ZooKeeper à instalação do Edge. A documentação Como adicionar nós do ZooKeeper descreve como adicionar mais nós do ZooKeeper ao Edge. Ao adicionar nós do ZooKeeper, é preciso considerar o tipo de nó a ser adicionado: votante ou observador.
É preciso garantir que haja nós de votação suficientes para que, se um ou mais nós de votação estiverem inativos, o conjunto do ZooKeeper ainda possa funcionar, o que significa que ainda há um quórum de nós de votação disponíveis. Ao adicionar nós de votação, você aumenta o tamanho do quórum e, portanto, pode tolerar mais nós de votação inativos.
No entanto, adicionar mais nós de votação pode afetar negativamente o desempenho de gravação, porque as operações de gravação exigem que o quórum concorde com o líder. O tempo necessário para determinar o líder depende do número de nós de votação, que aumenta à medida que você adiciona mais nós de votação. Portanto, não é recomendável que todos os nós sejam votantes.
Em vez de adicionar nós de votação, é possível adicionar nós de observação. A adição de nós observadores aumenta o desempenho geral de leitura do sistema sem aumentar a sobrecarga de eleger um líder, porque os nós observadores não votam e não afetam o tamanho do quórum. Portanto, se um nó observador ficar inativo, isso não afetará a capacidade do conjunto de eleger um líder. No entanto, a perda de nós observadores pode causar degradação no desempenho de leitura do conjunto do ZooKeeper, porque há menos nós disponíveis para atender às solicitações de dados.
Em um único data center, a Apigee recomenda que você não tenha mais de cinco eleitores, independentemente do número de nós observadores. 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, é possível adicionar quantos nós de observador forem necessários para os requisitos do sistema.
Remover um nó do ZooKeeper
Há muitos motivos para remover um nó do ZooKeeper. Por exemplo, um nó foi corrompido ou adicionado ao ambiente errado.
Nesta seção, descrevemos como remover um nó do ZooKeeper quando ele está inativo e não pode ser acessado.
Para remover um nó do ZooKeeper:
- Edite o arquivo de configuração silenciosa e remova o endereço IP do nó do ZooKeeper que você quer remover.
- Execute novamente o comando
setuppara o ZooKeeper para reconfigurar os nós restantes do ZooKeeper:/opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper setup -f updated_config_file
- Reinicie todos os nós do ZooKeeper:
/opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper restart
- 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 - 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 - 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 - Reconfigure todos os nós do 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 - 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 sobre manutenção
É possível realizar a manutenção do ZooKeeper em um conjunto totalmente funcional sem inatividade se você fizer isso 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 eles. Os conjuntos do ZooKeeper visualizam todos os nós do ZooKeeper em todos os Data Centers como um conjunto.
A localização dos nós de votação em um determinado data center não é um fator quando o ZooKeeper realiza cálculos de quórum. Os nós individuais podem ficar inativos em todos os data centers, mas, desde que um quórum seja preservado em todo o conjunto, o ZooKeeper permanece funcional.
Implicações de manutenção
Em vários momentos, será necessário desativar um nó do ZooKeeper para manutenção, seja um nó de votação ou de observação. 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 ficar inativo for um nó observador, poderá haver uma pequena degradação no desempenho do conjunto do ZooKeeper até que o nó seja restaurado. Se o nó for um nó de eleitor, ele poderá afetar a viabilidade do conjunto do ZooKeeper devido à perda de um nó que participa do processo de eleição do líder. Independentemente do motivo para o nó de votação ficar inativo, é importante manter um quórum de nós de votação disponíveis.
Procedimento de manutenção
Realize procedimentos de manutenção somente depois de garantir que um conjunto do ZooKeeper esteja funcionando. Isso pressupõe que os nós observadores estejam funcionando e que haja nós votantes suficientes disponíveis durante a manutenção para manter 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ó em qualquer ponto sem perda de dados ou impacto significativo no desempenho. Isso significa que você pode realizar manutenção em qualquer nó do conjunto, desde que seja 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):
- Se ele não estiver instalado no nó do ZooKeeper, instale o
nc:sudo yum install nc
- Execute o seguinte comando
ncno nó, em que 2181 é a porta do ZooKeeper:echo stat | nc localhost 2181
Você verá uma 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
Modeda saída dos nós, você veráobserver,leaderoufollower(ou seja, um eleitor que não é o líder), dependendo da configuração do nó. - 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 é fazer isso em um nó por vez. Lembre-se:
- É preciso manter um quórum de nós de votação durante a manutenção para garantir que o conjunto do ZooKeeper permaneça funcional.
- A remoção de um nó observador não afeta o quórum nem a capacidade de eleger um líder.
- O quórum é calculado em todos os nós do ZooKeeper em todos os data centers.
- Prossiga com a manutenção do próximo servidor depois que o anterior estiver operacional.
- Use o comando
ncpara inspecionar o nó do ZooKeeper.