Nifi를 활용하여 RDB Table 복제 2

2020. 3. 31. 22:54Nifi

목표 : 현재 Nifi클러스터는 120~126IP 사용하고 있고, 외부 데이터베이스 (150번 서버 MariaDB)에서 복수의 테이블을 또 다른 외부 데이터베이스 (162번 서버 MariaDB)Shell Script(Creation하는 Shell180번 서버에 존재 creation하는 shell콜하는 ShellNifi Cluster전체에 존재) 를 활용하여 복제

 

전제 조건

1.Nifi Cluster/etc/hosts 파일에 에대한 150,162,180번서버 정보가 있어야한다. 또한 위 서버는  서로 네트워크 통신이 서로 가능해야 한다.

2.Nifi 클러스터 모든 노드에 JDBC 드라이버가 설치 되어 있어야 합니다.

 

전체 WorkFlow

 

#1 List tables (Source 테이블들 조회)

Source table : 150번 서버의 test02student_tb, student_tb1두 개의 테이블

 

Student_tb

 

student_tb1

#1-1 Database Connection Pooling Service

 

 

#2 UpdateAttribute

 

#3 ExecuteSQL

 

#4 ExecuteStreamCommand

#4-1 /nifi/execute.sh (Nifi 전체 클러스터 내에 위치)

#!/bin/bash
sshpass -p root ssh -o StrictHostKeyChecking=no root@10.200.100.180 "sh /download/test02.sh"

*sshpass를 통하여 password 입력 없이 180번 서버 접속후 Test02.sh를 실행 (해당 쉘파일은 Nifi 클러스터 전체에 동일한 디렉토리에 있어야한다.pscp를 이용하여 배포)

 

#4-2 /download/test02.sh (180번 서버에 위치)

#!/bin/bash
mysql -h 10..162 -u test02 -ptest02 -e "create database test02 DEFAULT CHARACTER SET utf8;"
mysql -h 10..162 -u test02 -ptest02 test02 -e "CREATE TABLE student_tb (     sno int(11) NOT NULL,     name char(10) DEFAULT NULL,     det char(20) DEFAULT NULL,     addr char(80) DEFAULT NULL,     tel char(20) DEFAULT NULL,     PRIMARY KEY (sno) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;"
mysql -h 10..162 -u test02 -ptest02 test02 -e "CREATE TABLE student_tb1 (     sno int(11) NOT NULL,     PRIMARY KEY (sno) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;"

 

 

#5 PutDatabaseRecord

 

#6 실행 확인

Source(150번 서버) Table
Source Table(150번 서버)의 Record

 

Nifi Processor를 실행하기 전의 Target(180번 서버)의 상태
Nifi Flow를 실행한 이후에 Target(180번 서버)에 복제된 DB와 Table

데이터가 섞이지 않고 각 각의 테이블의 레코드 값들이 올바르게 들어간 것을 확인할 수 있다.