티스토리 뷰

Windows환경에서 zookeeper 클러스터(Ensemble, 앙상블) 구축

kafka를 사용하기 위해서는 zookeeper가 필요해서 설치를 하였고, 그동안 별도 설정 없이 zookeeper와 kafka를 단순 서버만 띄워둔 채로 뒀었고, 운영 환경 시 클러스터 구축이 필요하다는 것 정도만 인지를 한 상태로 로그 서버 작업에 대한 일정을 진행하던 중 로깅용 kafka topic을 생성해서 logback의 kafka appender를 활용하여 kafka에 로그를 저장 후 logstash를 통해서 elasticserach 쪽으로 전달, kibana를 통해 visualizing 된 로그를 활용하는 방향으로 테스트를 진행해보기로 결정하며, 이왕 하는 김에 zookeeper와 kafka의 운영환경 구성에 대해서 좀 보려 한다.

 

zookeeper, kafka에 대한 설치는 이전에 작성한 내용을 참고 바란다.

https://mr-spock.tistory.com/46

 

[#5 Apache Kafka 구축] Spring boot 기반 마이크로서비스 아키텍처(Microservices Architecture, MSA)

#5 Apache Kafka 구축 spring.io/projects/spring-cloud-netflixnetflixtechblog.com/announcing-zuul-edge-service-in-the-cloud-ab3af5be08eekafka.apa che.org/ Apache Kafka Apache Kafka: A Distributed Str..

mr-spock.tistory.com

 

혹시나 다음에 또다시 서버를 구축하게 될 경우를 대비하여 블로그를 작성하는 편이라, 개념적인 설명보다는 실제 구축에 대한 내용을 주로 담고 있으니, zookeeper에 대한 클러스터(Enasemble, 앙상블)에 대한 내용은 다른 블로그를 참고 바라며, 홀수 개로 구축해야 된다는 정도만 알고 진행하며, 최소 5개를 권장하지만 이번 블로그에서는 3개 기준으로 설명하겠다.

 

1. zookeeper 복제 및 설정

일단 여러 개를 띄우려면 zookeeper소스가 여러 개만큼 복제를 해줘야 한다. 지금은 테스트 서버가 하나이기 때문에 이런 말을 사용하지만 zookeeper의 클러스터 환경이 서로 다른 호스트 간 이루어진다면 각 호스트마다 소스가 필요하다고 생각하면 쉽다.

나는 편의상 동일한 서버에 폴더의 위치만 다르게 구성하여 3개의 소스를 복제하였다. 편하게 설명하자면 아래의 구조와 같고 폴더 내 구조는 zookeeper의 소스 구조와 동일하다.

E:\zookeeper1
E:\zookeeper2
E:\zookeeper3

zookeeper 소스구조

이제 각 소스 별 /conf/zoo.cfg 파일을 아래와 같이 수정한다.

 

zookeeper1/conf/zoo.cfg

tickTime=2000
initLimit=10
syncLimit=5
dataDir=E:\\zookeeper1\\data
clientPort=2181
server.1=localhost:2888:3888
server.2=localhost:2889:3889
server.3=localhost:2890:3890

zookeeper2/conf/zoo.cfg

tickTime=2000
initLimit=10
syncLimit=5
dataDir=E:\\zookeeper2\\data
clientPort=2182
server.1=localhost:2888:3888
server.2=localhost:2889:3889
server.3=localhost:2890:3890

zookeeper3/conf/zoo.cfg

tickTime=2000
initLimit=10
syncLimit=5
dataDir=E:\\zookeeper3\\data
clientPort=2183
server.1=localhost:2888:3888
server.2=localhost:2889:3889
server.3=localhost:2890:3890

그리고 /data폴더에 myid라는 파일을 생성(확장자 없음) 내용은 공백 없이 숫자 1을 작성한다. zookeeper2의 경우 숫자 2, zookeeper3의 경우 숫자 3 

myid파일생성
내용은 블럭잡아봐도 아무 공백 없이 단순히 숫자만 입력

 

zoo.cfg파일의 내용을 보면 알겠지만 clientPort와 dataDir위치만 서로 다르다. 클러스터 구성의 내용과 관련된 부분은 아래의 3줄이다

server.1=localhost:2888:3888
server.2=localhost:2889:3889
server.3=localhost:2890:3890

3개의 zookeeper를 클러스터로 구성할 것이며 3개 서버에 대한 정보를 나타낸다. server.1이란 부분에서 숫자 1은 위에서 생성한 myid파일의 값에 해당한다. localhost는 서버의 ip를 입력한다. hostname을 입력해도 된다. 2888:3888 부분은 만약 zookeeper가 모두 각자 다른 서버에 있다면 2888:3888로 동일하게 해도 되지만 나는 같은 서버에서 구현하는 것이라 포트를 서로 다르게 세팅했다.

 

2. zookeeper 구동

위에서 한 작업만으로 클러스터 구축은 끝이다. 원래 zookeeper를 구동했던 것처럼 아래 명령을 통해 시작한다.

E:\zookeeper1\bin\zkServer.cmd

오류 메시지가 나타날 수 있지만, 설정을 잘못하지 않았으면 해당 오류는 다른 클러스터 서버들이 구동이 되지 않아서 나는 오류이다. 나머지도 순차적으로 기동을 해준다. 

E:\zookeeper2\bin\zkServer.cmd
E:\zookeeper3\bin\zkServer.cmd

그럼 나타났던 오류가 사라지면서 클러스터 환경으로 구성된 zookeeper를 사용할 수 있다. 

 

3. 마치며

다소 간단하게 작성되었고, 실행에 대한 화면은 없으나, 앞에서 작성한 zookeeper의 기본 구동이 이상 없이 작동 된 경우라면 이상없이 진행이 될 것이라 생각된다. 서로 다른 PC에서 클러스터 환경을 구축할 경우 clientPort와 클러스터에 사용되었던 2888:3888에 해당하는 부분 port를 방화벽에서 열어주어야 한다. 다음에는 kafka의 클러스터 구축에 대해서 내용을 작성해야겠다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
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
글 보관함