Por que meu serviço ZooKeeper está instável ou reiniciando inesperadamente?
Como migrar o diretório de dados do ZooKeeper sem interromper o serviço?
Por que meu serviço ZooKeeper está instável ou reiniciando inesperadamente?
A causa mais comum é o excesso de znodes ou snapshots muito grandes. O ZooKeeper mantém todos os znodes na memória e sincroniza dados entre eles. Se qualquer um desses limites for ultrapassado, a pressão sobre a memória torna o serviço instável ou provoca falhas.
O ZooKeeper é um serviço de coordenação distribuída, não um sistema de arquivos. Caso a quantidade de znodes esteja chegando à casa das centenas de milhares, verifique se as aplicações upstream estão gravando no ZooKeeper além da finalidade prevista.
Mantenha-se dentro dos seguintes limites:
|
Recurso |
Limite recomendado |
|
Quantidade de znodes |
Menos de 100.000 |
|
Tamanho do snapshot |
Inferior a 800 MB por snapshot |
Para verificar a quantidade de znodes, acesse a aba Monitoring na página de detalhes do cluster no console E-MapReduce (EMR).
Para verificar o tamanho dos snapshots:
Na aba Configure da página do serviço ZooKeeper, pesquise por
dataDirpara localizar o caminho do diretório de dados.-
Execute o comando abaixo para listar os arquivos de snapshot e seus respectivos tamanhos:
ls -lrt /mnt/disk1/zookeeper/data/version-2/snapshot*
Se algum limite for excedido, analise a distribuição dos znodes e interrompa as aplicações upstream que estiverem gravando excessivamente no ZooKeeper, com base nessa distribuição.
O que fazer ao receber o erro "Too many connections"?
Quando um processo que utiliza um cliente ZooKeeper reporta o erro "Too many connections", isso pode indicar que o número de conexões originadas pelo cliente ultrapassou o limite permitido.
Na aba maxClientCnxns do serviço ZooKeeper, pesquise e modifique o valor do parâmetro Configuration. Esse parâmetro limita o número de conexões entre cada nó do ZooKeeper e um único endereço IP de cliente. Aumente esse valor conforme necessário e reinicie o serviço ZooKeeper para que a alteração tenha efeito.
Caso o problema persista após o ajuste do parâmetro maxClientCnxns, monitore o número de conexões na página de status do ZooKeeper. Se a quantidade de conexões aumentar continuamente, inspecione o processo que usa o cliente ZooKeeper em busca de problemas. Por exemplo, o processo pode não estar liberando corretamente as conexões após o uso. Corrija quaisquer problemas identificados para garantir o funcionamento adequado do processo cliente do ZooKeeper.
Como migrar o diretório de dados do ZooKeeper sem interromper o serviço?
Se o espaço em disco acabar ou o desempenho do disco degradar, migre o diretório de dados do ZooKeeper para um novo caminho. Processe primeiro os followers e depois o leader — essa abordagem mantém o conjunto ZooKeeper disponível durante toda a migração.
O exemplo a seguir migra o diretório de /mnt/disk1/zookeeper para /mnt/disk2/zookeeper. Neste cluster, master-1-2 é o leader, enquanto master-1-1 e master-1-3 são followers.
Etapa 1: Atualize a configuração do diretório de dados
Na aba maxClientCnxns da página do serviço ZooKeeper, pesquise por
dataDire altere seu valor para/mnt/disk2/zookeeper.Clique em Configure.
Na caixa de diálogo Save, preencha Execution Reason e clique em Save.
Etapa 2: Implante a configuração atualizada
No canto superior direito da aba Save, clique em Configure.
Na caixa de diálogo, preencha Execution Reason e clique em Deploy Client Configuration.
Na mensagem de confirmação, clique em OK.
Etapa 3: (Opcional) Verifique o novo diretório de dados
Faça login no cluster EMR via SSH. Para mais informações, consulte Fazer login em um cluster.
-
Execute o comando a seguir e confirme se
dataDiraponta para/mnt/disk2/zookeeper:cat /etc/emr/zookeeper-conf/zoo.cfg
Etapa 4: Migre os dados em cada nó
Execute o procedimento abaixo primeiro em master-1-1 e master-1-3 (followers) e, em seguida, em master-1-2 (leader).
Para cada nó:
Na aba Status da página do serviço ZooKeeper, localize o nó e clique em Stop na coluna Actions. Preencha Execution Reason, clique em OK e, em seguida, clique novamente em OK.
-
Acesse o nó master via SSH. Execute o comando abaixo para copiar o diretório de dados e defina as permissões corretas:
sudo rm -rf /mnt/disk2/zookeeper && sudo cp -rf /mnt/disk1/zookeeper /mnt/disk2/zookeeper && sudo chown hadoop:hadoop -R /mnt/disk2/zookeeper Na aba Status, localize o nó e clique em Start na coluna Actions. Preencha Execution Reason, clique em OK e, em seguida, clique novamente em OK.
Atualize a página até que Health Status exiba Healthy para o nó antes de prosseguir para o próximo.
Após parar o master-1-2 (o leader original), ele passa a atuar como follower, e o master-1-1 ou master-1-3 assume como o novo leader.
A migração estará concluída quando todos os nós apresentarem Health Status como Healthy.