아래 문서 따라 진행함

nifi.apache.org/docs/nifi-docs/html/administration-guide.html#upgrading_nifi

 

NiFi System Administrator’s Guide

NiFi always stores all sensitive values (passwords, tokens, and other credentials) populated into a flow in an encrypted format on disk. The encryption algorithm used is specified by nifi.sensitive.props.algorithm and the password from which the encryption

nifi.apache.org

 

 

현재 날짜 (2020.12.15) 기준으로 nifi 공식 홈페이지에서 받을 수 있는 Releases 된 버전은 두가지

 

1.12.1 버전과 1.11.4 버전

 

https://nifi.apache.org/download.html

 

 

1.11.4 을 먼저 받아 실행한 후, 1.12.1 버전으로 업그레이드 하는 방법을 알아본다.

테스트 NiFi 는 모두 local standalone 으로 동작시킨다.

만약 cluster 구성된 NiFi 업그레이드를 해야 한다면, 모든 노드의 NiFi 를 업그레이드 해야 한다.

 

 

< 테스트 환경 OS >

Ubuntu 20.04.1 LTS 64bit

 

 

 

< 1.11.4 버전 설치 >

 

nifi.apache.org/download.html

위에 사이트에서 nifi-1.11.4-bin.tar.gz 를 받는다.

/opt/nifi/old-nifi/ 에 받았다고 하자.

tar -zxvf nifi-1.11.4-bin.tar.gz 

명령어로 압축을 해제한다.

 

 

< 1.11.4 버전 NiFi 실행 확인 >

 

bin/nifi.sh start 명령어로 nifi 를 실행하고

조금 기다렸다가 웹브라우저에서

localhost:8080 으로 접속하여 NiFi 가 잘 구동되는지 확인한다.

 

 

실행하면 알아서 아래 파일 및 디렉터리들이 생성된다.

content_repository
database_repository
flowfile_repository
provenance_repository
work directory
logs directory
flow.xml.gz file 이 conf directory 내에 생성됨

 

간단하게 몇 가지 작업을 1.11.4 버전에서 진행해본다.

버전 업그레이드를 한 후, 원하는대로 작업이 이어지는지 보기 위함이다.

 

아래는 간단하게 flow 를 만들고, variables 도 만들고, data content 도 확인해본 모습이다.

 

 

logattribute 의 provenance
가장 처음 생성된 flowfile 의 값

 

 

 

 

 

< 1.12.1 버전 다운 >

 

마찬가지로 nifi-1.12.1-bin.tar.gz 파일을 받는다.

이번에는 /opt/nifi/new-nifi 에 받는다.

tar -zxvf nifi-1.12.1-bin.tar.gz 명령어로 압축을 해제한다.

 

 

 

< 1.11.4 버전에서 1.12.1 버전으로 업그레이드 >

 

conf 내의 파일 구성을 바꾸는 절차를 통해 업그레이드한다.

/opt/nifi/old-nifi/conf 파일들의 내용을 /opt/nifi/new-nifi/conf 파일들의 내용으로 대체하는 방식으로 이루어진다.

old-nifi 에서 필요한 값들을 new-nifi 로 업데이트 할텐데,

이 때 파일 자체를 복사하여 덮어씌우게 되면, new-nifi 에 (있을지도 모르는) 새롭게 추가된 properties 가 사라지게 되므로

확인절차를 거치는 것이 좋다.

 

