1. 시작
업무에서 이중화 요구사항에 따라 규모 있는 cluster를 구성해야 한다.
추후 업무에 내가 정리하고 참고하기 위해 글을 작성한다.(망각 방지)
2. zookeeper
- Apache zookeeper 는 분산시스템을 위한 조정 서비스이다.
- Java로 만든 프로그램이다.(JVM 위에서 실행한다.)
- 각 호스트마다 leader와 follower 역할로 구분되며 모든 쓰기 요청은 leader가 받고 leader가 follower들에게 update를 요청한다.
- leader가 죽을경우(장애발생) follower 중 하나가 leader가 된다.
3. 목표
한 호스트에 필수로는 Apache NiFi , Apache Kafka , ElasticSearch을 구성하는 것이며 추가로 필요할 경우 더 추가할 예정이다.
ElasticSearch는 zookeeper를 사용하지 않기 때문에 따로 구성을 해줄 예정이다.
[참고] Elastic에서 Zookeeper를 사용하지 않는 이유
https://www.elastic.co/kr/blog/found-zookeeper-king-of-coordination#what-we-dont-use-zookeeper-for
Docker로 구성하는것이 가장 쉽고 간편하지만 Docker를 사용하지 않고 구성할 예정이다.
4. 설치
4.1. JAVA 설치
Zookeeper는 자바 애플리케이션이기 때문에 매우 기본적으로 설치해야 한다.
OracleJDK와 OpenJDK가 있지만 라이선스가 없다면 OpenJDK를 사용해야 추후 라이선스 분쟁을 예방할 수 있다.
sudo apt-get update && sudo apt-get install openjdk-11-jdk
4.2. 네임 서버 매핑 `/etc/hosts`
편의를 위해 각 호스트 주소를 네임으로 매핑해 주는 작업을 진행한다.
선행작업 - 텍스트 에디터 설치
vi 에디터를 사용할건데 취향에 따라 설치해 줄 것
sudo apt install vim
`/etc/hosts` 파일 수정
vi /etc/hosts
`/etc/hosts` 파일 맨 아래에 아래 내용을 삽입해 준다.
host주소 이름
host주소2 이름
host주소3 이름
# Example
192.168.0.123 node1
192.168.0.124 node2
192.168.0.125 node3
4.3. zookeeper 설치
우선 아래 사이트에서 zookeeper 버전을 확인 바란다.
https://downloads.apache.org/zookeeper/
최신 버전은 current , 그 이하 버전은 아래 버전을 선택하고 "apache-zookeeper-x.x.x-bin.tar.gz" 파일을 우클릭하여 링크 주소 복사를 한 다음 `wget` 명령어를 사용하여 다운로드한다.
나는 3.7.1 버전을 사용하겠다.
4.3.1. zookeeper 다운로드
zookeeper를 설치할 디렉터리로 이동 후 아래 명령어를 따른다.(3.7.1 버전임)
나는 테스트 목적이기 때문에 home 디렉터리에서 설치했다.(권장하지 않음)
wget downloads.apache.org/zookeeper/zookeeper-3.7.1/apache-zookeeper-3.7.1-bin.tar.gz
4.3.2. zookeeper 압축 해제
tar -zxvf apache-zookeeper-3.7.1-bin.tar.gz
4.4. zookeeper server id 생성
서버 id를 생성해야 한다.
아래 명령어로 server id를 생성해 주자(서버 id는 중복될 수 없다.)
4.4.1 선행 작업 - server id를 저장할 디렉터리 생성
mkdir -p /data
4.4.2 server id 생성
꼭 1,2,3 이 아니어도 된다.
echo 서버id > /data/myid
# Example
echo 1 > /data/myid
# 1번 서버
echo 2 > /data/myid
# 2번 서버
echo 3 > /data/myid
# 3번 서버
4.5. `zoo.cfg` 설정
편의를 위해 zookeeper가 설치된 위치를 `$ZOOKEEPER_HOME` 명칭으로 사용하겠다.
`zoo.cfg` 파일을 `$ZOOKEEPER_HOME/config/`디렉터리에 생성해 주자.
vi $ZOOKEEPER_HOME/config/zoo.cfg
# 팔로워가 리더에 접속할 수 있는 시간
# initLimit * tickTime = 40초 로 설정된다.
initLimit=10
tickTime=2000
# 리더가 될 수 있는 팔로워의 최대 갯수를 나타낸다.
syncLimit=5
# myid가 저장될 디렉토리 위치이다.
dataDir=/data
# 클라이언트가 접속할 포트 번호이다.
clientPort=2181
# 앙상블을 이루는 서버 정보이다.
# server.X=hostname:peerPort:leaderPort
# peerPort는 앙상블 서버들이 상호 통신하는 데 사용되는 포트 번호이다.
# leaderPort는 리더를 선출하는 데 사용되는 포트 번호이다.
server.1=node1:2888:3888
server.2=node2:2888:3888
server.3=node3:2888:3888
# 자동으로 생성되는 스냅샷을 24시간마다 최대 3개를 유지하고 나머지는 제거한다.
autopurge.snapRetainCount=3
autopurge.purgeInterval=24
[참고] zoo.cfg 파일, myid 은 아래 사이트를 참고하였다.
https://data-engineer-tech.tistory.com/8
4.6. zookeeper 실행 및 상태확인
# zookeeper 시작
ZOOKEEPER_HOME/bin/zkServer.sh start
# zookeeper 상태보기
ZOOKEEPER_HOME/bin/zkServer.sh status
`ZOOKEEPER_HOME/bin/zkServer.sh status` 명령어를 사용하면 leader 혹은 follower 문자가 나오는데 해당 zookeeper 서버는 leader이다 / follower이다라는 뜻이다.
'클러스터 구성' 카테고리의 다른 글
[Elasticsearch][Ubuntu] Elasticsearch 구성하기 (0) | 2023.08.13 |
---|---|
[kafka][Ubuntu][NiFi] Apache Kafka cluster 구성하기 (0) | 2023.08.06 |
[NiFi][Ubuntu] Apache NiFi cluster 구성하기 (0) | 2023.08.02 |