개요
Zookeeper는 분산 시스템에서 노드 간의 동기화와 협력을 지원하는 중간 소프트웨어입니다. 파일 시스템과 유사한 트리 구조를 사용하며, 변경 사항을 클라이언트에게 실시간으로 알리는 기능도 제공합니다.
- 공식 사이트: https://zookeeper.apache.org/
- 구성 요소: 하나의 리더(Leader)와 여러 팔로워(Follower)로 구성된 클러스터입니다. 절반 이상의 노드가 살아 있어야 정상 작동하며, 보통 홀수 개의 서버를 권장합니다.
- 데이터 일관성: 모든 서버는 동일한 데이터 복사를 유지하며, 클라이언트가 어느 서버에 연결되더라도 동일한 데이터를 받습니다.
- 실시간 처리: 한 클라이언트가 데이터를 업데이트하면 다른 클라이언트들도 빠르게 최신 데이터를 받습니다.
// 홀수 대비 설명
// 예를 들어 5명이 회의를 하면 3명 이상이 동의하면 결정이 가능하다.
// 하지만 4명인 경우 2명이 반대하면 결정이 나지 않으므로 홀수를 추천합니다.
설치
Linux 환경
다음은 Linux 환경에서 Zookeeper를 설치하는 과정입니다.
// 압축 해제
mkdir /opt/module/
tar -zxvf apache-zookeeper-3.9.1-bin.tar.gz -C /opt/module/
cd /opt/module/
// 디렉토리 이름 변경
mv apache-zookeeper-3.9.1-bin zookeeper-3.9.1
// 데이터 디렉토리 생성
cd zookeeper-3.9.1
mkdir zkData
// 설정 파일 수정
cp conf/zoo_sample.cfg conf/zoo.cfg
sed -i 's/^dataDir=.*/dataDir=\/opt\/module\/zookeeper-3.9.1\/zkData/' conf/zoo.cfg
// 서비스 시작 및 상태 확인
cd /opt/module/zookeeper-3.9.1/bin
sh zkServer.sh start
sh zkServer.sh status
// 포트 확인
jps -l | grep QuorumPeerMain
netstat -anlp | grep $(jps -l | grep QuorumPeerMain | awk '{print $1}') | grep tcp
주요 설정 파라미터
아래는 Zookeeper의 주요 설정값들입니다.
- tickTime: 기본값 2000ms. 클라이언트와 서버 간 심박 신호 시간 간격.
- initLimit: 기본값 10. 리더와 팔로워의 초기 연결 허용 시간.
- syncLimit: 기본값 5. 리더와 팔로워 간 데이터 동기화 시간 제한.
- dataDir: 데이터 저장 경로.
- clientPort: 클라이언트 접속 포트 (기본값 2181).
클러스터 구성
다음은 Zookeeper 클러스터를 구성하기 위한 예시 설정입니다.
# 심박 시간 설정
tickTime=2000
# 초기 동기화 시간 제한
initLimit=10
# 데이터 동기화 시간 제한
syncLimit=5
# 데이터 저장 디렉토리
dataDir=/opt/module/zookeeper-3.9.1/zkData
# 클라이언트 접속 포트
clientPort=2181
# 클러스터 구성
server.1=192.168.19.1:2888:3888
server.2=192.168.19.2:2888:3888
server.3=192.168.19.3:2888:3888
각 서버의 myid 파일을 다음과 같이 작성해야 합니다.
// 각 노드에서 실행
echo "1" > /opt/module/zookeeper-3.9.1/zkData/myid # 첫 번째 서버
echo "2" > /opt/module/zookeeper-3.9.1/zkData/myid # 두 번째 서버
echo "3" > /opt/module/zookeeper-3.9.1/zkData/myid # 세 번째 서버
클러스터 시작
모든 노드에서 아래 명령어를 실행하여 서비스를 시작합니다.
sh zkServer.sh start