Installing Apache NiFi Cluster on Linux Servers (Three Node Cluster)
NiFi provides the ability to cluster nodes together using either an embedded or external Apache Zookeeper instance, In this article, I am using an embedded Zookeeper instance method to build a three-node Nifi cluster
Update the /etc/hosts (On all the three nodes)
172.28.120.75 nifi01
172.28.127.99 nifi02
172.28.122.90 nifi03
Install Java on all three nodes:
[cloud_user@nifi03 ~]$ sudo yum install java-1.8.0-openjdk
Download Nifi (On all three nodes)
[cloud_user@nifi03 ~]$ tar zxf nifi-1.16.3-bin.tar.gz
[cloud_user@nifi01 ~]$ cd nifi-1.16.3/
[cloud_user@nifi01 nifi-1.16.3]$ ls -lrt
total 288
-rw-r--r--. 1 cloud_user cloud_user 4784 Jun 13 21:45 README
-rw-r--r--. 1 cloud_user cloud_user 92723 Jun 13 21:45 NOTICE
-rw-r--r--. 1 cloud_user cloud_user 172761 Jun 13 21:45 LICENSE
drwxr-xr-x. 2 cloud_user cloud_user 6 Jun 13 21:45 extensions
drwxrwxr-x. 6 cloud_user cloud_user 8192 Jun 21 21:13 lib
**drwxrwxr-x. 2 cloud_user cloud_user 4096 Jun 21 21:13 conf**
drwxrwxr-x. 3 cloud_user cloud_user 18 Jun 21 21:13 docs
drwxrwxr-x. 2 cloud_user cloud_user 124 Jun 21 21:13 bin
Update zookeeper.properties File on all the servers
[cloud_user@nifi02 ~]$ cd nifi-1.16.3/
[cloud_user@nifi02 nifi-1.16.3]$ cd conf/
[cloud_user@nifi02 conf]$ pwd
/home/cloud_user/nifi-1.16.3/conf
On All the nodes
server.1=nifi01:2888:3888;2181
server.2=nifi02:2888:3888;2181
server.3=nifi03:2888:3888;2181
Create a State directory for zookeeper on all servers
[cloud_user@nifi03 nifi-1.16.3]$ pwd
**/home/cloud_user/nifi-1.16.3**
[cloud_user@nifi03 nifi-1.16.3]$ mkdir -p ./state/zookeeper/
Create myid File (update value based on the nodes)
Recommended by LinkedIn
[cloud_user@**nifi01** nifi-1.16.3]$ **echo 1** >> ./state/zookeeper/myid
[cloud_user@nifi01 nifi-1.16.3]$
[cloud_user@**nifi02** nifi-1.16.3]$ **echo 2** >> ./state/zookeeper/myid
[cloud_user@nifi02 nifi-1.16.3]$
[cloud_user@nifi03 nifi-1.16.3]$ pwd
/home/cloud_user/nifi-1.16.3
[cloud_user@**nifi03** nifi-1.16.3]$ **echo 3** >> ./state/zookeeper/myid
[cloud_user@nifi03 nifi-1.16.3]$
Update nifi.properties file
Update these properties on all three nodes:
nifi.state.management.embedded.zookeeper.start=true
nifi.zookeeper.connect.string=nifi01:2181,nifi02:2181,nifi03:2181
[cloud_user@nifi01 ~]$ cd nifi-1.16.3/
[cloud_user@nifi01 nifi-1.16.3]$ ls
bin conf docs extensions lib LICENSE NOTICE README state
[cloud_user@nifi01 nifi-1.16.3]$ cd conf/
[cloud_user@nifi01 conf]$ ls -lrt
total 120
-rwxrwxrwx. 1 cloud_user cloud_user 9120 Jun 13 21:45 state-management.xml
-rwxrwxrwx. 1 cloud_user cloud_user 1946 Jun 13 21:45 stateless.properties
-rwxrwxrwx. 1 cloud_user cloud_user 3696 Jun 13 21:45 stateless-logback.xml
**-rwxrwxrwx. 1 cloud_user cloud_user 16524 Jun 13 21:45 nifi.properties**
-rwxrwxrwx. 1 cloud_user cloud_user 7090 Jun 13 21:45 login-identity-providers.xml
-rwxrwxrwx. 1 cloud_user cloud_user 10540 Jun 13 21:45 logback.xml
-rwxrwxrwx. 1 cloud_user cloud_user 2326 Jun 13 21:45 bootstrap-notification-services.xml
-rwxrwxrwx. 1 cloud_user cloud_user 2189 Jun 13 21:45 bootstrap-hashicorp-vault.conf
-rwxrwxrwx. 1 cloud_user cloud_user 952 Jun 13 21:45 bootstrap-gcp.conf
-rwxrwxrwx. 1 cloud_user cloud_user 5944 Jun 13 21:45 bootstrap.conf
-rwxrwxrwx. 1 cloud_user cloud_user 1076 Jun 13 21:45 bootstrap-azure.conf
-rwxrwxrwx. 1 cloud_user cloud_user 1320 Jun 13 21:45 bootstrap-aws.conf
-rwxrwxrwx. 1 cloud_user cloud_user 26769 Jun 13 21:45 authorizers.xml
-rwxrwxrwx. 1 cloud_user cloud_user 2656 Jun 21 21:31 zookeeper.properties
[cloud_user@nifi01 conf]$
On node1
nifi.cluster.is.node=true
nifi.cluster.node.address=nifi01
nifi.cluster.node.protocol.port=9991
nifi.cluster.node.load.balance.port=6342
nifi.remote.input.host=nifi01
nifi.remote.input.secure=false
nifi.remote.input.socket.port=10000
nifi.web.http.host=nifi01
On node2
nifi.cluster.is.node=true
nifi.cluster.node.address=nifi02
nifi.cluster.node.protocol.port=9991
nifi.cluster.node.load.balance.port=6342
nifi.remote.input.host=nifi02
nifi.remote.input.secure=false
nifi.remote.input.socket.port=10000
nifi.web.http.host=nifi02
On node3
nifi.cluster.is.node=true
nifi.cluster.node.address=nifi03
nifi.cluster.node.protocol.port=9991
nifi.cluster.node.load.balance.port=6342
nifi.remote.input.host=nifi03
nifi.remote.input.secure=false
nifi.remote.input.socket.port=10000
nifi.web.http.host=nifi03
Now start the Nifi one by one on all servers as a background process :
Node 1
[cloud_user@nifi01 nifi-1.16.3]$ pwd
/home/cloud_user/nifi-1.16.3
[cloud_user@nifi01 nifi-1.16.3]$ cd bin/
[cloud_user@nifi01 bin]$ ls
dump-nifi.bat nifi-env.bat [nifi-env.sh](<http://nifi-env.sh/>) [**nifi.sh](<http://nifi.sh/>)** run-nifi.bat status-nifi.bat
[cloud_user@nifi01 bin]$ **./nifi.sh start &**
Node 2
[cloud_user@nifi02 nifi-1.16.3]$ pwd
/home/cloud_user/nifi-1.16.3
[cloud_user@nifi02 nifi-1.16.3]$ cd bin/
[cloud_user@nifi02 bin]$ ls
dump-nifi.bat nifi-env.bat [nifi-env.sh](<http://nifi-env.sh/>) [**nifi.sh](<http://nifi.sh/>)** run-nifi.bat status-nifi.bat
[cloud_user@nifi02 bin]$ **./nifi.sh start &**
Node 3
[cloud_user@nifi03 nifi-1.16.3]$ pwd
/home/cloud_user/nifi-1.16.3
[cloud_user@nifi03 nifi-1.16.3]$ cd bin/
[cloud_user@nifi03 bin]$ ls
dump-nifi.bat nifi-env.bat [nifi-env.sh](<http://nifi-env.sh/>) [**nifi.sh](<http://nifi.sh/>)** run-nifi.bat status-nifi.bat
[cloud_user@nifi03 bin]$ **./nifi.sh start &**
If you want to check the status of Nifi in a specific cluster node:
[cloud_user@nifi01 bin]$ cd ..
[cloud_user@nifi01 nifi-1.16.3]$ ls
bin conf docs extensions lib LICENSE logs NOTICE README run state
[cloud_user@nifi01 nifi-1.16.3]$ cd logs/
[cloud_user@nifi01 logs]$ ls
nifi-app.log nifi-bootstrap.log nifi-request.log nifi-user.log
[cloud_user@nifi01 logs]$ tail -f **nifi-app.log**
It might take more than 10 min
Thank you!
Data Engineer
9moBuen tutorial, solo agregar que a la misma versión de nifi tratada aquí lo sgte: Configuración del state-management.xml en todos los nodos: <cluster-provider> <id>zk-provider</id> <class>org.apache.nifi.controller.state.providers.zookeeper.ZooKeeperStateProvider</class> <property name="Connect String"> nifi01:2188, nifi01:2188, nifi01:2188</property> <property name="Root Node">/nifi</property> <property name="Session Timeout">10 seconds</property> <property name="Access Control">Open</property> </cluster-provider> Sino se hace esta configuración presentara el sgte error en bootstrap.log Modificación de parámetros de autentificar en todos los nodos #configuración sin autenticaciónifi.security.keystore= nifi.security.keystoreType= nifi.security.keystorePasswd= nifi.security.keyPasswd= nifi.security.truststore= nifi.security.truststoreType= nifi.security.truststorePasswd= nifi.sensitive.props.key=<keyvalue>