● 준비 환경
- Virtualbox를 통해 Centos7에 설치
- 기본적으로 클러스트를 구성하기 위해서 3대 설치
- 보통 주키퍼3대, 카프카3대로 별도로 구성하는데 여기서는 그냥 테스트용도이므로 가상머신 3대에 주키퍼랑 카프카를 같이 설치 진행
- Centos7에 OpenJDK8 혹은 Oracle JDK8 등 Java8 버전 설치
● 설치 전 작업(ROOT)
- 각 서버의 호스트 명 지정(필수조건은 아닌데, 설정해두면 편리)
hostnamectl set-hostname kafka1(호스트명)
hostnamectl set-hostname kafka2
hostnamectl set-hostname kafka3
|
- 자기 자신은 0.0.0.0 으로 호스트명과 세팅하고 다른 서버는 각각 아이피를 등록
0.0.0.0 kafka1
10.0.2.102 kafka2
10.0.2.103 kafka3
|
- 주키퍼와 카프카를 위한 방화벽 설정
## 주키퍼 포트
firewall-cmd --permanent --zone=public --add-port=2181/tcp
firewall-cmd --permanent --zone=public --add-port=2888/tcp
firewall-cmd --permanent --zone=public --add-port=3888/tcp
## 카프카 포트
firewall-cmd --permanent --zone=public --add-port=9092/tcp
## 방화벽 재시작
firewall-cmd --reload
|
● 주키퍼(ZOOKEEPER) 설치
- 적당한 곳에 Zookeeper를 다운로드 후, 압축 해제(/opt)
wget http://apache.tt.co.kr/zookeeper/stable/apache-zookeeper-3.5.5-bin.tar.gz
tar zxf apache-zookeeper-3.5.5-bin.tar.gz
ln -s apache-zookeeper-3.5.5-bin zookeeper
|
- 각각의 서버에 주기퍼 노드를 구분하기 위한 id가 필요 (루트 계정일 경우에는 mkdir -p /data)
#(1: kafka1, 2: kafka2, 3: kafka3)
echo 1 > /tmp/zookeeper/myid
|
- 설정파일
- zookeeper/conf 안에 zoo_sample.cfg가 있으니 zoo.cfg로 복사해서 사용
cd zookeeper/conf
cp zoo_sample.cfg zoo.cfg
vi zoo.cfg
|
- 아래처럼 주석을 풀고 추가작성을 하도록 한다. 3개의 서버에 모두 같은 설정
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/ tmp/zookeeper
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
maxClientCnxns=60
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1
server.1=kafka1:2888:3888
server.2=kafka2:2888:3888
server.3=kafka3:2888:3888
|
● 주키퍼 실행
- 실행
./zookeeper/bin/zkServer.sh start
|
- 정상 START
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
|
- 서비스등록을 위해 종료
./zookeeper/bin/zkServer.sh stop
|
● 설정파일
vi /etc/systemd/system/zookeeper.service
|
[Unit]
Description=zookeeper
After=network.target
[Service]
Type=forking
User=incon
Group=incon
SyslogIdentifier=zookeeper
WorkingDirectory=/tmp/zookeeper
Restart=always
RestartSec=0s
ExecStart=/opt/zookeeper/bin/zkServer.sh start
ExecStop=/opt/zookeeper/bin/zkServer.sh stop
[Install]
WantedBy=multi-user.target
|
- 시스템부팅 시 자동실행 설정
# 서비스 데몬 재시작
systemctl daemon-reload
# 주키퍼 실행 (종료는 stop, 재시작은 restart)
systemctl start zookeeper.service
# 실행상태 확인
systemctl status zookeeper.service
# 시스템 부팅할 때 자동실행 설정
systemctl enable zookeeper.service
|
● 카프카(KAFKA) 설치
- 적당한 곳에 kafka를 다운로드 후, 압축 해제(/opt)
wget http://mirror.apache-kr.org/kafka/2.2.0/kafka_2.11-2.2.0.tgz
tar xvf kafka_2.11-2.2.0.tgz
ln –s kafka_2.11-2.2.0.tgz kafka
|
- /opt/data 디렉토리 생성(카프카에 메시지가 저장되는 장소)
- 카프카도 별도서버에 설치하면 /myid 파일을 만들고 그 안에 숫자를 넣으면 되는데 여기선 주키퍼랑 같이 쓰니까 그걸로 사용
- 카프카 설정 파일 수정
vi kafka/config/server.properties
|
############################# Server Basics ############################
#서버 /myid에 값으로 각각 세팅
broker.id=1
############################# Logs Basics #############################
## 카프카 메시지저장분산디렉토리
log.dirs=/opt/data
############################# Zookeeper #############################
## 주기퍼 연결설정
## 서버1호스트명:서버1포트,서버2호스트명:서버2포트,서버3호스트명:서버2포트/주기퍼노드명
zookeeper.connect=kafka1:2181,kafka2:2181,kafka3:2181/incon-kafka
|
- zookeeper.connect 에서 마지막 /incon-kafka는 주기퍼 노드명이다. 작성하지 않으면 주기퍼 루트 노드에 저장된다. 그렇게 되면 관리하기가 어려우므로 이렇게 별도로 노드명을 기재
● 카프카 실행
- 실행 (실행 전에 주키퍼 먼저 실행)
bin/kafka-server-start.sh config/server.properties &
|
(& 를 붙일 시 백그라운드에서 실행)
- 정상 START
....중략....
[KafkaServer id=1] started (kafka.server.KafkaServer)
|
* 주키퍼 및 카프카 실행확인 : jps