开发者学堂课程【NiFi 知识精讲与项目实战(第二阶段):内嵌 ZK 模式集群-2】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/706/detail/12529
内嵌 ZK 模式集群-2
内容介绍:
一、NiFi 集群的安装演示
二、启动三台 NiFi 集群
三、检查问题并重新启动
一、NiFi 集群的安装演示
下面演示 NiFi 基于内嵌 zookeeper 集群的安装过程
1.上传并解压
首先要打开安装包,进入到/export/download/目录下,因为安装包是上传到了该目录中。接下来进行解压,因为已经有一个单独的 NiFi 服务了,解压的时候为了不产生覆盖,可以把解压后的文件指定到另外一个 soft 目录中,输入-zxvfnifi-1.9.7-bin.tar.gz-C,解压到/export/soft/目录下,解压过程可能比较慢。解压完成后进入到 soft 目录下查看,输入 CD../soft/,可以看到 soft 目录下已经有了 NiFi 的目录。
需要把 NiFi 的目录重命名,加上端口后缀-18001,添加完成之后把当前项目复制三份,也可以在配置完成以后再进行复制。
2.编辑 NiFi-18001服务的配置
首先要编辑内嵌的 zookeeper 服务的配置,配置在 conf 目录下的 zookeeper.properties 的配置文件,通过它来修改配置相关对象。
此时需要把 zookeeper 的端口号进行配置,默认值是2181,但是因为这三台服务都在同一主机上,所以端口号必须要修改成不一样的,否则会产生端口冲突,这里修改为12181,
然后要把整个 zookeeper 的 IP 和端口号写上,在这里面可以写上192.168.252.150,然后将端口号写成12888和13888,剩下两个可以直接复制过来。注意要把全部的端口号进行修改,因为全部都在同一台的服务器上运行,会产生端口冲突,如果是在不同的服务器上,那么这三台的服务的端口号可以一样的。
3.创建 myid 文件
zookeeper 配置完成之后,还要告诉服务当前 zookeeper 实例的唯一索引值,文件需要加到 statezookeeper 目录下。进入到跟目录,跟目录下目前还没有的 statezookeeper 文件夹,因此需要创建,输入 mkdir-p./state/zookeeper 这方便快速的创建目录,回车后可以看到已经有了 state 目录。进入到 state 和 zookeeper 目录下新建一个 myid 配置文件,在 myid 写入的数据就是唯一的索引值,此时现写入1,代码为 echo1>myid,也是当前是第一个节点,写入成功之后进行查看,显示已经写入成功,第一个 zookeeper 服务配置完成。
4.进行 NiFi 的配置信息
重新回到 conf 目录下,
在 conf 目录下具有 nifi.properties 配置文件,通过它来修改 NiFi 的配置。在配置文件中要把 NiFi 内置 zookeeper机制打开,key 可以通过搜索的方式快速找到。需要将 false 改为 true,表示通过内嵌的 zookeeper 集群来搭建的NiFi 集群。
zookeeper 的配置文件地址可以直接使用默认地址,通过 key 进行搜索将端口号进行变更,首先是 IPhost,IP 地址更改为192.168.52.150;端口号为了避免重复也要进行修改,改成18001,18001就是访问端口地址,用于后续的外部访问;
还需要去修改 nifi.cluster.is.node.(是否集群模式)配置项,需要把它打开更改为 true。在集群模式中要把 address 添加上 IP 地址。IP 地址填完以后 port 要加上协议端口号,加为28001,
还要修改其端口;还有一个配置项是投票等待的节点数,主要用于对集群的性能的优化。默认是五分钟,为了便于测试和使用可以让其只等待一分钟。节点数表示有几个节点可以正常运转,修改为1,表示只要有1个节点存活就可以进行测试;zookeeper 连接字符串也要在 nifi 中进行配置,否则 nifi 找不到 zookeeper 集群。将 zookeeper 所有的端口号 IP 地址列出来后,中间通过逗号进行分隔,192.168.252.150:12181,原来默认是2181。对于第二台服务是一样的,只需要将端口号进行修改,将复制粘贴后把端口号改为12182,第三台服务同样如此,复制粘贴后改为再粘贴12183,这样端口号就不会冲突了,并和刚才配置的 zookeeper 里面的端口号保持一致,否则会找不到 zookeeper 服务。zookeeper 和 NiFi 都配置完成了。
5.编辑 statemanagement
配置完成后还需要编辑 statemanagement。这个配置文件中有两个配置,一个是 localprovider,是用于单机运行的一类配置,由于需要集群运行所以要对其进行修改,ckprovider 是集群运行环境所需要的配置项,通过修connectstring 加上属性值,加上内容。connectstring 就是 zookeeper 集群,输入或复制粘贴三次:192.168.252.150:12181192.168.252.150:12182192.168.252.150:12183。修改完成后 statemanagement 编辑完成,保存后退出。
6.进行 NiFi-18002、NiFi-18003服务的配置
至此集群中的第一个节点配置完成,接下来要复制出另外的两份 NiFi 节点。NiFi 不启动可以节省服务器资源,可以通过 p-rnifi-1.9.2-18001/nifi-1.9.2-18002把它复制到另外一个全新的节点下。复制完成会发现这三个节点都已经存在了,但是此时不可以直接启动,因为之前说过端口号是不能一样的,现在三个节点使用的都是的第一个节点的端口号,此时需要把涉及到端口号的所有配置项全部进行变更。
首先是 zookeeper 端口号,编辑第二个节点中的 zookeeperproperties,这里面需要修改的只有 clientport,对于下面的其他配置文件是不需要修改的,这些在之前已经完成了预设,没有端口冲突的问题,所以不需要变更,保存后退出,第三个节点的配置文件的修改也是如此。zookeeper 配置修改完以后再对 zookeeper 的 myid 进行修改,在 state 目录下的 zookeeper 文件夹中有一个 myid 文件,修改为2后保存退出,第三个节点修改为3后保存退出。zookeeper 配置改完之后要修改 NiFi 配置文件中的端口号,nifi.conf 目录下的 nifiproperties 这里面需要修改的端口号比较多,可以通过 key 进行查找。首先是 web 的端口号,将第2个节点改为18002、28002和26342,当然可以不完全按照上述数字进行修改,只要后面的端口号不重复就可以。此时第二台NiFi的端口号也已经修改完成,保存后退出。第三台也要进行相同的变更,还是首先通过 key 来搜索,然后依次修改为18003、28003、36342,之所以2、3中都显示1,是因
为它们都是从第一个节点复制过来的。
现在 NiFi 的所有端口号都已经修改完成,下面进行 statement 配件文件的修改,此目录中仅有一个地方需要进行配置,即 zk 的集群地址,地址的端口号是不会存在冲突问题的,因为是作为客户端进行连接的,因此也不需要进行修改。三个集群均已配置完成。
二、启动三台 NiFi 集群
首先启动第一台,输入 bin/NiFi.shstart,启动比较耗费的电脑资源,而且还需要等待一定的时间,第一个启动完成之后立刻启动第二个,因为它们之间是需要进行 ZK 集群通信,然后启动第三台。
三台都执行过启动命令后可以明显的看到 Linux 虚拟机的服务器资
源被大量的占用,
当 cpu 运行消耗降下来的时候,证明 NiFi 启动成功,NiFi 运行启动成功以后在日志里面也会有展示,所以还可以通过查看 NiFi 日志来判断 NiFi 服务是否启动成功,通过日志查看的过程比较过比较慢。等待后发现启动成功,但是发现日志中打印已经停止了,报错信息提示的是请检查配置项 zk-provider,文件是 statement.xml;
还发现连接失败,配置写入没有问题的情况下连接失败是由于字符串前边一串空白,
退出日志,重新编辑 nifi/conf/statement/目录下的文件,可以看到添加配置的时候在前面添加了 tab,这就是导致无法与地址连接的原因。因此配置项中不能存在 tab 以及空格否则会导致无法连接,需要将 tab 及空格删除。修改后保存,
然后把配置文件复制到另外两个节点,配置文件的端口号不存在冲突的问题,是作为客户端进行连接的,不是作为服务,因此可以直接复制并覆盖。
三、检查问题并重新启动
1.问题现象
首先启动第一台,然后再启动第二台,最后启动第三台,启动成功以后继续查看日志。当出现问题的时候,都是通过查看 NiFi 日志进行定位问题、解决问题的,在实际的工作过程中,查看日志也是非常重要的,要学会查看日志去定位问题,nifiapp.log 这个文件名也需要牢记。日志当中提示的IP和状况正常,退出以后查看 NiFiweb 是
否能够正常访问。
在浏览器中将之前单机版的地址删除,输入集群端口号18001,然后是地址/nifi/,注意地址不要写错。回车后可以看到的 NiFi 可以正常使用了,
通过右上角进行查看可以确定目前是否处于集群模式以及现在集群中到含哪几个节点,点击 cluster 可以看到当前处于集群模式,但是只有一个节点,
查看进程三台都已经启动成功。
进入其它两个节点检验是否能够正常访问,第二个节点也可以正常访问,但它们没有配合起来使用,检查配置了解出现这种现象的原因,即已经是集群模式了,但是每一台服务都只有自己的一个节点,三个集群之间在互相识别的时候没有找到对方,可能和 zookeeper 的识别索引不宜有关系。
2.解决方式
进入到 exportsoft18001,18001中 zookeeper 配置是在 nifistatezookeepermyid 中的,可以看到索引值为1,第二台是2也没有问题,第三台为3也是正确的。
zookeeper 配置出除了这里面以外,还有一个地方也了进行配置,即 nifi1中的 conf 目录下的zookeeper.properties,最后有一个三台不同服务的连接地址,可以看到配置的都是 server.1,但是 myid 分别是123,而这里 server 和123是不对应的,必须要进行修改才可以正常使用,这可能就是问题所在了,把三台服务分别进行修改,分别是 server.1、server.2、server.3,
因此在配置的过程中有任何的疏忽或低级错误都可能导致非常严重的后果,只能凭借对问题的理解进行逐个排查找出问题所在。
再次把服务重新启动,首先输入 stop,当然也可以直接输入 restart,但是由于演示电脑的性能问题,直接运行restart 可能导致启动时间不同或者硬件资源不够,进而出现问题。保险起见先全部停止后,再同时进行启动,通过GPS 可以看到所有的服务全部已经关闭,每一次启动都要逐个启动这三台服务,比较麻烦,需要通过脚本运行三次,可以创建一个专门的 SH 脚本来快速的启动三台服务,把启动的脚本/export/soft/nifi-1.9.2-18003/bin/nifi.shstart进行复制,然后新建一个文件,在脚本中把启动命令复制过来,然后把端口号即目录进行修改一下,运行该脚本可以实现三台服务的同时启动,但是现在无法运行,因为现在权限是白色的,没有执行权限的,需要给添加一个执行权限,命令为:chmod+wrxstart.sh,这时变成绿色的,表示可以执行。
此时该脚本可以把三个服务全部启动起来,可以看到的 cpu 已经降下来了,证明nifi集群应该已经启动完毕,再进行重新访问,访问成功以后在 zookeeper 界面上的状态栏中显示集群有三台,
说明现在集群现在有三个节点并且识别成功,然后再来查看 cluster,会发现集群有了三个节点,123全部都有了,然后在这三个节点当中,第一个节点承担了 primary 以及集群协调器的角色。
























