最近这段时间在接触数据流式处理方面的事宜,用到了Apache NIFI现把安装配置中学习的一些经验分享下。此篇文章主要是针对集群及用户权限方面,关于 Apache NIFI 的介绍就不做过多的说明,直接引用官方的首页的说明如下图所示:
Apahce NIFI的单机运行是相当的简单,易用,完全就是傻瓜式的。下载解压,进行bin
目录执行nifi.sh start
打开浏览器输入http://127.0.0.1:8080/nifi
即可看到一个简洁漂亮的WEB UI。那么接下来我们要配置的是它的集群模式,官方说明NIFI采用的是0主节点模式,集群中的每个节点在数据集上执行相同的任务,但是每个节点都在不同的数据集上运行(详细的说明请查看 官方文档 ),并且内置了Zookeeper服务,如下图所示:
(其它版本可参考此篇文章)
HostName | IP | Services |
---|---|---|
centos7-master | 192.168.56.100 | Kerberos5 Server, Nifi Cluster Manager |
centos7-cluster01 | 192.168.56.101 | Kerberos5 Client, Nifi Cluster |
进入到Master机器,执行以下命令安装KDC服务:
1 | yum -y install krb5-server krb5-libs krb5-workstation |
---|
注:测试中发现
krb5-auth-dialo
组件是不可用的,也无需安装
进入/etc
目录找到/etc/krb5.conf
文件打开并修改,参考如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | # Configuration snippets may be placed in this directory as well includedir /etc/krb5.conf.d/ [logging] default = FILE:/var/log/krb5libs.log kdc = FILE:/var/log/krb5kdc.log admin_server = FILE:/var/log/kadmind.log [libdefaults] dns_lookup_realm = false ticket_lifetime = 24h renew_lifetime = 7d forwardable = true rdns = false # 这个注释需要开启,并填写默认的域 default_realm = CENTOS7-MASTER.COM default_ccache_name = KEYRING:persistent:%{uid} [realms] # 把此处的EXAMPLE.COM修改成自己的域 CENTOS7-MASTER.COM = { kdc = centos7-master admin_server = centos7-master # 添加默认的域 default_domain = CENTOS7-MASTER.COM } [domain_realm] # 把此处的EXAMPLE.COM修改成自己的域名 .centos7-master.com = CENTOS7-MASTER.COM centos7-master.com = CENTOS7-MASTER.COM |
---|
进入/etc
目录找到/var/kerberos/krb5kdc/kdc.conf
文件打开,参考如下修改:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | [kdcdefaults] kdc_ports = 88 kdc_tcp_ports = 88 [realms] # 修改此处的EXAMPLE.COM域名 CENTOS7-MASTER.COM = { #master_key_type = aes256-cts acl_file = /var/kerberos/krb5kdc/kadm5.acl dict_file = /usr/share/dict/words admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab supported_enctypes = aes256-cts:normal aes128-cts:normal des3-hmac-sha1:normal arcfour-hmac:normal camellia256-cts:normal camellia128-cts:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal kdc_ports = 88 kadmind_port = 749 } |
---|
1 2 3 4 5 6 7 8 | [root@centos7-master ~]# kdb5_util create -s Loading random data Initializing database '/var/kerberos/principal' for realm 'CENTOS7-MASTER.COM', master key name 'K/M@CENTOS7-MASTER.COM' You will be prompted for the database Master Password. It is important that you NOT FORGET this password. Enter KDC database master key: Re-enter KDC database master key to verify: |
---|
找到/var/kerberos/krb5kdc/kadm5.acl
配置文件,给数据库管理员添加ACL权限,*代表全部权限,操作如下:
1 2 | [root@centos7-master ~]# vi /var/kerberos/krb5kdc/kadm5.acl */admin@CENTOS7-MASTER.COM * |
---|
1 2 | service krb5kdc start service kadmin start |
---|
参考如下命令创建管理员用户,保存好创建时设置的密码(如果忘记后期可以使用cpw
命令更新),并导出keytab
1 2 3 4 5 6 7 8 9 10 | [root@centos7-master ~]# kadmin.local -q "addprinc root/admin" Authenticating as principal root/admin@CENTOS7-MASTER.COM with password. WARNING: no policy specified for root/admin@CENTOS7-MASTER.COM; defaulting to no policy Enter password for principal "root/admin@CENTOS7-MASTER.COM": Re-enter password for principal "root/admin@CENTOS7-MASTER.COM": Principal "root/admin@CENTOS7-MASTER.COM" created. [root@centos7-master ~]# kadmin.local kadmin: ktadd -k /data/root.keytab root/admin kadmin: q [root@centos7-master ~]# kinit root/admin |
---|
进入从Cluster机器,执行如下命令安装KDC Cliente服务:
1 | yum -y install krb5-libs krb5-workstation |
---|
拷贝主节点的krb5.conf
和root.keytab
到从节点服务,参考如下:
1 2 3 4 5 6 | [root@centos7-cluster01 ~]# scp root@centos7-master:/etc/krb5.conf /etc/krb5.conf [root@centos7-cluster01 ~]# scp root@centos7-master:/data/root.keytab /data/root.keytab [root@centos7-cluster01 ~]# kadmin -p root/admin Authenticating as principal root/admin with password. Password for root/admin@CENTOS7-MASTER.COM: kadmin: |
---|
拷贝root.keytab到/data/root.keytab
目录,注意此处指的是所有机器
解压nifi-toolkit-1.4.0-bin.tar.gz
文件后进入bin
目录,执行以下的命令:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | [root@centos7-master ~]# ./tls-toolkit.sh standalone -n 'centos7-master, centos7-cluster01' -C 'CN=admin, OU=ApacheNIFI' -o './target' -f '/usr/local/bin/nifi-ncm/conf/nifi.properties' [root@centos7-master target]# tree . ├── centos7-cluster01 │ ├── keystore.jks │ ├── nifi.properties │ └── truststore.jks ├── centos7-master │ ├── keystore.jks │ ├── nifi.properties │ └── truststore.jks ├── CN=admin_OU=ApacheNIFI.p12 ├── CN=admin_OU=ApacheNIFI.password ├── nifi-cert.pem └── nifi-key.key |
---|
拷贝生成好证书到主从节点服务器下NIFI
安装目录中的conf文件夹,如下:
1 2 | [root@centos7-master target]# scp centos7-cluster01/* centos7-cluster01:/usr/local/bin/nifi-cluster01/conf [root@centos7-master target]# cp target/centos7-master/* /usr/local/bin/nifi-ncm/conf/ |
---|
注意:所有的主从节点都需要操作
进入到NIFI安装目录下,并创建state/zookeeper
目录和myid
文件,然后把对应的ID写入到文件中,操作如下:
1 2 | [root@centos7-master nifi-ncm]# mkdir -p state/zookeeper [root@centos7-master nifi-ncm]# echo -n '1' > state/zookeeper/myid |
---|
注意: 从节点上创建的myid为2,如:
echo -n '2' > state/zookeeper/myid
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | clientPort=2181 initLimit=10 autopurge.purgeInterval=24 syncLimit=5 tickTime=2000 dataDir=./state/zookeeper autopurge.snapRetainCount=30 # # Specifies the servers that are part of this zookeeper ensemble. For # every NiFi instance running an embedded zookeeper, there needs to be # a server entry below. For instance: # # server.1=nifi-node1-hostname:2888:3888 # server.2=nifi-node2-hostname:2888:3888 # server.3=nifi-node3-hostname:2888:3888 # # The index of the server corresponds to the myid file that gets created # in the dataDir of each node running an embedded zookeeper. See the # administration guide for more details. # # 注意修改成你对应的服务器地址 server.1=centos7-master:2888:3888 server.2=centos7-cluster01:2888:3888 |
---|
进入到Nifif安装目录下修改conf/state-management.xml
配置,在zk-provider节点下添加连接字符串
1 2 3 4 5 6 7 8 | <cluster-provider> <id>zk-provider</id> <class>org.apache.nifi.controller.state.providers.zookeeper.ZooKeeperStateProvider</class> <property name="Connect String">centos7-master:2181,centos7-cluster01:2181</property> <property name="Root Node">/nifi</property> <property name="Session Timeout">10 seconds</property> <property name="Access Control">Open</property> </cluster-provider> |
---|
进入到Nifif安装目录下修改conf/nifi.properties
文件,把内置的zookeeper
启动和cluster
设置成true
,如下:
1 2 3 4 5 6 7 8 9 | nifi.state.management.embedded.zookeeper.start=true nifi.cluster.is.node=true # zookeeper properties, used for cluster management # nifi.zookeeper.connect.string=centos7-master:2181,centos7-cluster01:2181 nifi.zookeeper.connect.timeout=3 secs nifi.zookeeper.session.timeout=3 secs nifi.zookeeper.root.node=/nifi |
---|
进入到Nifif安装目录修改conf/nifi.properties
文件,把kerberos5
的登录适配加上,如下:
1 2 3 4 5 | nifi.kerberos.krb5.file=/etc/krb5.conf # kerberos service principal # nifi.kerberos.service.principal=root/admin@CENTOS7-MASTER.COM nifi.kerberos.service.keytab.location=/data/root.keytab |
---|
进入到Nifif安装目录中的conf目录,添加authorizer
到authorizers.xml
,打开file-provider
节点注释并添加如下内容:
1 2 3 4 5 6 7 8 9 10 11 | <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">root/admin@CENTOS7-MASTER.COM</property> <property name="Legacy Authorized Users File"></property> <property name="Node Identity 1">CN=centos7-master, OU=NIFI</property> <property name="Node Identity 2">CN=centos7-cluster01, OU=NIFI</property> </authorizer> |
---|
进入到Nifif安装目录中的conf目录,修改login-identity-providers.xml
文件,打开kerberos-provider
节点注释:
1 2 3 4 5 6 7 | <provider> <identifier>kerberos-provider</identifier> <class>org.apache.nifi.kerberos.KerberosProvider</class> <property name="Default Realm">CENTOS7-MASTER.COM</property> <property name="Kerberos Config File">/etc/krb5.conf</property> <property name="Authentication Expiration">12 hours</property> </provider> |
---|
先启动主节点的NIFI,而后启动从节点的NIFI,执行命令./bin/nifi.sh start
, 然后打开浏览器输入https://centos7-master:9443/nifi/
便会跳转到登录页面,输入在第1步骤创建的用户与密码,即可登录成功。界面显示如下:
如上面两图显示,在界面的左上角可以清楚的看到当前节点数为2,用户为**root/admin@CENTOS7-MASTER.COM
**,其中centos7-master
是协调器,centos7-cluster01
是主要节点,主菜单中也增加有了Cluster
,User
和Policies
选项。
至此Apache NIFI
的集群服务与用户认证便完成好啦,后面便可开展下一步的工作。
遇到的坑:
引用参考
收到的赏金 感谢各位的慷慨解囊!
序号 | 昵称 | 来源 | 金额(元) | 留言 |
---|---|---|---|---|
1 | 林俗人 | 微信 | 2 | 感谢博主,感谢分享! |