Apache Nifi在Windows环境下搭建伪群集及证书登录

前些时间做了关于Apache Nifi分布式集群的搭建分享,但很多时候要搭建分布式集群机器资源是个问题,而现在的单机的配置还是相当不错的,故现在就做个关于Windows上搭建个伪分布式集群的分享,同时通过另外一种方式实现Apache Nifi的授权认证。

系统环境及软件版本

  • Windows8.1

  • JDK1.8.0_131

  • Nifi-1.4.0

Nifi安装目录WEB端口
xxx\nifi-ncm9443
xxx\nifi-cluster019444
xxx\nifi-cluster029445

(其它版本可参考此篇文章) 另在测试中发个问题,使用Apache Nifi内嵌的Zookeeper搭建伪集群里启动总是提示端口占用的问题,故放弃只采用了单结点启动。

Nifi的服务证书

生成本地Nifi服务证书

解压nifi-toolkit-1.4.0-bin.tar.gz文件后,通过CMD进入bin目录,执行以下的命令:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
D:\DevelopTools\nifi-toolkit-1.4.0\bin>tls-toolkit.bat standalone -n "localhost(
3)" -C "CN=Admin, OU=ApacheNIFI" -o "..\target"
2017/10/26 18:21:32 INFO [main] org.apache.nifi.toolkit.tls.standalone.TlsToolki
tStandaloneCommandLine: No nifiPropertiesFile specified, using embedded one.
2017/10/26 18:21:32 INFO [main] org.apache.nifi.toolkit.tls.standalone.TlsToolki
tStandalone: Running standalone certificate generation with output directory ..\
target
******************************************************************************
2017/10/26 18:21:34 INFO [main] org.apache.nifi.toolkit.tls.standalone.TlsToolki
tStandalone: Successfully generated client certificate ..\target\CN=Admin_OU=Apa
cheNIFI.p12
2017/10/26 18:21:34 INFO [main] org.apache.nifi.toolkit.tls.standalone.TlsToolki
tStandalone: tls-toolkit standalone completed successfully

生成后的目录结构如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
Folder PATH listing for volume senhui.li
Volume serial number is 000000F0 FA46:A0EB
D:.
│  CN=Admin_OU=ApacheNIFI.p12
│  CN=Admin_OU=ApacheNIFI.password
│  nifi-cert.pem
│  nifi-key.key
├─localhost
│      keystore.jks
│      nifi.properties
│      truststore.jks
├─localhost_2
│      keystore.jks
│      nifi.properties
│      truststore.jks
└─localhost_3
        keystore.jks
        nifi.properties
        truststore.jks

特意注意: -C “CN=Admin, OU=ApacheNIFI” 中间的空格必须保留

拷贝Nifi服务证书

  • localhost目录下的文件拷贝到nifi-ncm目录下替换所有的文件
  • localhost_2目录下的文件拷贝到nifi-cluster01目录下替换所有的文件
  • localhost_3目录下的文件拷贝到nifi-cluster02目录下替换所有的文件
  • CN=Admin_OU=ApacheNIFI.p12CN=Admin_OU=ApacheNIFI.password拷贝到桌面备用,后续登录需要使用

配置单点Zookeeper相关

创建目录及id

进入nifi-ncm的目录,创建woker目录,并把server id写到文件中,命令如下:

1
2
D:\DevelopTools\nifi-ncm>mkdir -p state\zookeeper
D:\DevelopTools\nifi-ncm>echo -n '1' > state/zookeeper/myid

更新ZK配置

进入nifi-ncm的conf目录,打开zookeeper.properties文件,内容更新参考如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
clientPort=2181
initLimit=10
autopurge.purgeInterval=24
syncLimit=5
tickTime=2000
dataDir=./state/zookeeper
autopurge.snapRetainCount=30

# 只需要配置端口服务
server.1=localhost:2181

更新Nifi配置

进入nifi-ncm的conf目录,打开nifi.properties文件,更新如下的配置属性:

1
2
3
4
5
nifi.state.management.embedded.zookeeper.start=true

# zookeeper properties, used for cluster management #
# 另外两个节点,只要编辑此字段即可
nifi.zookeeper.connect.string=localhost:2181

