- Ambiente Requerido
Sistema Operacional: CentOS Linux 7.6 ou superior
JDK: Java Development Kit 1.8
ZooKeeper: Apache ZooKeeper 3.6.0
Diretório de Implantação: /home/admin/zk-platform
- Instalação do ZooKeeper
Crie os diretórios para as instâncias e faça o download do software:
# Definir caminhos base
BASE_DIR="/home/admin/zk-platform"
mkdir -p ${BASE_DIR}/node1 ${BASE_DIR}/node2 ${BASE_DIR}/node3
# Baixar e extrair o ZooKeeper na primeira instância
cd ${BASE_DIR}/node1
wget https://archive.apache.org/dist/zookeeper/zookeeper-3.6.0/apache-zookeeper-3.6.0-bin.tar.gz
tar -xzf apache-zookeeper-3.6.0-bin.tar.gz
mv apache-zookeeper-3.6.0-bin zk-server
- Configuração da Primeira Instância
Prepare o diretório de dados e defina o arquivo de identificação:
# Configurar diretório de dados e myid
cd ${BASE_DIR}/node1/zk-server
mkdir -p var/data
echo "1" > var/data/myid
# Ajustar arquivo de configuração
cp conf/zoo_sample.cfg conf/zoo.cfg
# Editar conf/zoo.cfg com as seguintes linhas:
dataDir=/home/admin/zk-platform/node1/zk-server/var/data
clientPort=2281
server.1=127.0.0.1:2999:3999
server.2=127.0.0.1:3000:4000
server.3=127.0.0.1:3001:4001
- Preparação das Demais Instâncias
Copie a estrutura configurada para as outras instâncias e personalize as configurações:
# Copiar e ajustar a segunda instância
cp -r ${BASE_DIR}/node1/zk-server ${BASE_DIR}/node2/zk-server
echo "2" > ${BASE_DIR}/node2/zk-server/var/data/myid
sed -i 's/clientPort=2281/clientPort=2282/' ${BASE_DIR}/node2/zk-server/conf/zoo.cfg
# Repetir para a terceira instância
cp -r ${BASE_DIR}/node1/zk-server ${BASE_DIR}/node3/zk-server
echo "3" > ${BASE_DIR}/node3/zk-server/var/data/myid
sed -i 's/clientPort=2281/clientPort=2283/' ${BASE_DIR}/node3/zk-server/conf/zoo.cfg
- Inicialização das Instâncias
Inicie cada nó do cluster e monitore os logs para erros:
# Iniciar as instâncias sequencialmente
for i in 1 2 3; do
cd ${BASE_DIR}/node${i}/zk-server
./bin/zkServer.sh start
sleep 2 # Aguardar um breve intervalo
done
# Verificar logs para problemas, por exemplo:
tail -f ${BASE_DIR}/node1/zk-server/logs/*.log
Se ocorrer conflito de porta 8080, devido ao AdminServer do ZooKeeper 3.5+, adicione configurações específicas no arquivo zoo.cfg de cada nó:
# No node1, adicionar ao final de conf/zoo.cfg:
admin.serverPort=8180
# No node2:
admin.serverPort=8280
# No node3:
admin.serverPort=8380
# Reiniciar as instâncias após as alterações
for i in 1 2 3; do
cd ${BASE_DIR}/node${i}/zk-server
./bin/zkServer.sh restart
done
- Verificação do Estado do Cluster
Use o comando status para confirmar a formação do cluster e os papéis de líder/seguidor:
# Checar o status de cada nó
for i in 1 2 3; do
echo "Status do node${i}:"
${BASE_DIR}/node${i}/zk-server/bin/zkServer.sh status
done
Para testar a tolerância a falhas, interrompa o líder e observe a reelieção:
# Identifique o líder atual (suponha que seja node3) e pare-o
${BASE_DIR}/node3/zk-server/bin/zkServer.sh stop
# Verifique os status novamente para ver a transição
for i in 1 2 3; do
${BASE_DIR}/node${i}/zk-server/bin/zkServer.sh status
done
# Reinicie o nó parado e confirme o novo estado
${BASE_DIR}/node3/zk-server/bin/zkServer.sh start
sleep 3
for i in 1 2 3; do
${BASE_DIR}/node${i}/zk-server/bin/zkServer.sh status
done
Após esses passos, o cluster ZooKeeper estará operacional em ambiente de máquina única com failoevr automático.