开发者学堂课程【NiFi 知识精讲与项目实战(第二阶段):内嵌 ZK 模式集群-1】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/706/detail/12528
内嵌 ZK 模式集群-1
内容介绍:
一、NiFi 集群的安装概述
二、NiFi 集群的安装流程
一、NiFi 集群的安装概述
集群的安装,NiFi 集群有两种部署模式,第一种是使用 NiFi 自己集成的 Zookeeper 集群,第二种是使用外部所提供的 Zookeeper 来进行安装的集群,推荐使用 NiFi 内嵌的集成 Zookeeper 集群来进行部署,这样可以使用一套专门用于 NiFi 的 Zookeeper 集群,降低了运维工作量。
集群的环境基础包括操作系统和 Java 环境,操作系统是 centOS7,Java 环境是 JDK8。所提供的虚拟机里面已经将环境安装完毕,可以直接使用。如果使用 NiFi 内置的 Zookeeper 来安装集群,就需要了解相关的配置信息,明确如何进行相关的配置后,再进行实际的操作。NiFi 是依赖于 Zookeeper 来实现集群配置的,但是在一些环境中部署了NiFi,并没有部署 Zookeeper 集群,为了避免运维人员的创建和维护单段的 Zookeeper 集群,NiFi 提供了嵌入式的Zookeeper 服务集群,里面涉及到两个配置项,
第一个配置项主要是用来指定 NiFi 实例是不是应该运行嵌入式的 Zookeeper 服务器,如果这个配置项选中 true,那么第二个配置也需要进行配置。
第二个配置项主要体现所提供的 Zookeeper 服务器具体的属性文件存储于哪个目录当中。可以通过修改nifi.properties 文件里 Zookeeper start 的属性值,将其改为 true 来运行嵌入式的 Zookeeper 服务器。
通常建议大家把服务器运行在三个或者五个节点上面,少于三个节点时耐用能力会受到影响,而超过五个节点去运行时,也会产生一些不必要的网络流量,因此推荐大家部署三个或五个节点。如果在四个节点上运行 Zookeeper,也不会明显优于三个节点上的运行效果,因为 Zookeeper 要求大多数的节点处于活动状态才可以正常运转,在四个节点上运行时,如果有两个节点运转,两个节点不运转,导致单节点的情况。
如果 start 属性设置为 true,nifi.propertie 文件中 Zookeeper.propertie 的属性也需要进行设置,主要用来指定Zookeeper 的属性配置文件,该配置文件至少需要配置 Zookeeper 的服务器列表,也就是服务器集群的地址。另外一点需要注意的是 Zookeeper 会监听服务器列表的端口号,所以必须要把防火墙打开。默认的端口号是2181,但是可以通过修改 Zookeeper.propertie 文件来进行修改配置。
使用嵌入式 Zookeeper 的时候,conf 目录下有一个 Zookeeper.propertie 文件,含有 dataDir 的属性,默认情况下,此值为./state/zookeeper。主要用于告诉 NiFi 集群当前处于哪一个节点,也就是节点的唯一标识。可以在./state/zookeeper 目录下创建一个文件叫做 myid,并且把当前节点的唯一标识写入到 myid 文件中,该文件中保存的索引值就会成为这个阶段的唯一标识,不可以重复。比如可以通过下述操作来写入标识某一个 zookeeper 服务器:
cd SNIFI_HOME
mkdir state
mkdir state/zookeeper
echo 1 > state/ zookeeper/myid
进入 NiFi 目录以后,创建一个 state 目录,然后创建 state 目录下的 zookeeper 节点,在 zookeeper 目录下创建一个文件 myid,它的内容为1,表示当前 zookeeper 节点的索引值,也就是唯一名称。对另外一台 zookeeper 节点,也是通过同样的命令进行设置,但是这里面的索引值为2,它们两个是不能重复的。通过这样的标识,集群就可以识别出不同的 zookeeper 节点。
如果采用三个集群,配置时就分别是123,此次演示会采用三个节点的集群,而且会把这三个节点全部搭建在同一台服务器上,所以会用不同的端口号进行配置,因为如果端口号重复会有端口号冲突问题。而如果在三台不同的服务器上进行进行搭建,因为 IP 地址不同,所以对端口号的数值没有要求,可以写成一样的,此时不存在端口冲突的问题。
二、NiFi 集群的安装流程
现阶段主要进行测试和开发,不会在自己的电脑上搭建三台 Linux 虚拟机,因为这会损耗极大的电脑资源,而在真实的工作环境下,即生产环境中会采用不同的服务器来部署。
1.上传并解压
首先上传并解压安装文件,在 NiFi 里面有一个资料文件夹,其中含有 NiFi 安装包 nifi-1.9.2-bin.tar.gz,把解压的文件重命名以后复制三份作为三个不同的节点。
2.编辑实例中,conf/zookeeper.properties 文件
复制完成后需要去编辑三个节点中的 zookeeper.properties 配置文件,不同的配置文件要修改的内容和端口号也不一样,这里所提供的配置是 NiFi 的最新版本(1.0以上的版本配置)。如果是稳定的1.9版本,配置项是不一样的,在NiFi 集群配置文件夹里提供了可以直接使用的配置文件。下面把该配置文件和新版本的配置文件进行对比,可以看到在1.9版本中配置的服务器列表和新版本当中的服务器列表是不一样的,这是因为新版本的端口号是 zookeeper 的端口号,稳定的1.9版本的端口号需要在 clientPort 属性上进行配置。如果使用的 NiFi 版本不一样,就要使用不同的配置,否则不会生效。
3.创建 myid 文件
配置完 zookeeper.properties 文件后,需要在默认的目录项增加 myid 配置文件,用于写入节点的识别的唯一索引,每个节点不能重复,分别是123
4.编辑节点 conf/nifi.properties 文件
在 conf/nifi.properties 文件中进行修改配置,配置内容如下:
####################
#State Management#
####################
nifi.state.management.configuration.file=./conf/state-management.xm1
nifi.state.management.provider. loca1=1oca1-provider
nifi.state.management.provider.cluster=zk-provider
#指定此 NiFi 实例是否应运行嵌入式 ZooKeeper 服务器,默认是fa1se nifi.state.management.embedded.zookeeper.start=true
nifi.state.management.embedded.zookeeper.properties=./conf/zookeeper.properties
#web properties #
nifi.web.war.directory=./lib
# HTTP 主机,默认为空白
nifi.web.http.host=192.168.52.150
# HTTP 端口默认值为8080;修改为18001、18002、18003
nifi.web.http.port=18001
# cluster node properties (on1y configure for cluster nodes)#
#如果实例是群集中的节点,请将此设置为 true,默认值为 false
nifi.cluster.is.node=true
#节点的完全限定地址。默认为空白
nifi.cluster.node.address=192.168.52.150
#节点的协议端口。默认为空白,修改为:28001、28002、28003
nifi.cluster.node.protoco1.port=28001
#指定在选择 Flow 作为“正确”流之前等待的时间量。如果已投票的节点数等于
nifi.c1uster.flow.election.max.candidates属性指定的数量,则群集将不会等待这么长时间。默认值为5mins
首先要把 start 改为 true,目的就是为了使用内嵌的 zookeeper 服务集群;然后将 properties 修改为在 conf 目录下的./conf/zookeeper.properties,这个也是默认的配置值;还有就是主机 IP 值默认是空白的,这里一定要改为自己的服务器地址;因为处于集群模式,端口号不能全部使用8080,如果在同一台机器上全部使用8080,会造成端口号冲突,分别改为18001、18002、18003。涉及到的所有 IP 地址和端口号都要进行更改,否则会有端口号冲突的错误,保证三个端口号不一样就可以了,不需要完全按照上述样例进行配置,需要记住配置的为何值,在进行访问的时候就要用端口配置项进行访问;最后是 zookeeper 的连接地址,通过IP冒号加端口的方式进行配置,多个 zookeeper 集群之间的地址通过逗号分隔开。上述就是 NiFi properties 的核心配置项。节点2和节点3的配置项和节点1是一样的,但是节点2,节点3内容跟节点1相同,只是端口号需要通过不同的名称进行区分,分别是 nifi.web.http.port,nifi.cluster.node.protocol.port,nifi.cluster.load.balance.port 以避免端口重复。
5、编辑实例 conf/state-management.xml 文件
该配置文件主要是配置zookeeper集群,进行负载的实现类。在这个类里面,需要修改的只有<property name=" connect string">
192.168.52.150:12181,192.168.52.150:12182,192.168.52.150:12183
这一部分,即 zookeeper 集群的地址,这个也需要进行修改,和刚才 NiFi 集群的端口号是一一对应的。
6.启动三个实例,浏览器输入:192.168.52.150:18001,访问即可
全部配置完成以后可以把三个事例分别启动,启动成功以后可以通过其中某一台的端口号地址进行访问,访问打开以后可以通过 Cluster 按钮来观察集群状态。