更新State配置

进入nifi-ncm的conf目录,打开state-management.xml文件,更新zookeeper配置,如下:

1
2
3
4
5
6
7
8
9

<cluster-provider>
    <id>zk-provider</id>
    <class>org.apache.nifi.controller.state.providers.zookeeper.ZooKeeperStateProvider</class>
    <property name="Connect String">localhost:2181</property>
    <property name="Root Node">/nifi</property>
    <property name="Session Timeout">10 seconds</property>
    <property name="Access Control">Open</property>
</cluster-provider>

然后把此文件拷贝到nifi-cluster01nifi-cluster02相同的目录下

配置Nifi Admin

添加Admin用户

进入nifi-ncm的conf目录,打开authorizers.xml文件,找到file-provider添加如下配置:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
<authorizer>
    <identifier>file-provider</identifier>
    <class>org.apache.nifi.authorization.FileAuthorizer</class>
    <property name="Authorizations File">./conf/authorizations.xml</property>
    <property name="Users File">./conf/users.xml</property>
    <property name="Initial Admin Identity">CN=Admin, OU=ApacheNifi</property>
    <property name="Legacy Authorized Users File"></property>

    <property name="Node Identity 1">CN=localhost, OU=NIFI</property>
    <property name="Node Identity 2">CN=localhost_2, OU=NIFI</property>
    <property name="Node Identity 3">CN=localhost_3, OU=NIFI</property>
</authorizer>

然后把此文件同时拷贝到别外两个节点目录。

注:Node Identity x中的OU要写成NIFI,尝试过用别的名称好像不成功,具体的原因未知,感兴趣的可以自行探究一二。

安装证书

打开谷歌浏览器,在设置中找到安全选项中找到管理证书,点击Import开始导入上面生成的证书:CN=Admin_OU=ApacheNIFI.p12,密码在后缀名为.password的文件中,如下图所示: WIN-NIFI-CLUSTER-00 WIN-NIFI-CLUSTER-01

启动Nifi服务

进入到Nifi安装目录,然后在bin目录中找到run-nifi.bat文件并双击运行,注意启动的顺序: nifi-ncm–>nifi-cluster01/2,等待片刻后(可能会有点久,需要一个选举的过程)打开浏览器输入"https://localhost:9443/nifi",选择刚刚导入的证书,如看到下面的画面表示启动成功: WIN-NIFI-CLUSTER-02 WIN-NIFI-CLUSTER-03

用户策略

刚登录NIFI页面时,你会发现图标都是灰色的,需要赋予相应的权限才可以开始编辑权限才可以开始编辑。点击页面左侧面板上的钥匙图标,会弹出访问策略的窗口,如下图所示:

在此会看到用户列表为空,那么就要给相应的行为添加用户,点击Create链接即可开始添加,如下图所示: WIN-NIFI-CLUSTER-04 WIN-NIFI-CLUSTER-05 WIN-NIFI-CLUSTER-044

待所有的权限添加完成后,便可看到NIFI页面的按钮已经点亮,可以开始创建流程。

示例演示

模板上传

下载 DEMO 压缩包,解压出来有个WordCountDemo.xml文件。然后打开浏览器输入NIFI访问地址: https://localhost:9443/nifi/,点击左侧面板中的上传按钮上传模板,如下图所示: WIN-NIFI-CLUSTER-06

创建流程

拖动NIFI页面顶部的模板按钮到画板空白处,点击ADD按钮即可,然后双击打开WordCountDemo组找到PutFile组件,修改目录地址为你机器的实际可访问路径,如下图所示:

WIN-NIFI-CLUSTER-07 WIN-NIFI-CLUSTER-08

启动流程

点击NIFI页面左下角的NiFi Flow链接返回到主面板,点击WordCountDemo组,然后点击左侧面板中的开始按钮启动流程,如下图所示:

WIN-NIFI-CLUSTER-09

如无异常那么此时你可在目录下找到名为telltale_heart_wordcount的文件,打开便可看到如下图的统计内容:

WIN-NIFI-CLUSTER-10

至此在本地搭建NIFI伪集群就完成了,有问题欢迎留言。