Como configurar um Cluster de NiFi
Olá Pessoal,
Estou voltando a escrever sobre o NiFi e hoje vamos falar de como construir um cluster. Você pode ler o outro post sobre uma instalação mais simples aqui.
Com a versão 1.0.0, deixou-se de lado uma arquitetura que possuía um ponto único de falha, que era chamado de NiFi Cluster Manager.
Surgiu então uma estrutura que se encaixa no paradigma “Zero Master Cluster”, onde o Cluster Coordinator é eleito pelo Zookeeper.
Nesse paradigma, todos os nodes enviam periodicamente um sinal de que estão vivos (heartbeat) para o Coordinator, que é responsável por adicionar ou remover nodes do cluster.
Em caso de falha do Cluster Coordinator, o Zookeeper se encarrega de eleger um novo, que pode ser qualquer dos sobreviventes.
Esta nova arquitetura traz a vantagem de que é possível interagir com a UI a partir de qualquer dos membros e a alteração é replicada para todo o cluster.
Então vamos lá ao nosso setup. Como você ja deve ter visto em outros casos, é bastante recomendado um número ímpar de nodes. Nosso cenário será com 3 instances AWS m3.medium (spot por $0.0067 Trumps) em uma subnet Privada (podemos usar uma Pública sem problemas).
Vamos fazer o download/instalação do Java e download/descompactação do NiFi na pasta /u00 nos três hosts (tem detalhes aqui).
Para simplificar o nome dos hosts, como não estou usando DNS, vamos colocar no /etc/hosts:
# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 30.0.2.163 node1 30.0.2.201 node2 30.0.2.63 node3
Após descompactar, teremos uma pasta nifi-1.6.0. Dentro dela, uma pasta conf onde fazemos um ajuste no zookeeper.properties. Inclua as três linhas abaixo no/u00/nifi-1.6.0/conf/zookeeper.properties:
server.1=node1:2888:3888 server.2=node2:2888:3888 server.3=node3:2888:3888
Em seguida, vamos alterar o arquivo /u00/nifi-1.6.0/conf/nifi.properties mudando o parâmetro que sinaliza que o Zookeeper que vem empacotado junto com o NiFi será utilizado e deve ser startado. Informamos também as connection strings:
nifi.state.management.embedded.zookeeper.start=true nifi.zookeeper.connect.string=node1:2181,node2:2181,node3:2181
Neste mesmo arquivo, ajustamos algumas configurações do cluster (cuidado para o nome de cada host):
nifi.cluster.is.node=true nifi.cluster.node.address=node1 nifi.cluster.node.protocol.port=2111
Quase finalizando, ajustando configurações site to site.
nifi.remote.input.host=node1 nifi.remote.input.socket.port=2112
Por último, configuração web.
nifi.web.http.host=node1
Para controlar o Zookeeper state, vamos criar um arquivo myid com o ID do node. (1 -> node1, 2 -> node2, 3 -> node3). No node1:
# mkdir /u00/nifi-1.6.0/state # mkdir /u00/nifi-1.6.0/state/zookeeper # echo 1 > /u00/nifi-1.6.0/state/zookeeper/myid
No node2 (e assim por diante):
# mkdir /u00/nifi-1.6.0/state # mkdir /u00/nifi-1.6.0/state/zookeeper # echo 2 > /u00/nifi-1.6.0/state/zookeeper/myid
Feito isso, basta startar o serviço nos três nodes:
# /u00/nifi-1.6.0/bin/nifi.sh start
Se desejar, pode acompar os logs em /u00/nifi-1.6.0/logs/nifi-app.log.
Basta acessar qualquer node. Vamos acessar o node2:
Nele podemos verificar o status do Cluster, no menu que fica no canto superior direito:
A lista de nodes, onde podemos ver quem é atualmente o Coordinator:
Por hoje era isso, apenas uma introdução a como criar um cluter de NiFi.
Até a próxima.