업그레이드 할 때 다뤄야하는 파일들과 다루는 방법은 아래와 같다.

 

  • authorizers.xml
    • old-nifi 에서 new-nifi 로 복사한다.
  • users.xml
    • old-nifi 에서 new-nifi 로 복사한다.
  • bootstrap-notification-services.xml
    • old-nifi 의 속성값들을 new-nifi 에 업데이트한다.
  • bootstrap.conf
    • old-nifi 의 속성값들을 new-nifi 에 업데이트한다.
  • flow.xml.gz
    • old-nifi 에서 new-nifi 로 복사한다.
  • nifi.properties
    • old-nifi 의 속성값들을 new-nifi 에 업데이트한다.
    • 아래 속성값들에 대해 추가 설명
      • nifi.flow.configuration.file 
        • 만약 default 값(./conf/flow.xml.gz)을 사용하고 있다면,
          (위에서 설명한 것처럼) flow.xml.gz을 old-nifi 에서 new-nifi 로 복사한다.
        • default 값이 아닌 외부 location을 사용하고 있다면,
          old-nifi 의 location 값을 new-nifi 가 가리킬 수 있도록 업데이트 한다.
      • nifi.flow.configuration.archive.dir
        • 만약 default 값(./conf/archive)을 사용하고 있다면,
          archive 내부의 *flow.xml.gz을 old-nifi 에서 new-nifi 로 복사한다.
        • default 값이 아닌 외부 location을 사용하고 있다면,
          old-nifi 의 location 값을 new-nifi 가 가리킬 수 있도록 업데이트 한다.
      • nifi.database.directory
        • old-nifi 의 location 값을 new-nifi 가 가리킬 수 있도록 업데이트 한다.
      • nifi.flowfile.repository.directory
        • old-nifi 의 location 값을 new-nifi 가 가리킬 수 있도록 업데이트 한다.
        • 업데이트 이후 해당 location 으로의 접근 권한이 없다면 데이터를 잃어버릴 수 있으니 백업 후 진행
      • nifi.content.repository.directory.default
        • old-nifi 의 location 값을 new-nifi 가 가리킬 수 있도록 업데이트 한다.
        • nifi.content.repository.directory.content1, nifi.content.repository.directory.content2.... 등
          여러 repos 가 old-nifi에 정의되어있다면, 모든 repos 를 똑같이 new-nifi 로 업데이트한다.
        • 업데이트 이후 해당 location 으로의 접근 권한이 없다면 데이터를 잃어버릴 수 있으니 백업 후 진행
        • 업데이트 이후 해당 property 이름이나 propert points(location) 값이 잘못된다면 데이터를 잃어버릴 수 있으니 백업 후 진행
      • nifi.provenance.repository.directory.default
        • old-nifi 의 location 값을 new-nifi 가 가리킬 수 있도록 업데이트 한다.
        • nifi.provenance.repository.directory.provenance1, nifi.provenance.repository.directory.provenance2.... 등
          여러 repos 가 old-nifi에 정의되어있다면, 모든 repos 를 똑같이 new-nifi 로 업데이트한다.
        • 업데이트 이후 해당 provenance repos 가 올바르게 이동되지 않았거나, properties 값이 올바르게 업데이트 되지 않는다면, 과거 이벤트들을 쿼리할 수 없으니(볼 수 없으니) 백업 후 진행
  • state-management.xml
    • 만약 <propert name="Directory"> 가 default 값(./state/local)을 사용하고 있다면,
      old-nifi 내의 ./state/local/* 의 값을 new-nifi 로 복사한다.
    • default 값이 아닌 외부 location을 사용하고 있다면,
      old-nifi 의 location 값을 new-nifi 가 가리킬 수 있도록 업데이트 한다.
    • 만약 클러스터 NiFi 를 업그레이드 하는 중이라면,
      old-nifi 의 <property name="Connect String"> 값을 new-nifi 로 업데이트한다.
      (zookeeper 는 old-nifi 가 사용하던 그대로 new-nifi 가 사용한다.)
    • 만약 클러스터 NiFi 를 업그레이드 하는 중이라면,
      old-nifi 의 <cluster-provider> 값을 new-nifi 로 업데이트한다.
    • 만약 zookeeper 도 새롭게 업그레이드 해야 한다면, [링크]를 참고 

 

참고로 눈으로 일일이 보면서 달라진 점을 찾아 업데이트하는 것 보다

diff 명령어를 사용하는 편이 좋다.

예를 들어 a.txt 와 b.txt 의 차이를 보고 싶다면

 

diff a.txt b.txt 

 

위와 같이 사용하면 됨.

 

 

 

< 1.12.1 NiFi 시작하기 >

 

old-nifi 의 값들을 모조리 new-nifi 로 옮긴 이후

new-nifi(1.12.1 버전) 를 start 하면 된다.

 

그럼 old-nifi 의 flow,variable, provenance 등이 새로운 버전으로 옮겨졌는지 확인해보자.

 

 

 

이동이 잘 되었따!

 

+ Recent posts