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 a manutenção dos nós do ZooKeeper sem tempo de 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 de vários componentes do Edge e notificam os diferentes componentes das mudanças de configuração. Todas as topologias do Edge com suporte para 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 esse data center. Os endereços IP precisam ser listados na mesma ordem em todos os nós do ZooKeeper em o data center.Em uma instalação de data center único, 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 para esse data center.
Por padrão, todos os nós do ZooKeeper são designados como nós votantes. Isso significa que todos os nós
participam da eleição do líder do ZooKeeper. É possível incluir o
:observer modificador com ZK_HOSTS para indicar que
o nó é um nó observador e não um 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 do data center 2 é o
observador:

Em seguida, use as configurações a seguir 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 nós líderes, votantes e observadores e descrevem as considerações sobre a adição de nós votantes e observadores.
Sobre líderes, seguidores, votantes 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 ocorrer em 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 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 votantes. O único requisito para a eleição de um líder é que haja um quorum de nós votantes do ZooKeeper funcionando. Um quorum significa que mais da metade de todos os nós votantes do ZooKeeper, em todos os data centers, estão funcionando.
Se não houver um quorum de nós votantes disponíveis, nenhum líder poderá ser eleito. Nesse cenário, o ZooKeeper não pode atender às 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 nova interface do Edge até que o quorum seja restaurado.
Por exemplo, em uma instalação de data center único:
- Você instalou três nós do ZooKeeper
- Todos os nós do ZooKeeper são votantes
- O quorum é de dois nós votantes em funcionamento
- Se apenas um nó votante 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 votantes
- O data center 2 tem dois nós votantes e um nó observador
- O quorum é baseado nos cinco votantes em ambos os data centers e, portanto, é de três nós votantes em funcionamento
- Se apenas dois ou menos nós votantes estiverem disponíveis, o conjunto do ZooKeeper não poderá funcionar
Considerações para adicionar nós como votantes ou observadores
Os requisitos do sistema podem exigir que você adicione outros nós do ZooKeeper à instalação do Edge. A documentação Como adicionar nós do ZooKeeper descreve como adicionar outros nós do ZooKeeper ao Edge. Ao adicionar nós do ZooKeeper, é necessário considerar o tipo de nós a serem adicionados: votante ou observador.
É importante ter nós votantes suficientes para que, se um ou mais nós votantes estiverem inativos o conjunto do ZooKeeper ainda possa funcionar, o que significa que ainda há um quorum de nós votantes disponíveis. Ao adicionar nós votantes, você aumenta o tamanho do quorum e, portanto, pode tolerar mais nós votantes inativos.
No entanto, a adição de outros nós votantes pode afetar negativamente a performance de gravação, porque as operações de gravação exigem que o quorum concorde com o líder. O tempo necessário para determinar o líder é baseado no número de nós votantes, que aumenta à medida que você adiciona mais nós votantes. Portanto, não é recomendável tornar todos os nós votantes.
Em vez de adicionar nós votantes, é possível adicionar nós observadores. A adição de nós observadores aumenta a performance geral de leitura do sistema sem adicionar a sobrecarga da eleição de um líder, porque os nós observadores não votam e não afetam o tamanho do quorum. 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 na performance 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ê tenha no máximo cinco votantes, independentemente do número de nós observadores. Em dois data centers, a Apigee recomenda que você tenha no máximo nove votantes (cinco em um data center e quatro no outro). Em seguida, adicione quantos nós observadores 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 foi adicionado ao ambiente errado.
Esta seção descreve 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 nodes:/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 a manutenção
É possível realizar a manutenção do ZooKeeper em um conjunto totalmente funcional sem tempo de inatividade se você a realizar em um único nó por vez. Ao garantir que apenas um nó do ZooKeeper esteja inativo por vez, você pode garantir que sempre haja um quorum de nós votantes 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 consideram todos os nós do ZooKeeper em todos os data centers como um conjunto.
O local dos nós votantes em um determinado data center não é um fator quando o ZooKeeper realiza cálculos de quorum. Os nós individuais podem ficar inativos em todos os data centers, mas, desde que um quorum 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ó votante ou um nó 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 ficar inativo for um nó observador, você poderá esperar uma pequena degradação na performance do conjunto do ZooKeeper até que o nó seja restaurado. Se o nó for um nó votante, 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 da inatividade do nó votante, é importante manter um quorum de nós votantes disponíveis.
Procedimento de manutenção
Realize procedimentos de manutenção somente depois de garantir que um conjunto do ZooKeeper esteja funcional. Isso pressupõe que os nós observadores estejam funcionais e que haja nós votantes suficientes disponíveis durante a manutenção para manter um quorum.
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 na performance. Isso significa que você pode realizar a manutenção em qualquer nó do conjunto, desde que seja em um nó por vez.
Como parte da realização da manutenção, use o procedimento a seguir para determinar o tipo de nó do ZooKeeper (líder, votante ou observador):
- Se ele não estiver instalado no nó do ZooKeeper, instale
nc:sudo yum install nc
- Execute o comando
nca seguir 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
Modeda saída dos nós, você veráobserver,leader, oufollower(que significa um votante 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 é realizar um nó por vez. Lembre-se:
- É necessário manter um quorum de nós votantes durante a manutenção para garantir que o conjunto do ZooKeeper permaneça funcional.
- A desativação de um nó observador não afeta o quorum nem a capacidade de eleger um líder.
- O quorum é calculado em todos os nós do ZooKeeper em todos os data centers.
- Prossiga com a manutenção para o próximo servidor depois que o servidor anterior estiver operacional.
- Use o comando
ncpara inspecionar o nó do ZooKeeper.