기술 가이드

Ubuntu 18.04에 단일 노드 Apache ZooKeeper 설치 및 구성

4 min read 시스템 운영 업데이트됨 18 Oct 2025
Ubuntu 18.04에서 ZooKeeper 단일 노드 설치 가이드
Ubuntu 18.04에서 ZooKeeper 단일 노드 설치 가이드

ZooKeeper 설치 개요 이미지: 데이터 센터 서버와 ZooKeeper 관련 다이어그램

요약

한문장 정의

ZooKeeper는 분산 환경에서 구성 정보, 이름, 동기화, 그룹 서비스 프로비저닝을 중앙에서 관리하는 Java 기반 오픈소스 서비스입니다.

목표 독자와 주요 의도

  • 대상: Ubuntu 18.04를 운영하는 시스템 관리자와 DevOps 엔지니어
  • 주요 의도: ZooKeeper 단일 노드 설치 및 기본 운영 준비
  • 관련 의도 변형: Java 설치, systemd 서비스 등록, ZooKeeper 구성, 로컬 테스트

요구 사항

  • Ubuntu 18.04가 실행되는 서버
  • 루트(root) 또는 sudo 권한을 가진 계정

중요: 프로덕션 환경에서는 단일 노드 구성이 가용성 요구를 충족하지 않습니다. 다중 노드(홀수 개의 노드) 클러스터 구성을 고려하세요.

소개 및 핵심 특징

ZooKeeper는 다음과 같은 상황에 적합합니다:

  • 분산 시스템의 상태 정보 저장
  • 구성 및 서비스 위치 정보 관리
  • 분산 락 또는 리더 선출 같은 간단한 동기화

장점 요약: 신뢰성, 단순한 아키텍처, 빠른 처리, 낮은 지연, 확장성(클러스터 확장 시)

간단 용어: Znode — ZooKeeper의 계층적 데이터 노드. tickTime — 세션 타임아웃이나 리더 선출 등에 영향 주는 기본 시간 단위(밀리초).


준비 단계: 시스템 업데이트

먼저 시스템 패키지를 최신으로 업데이트합니다.

apt-get update -y
apt-get upgrade -y

업데이트가 끝나면 재부팅을 권장합니다.

reboot

노트: SSH 세션이 끊기므로 필요한 경우 로컬 콘솔이나 매니저 툴에서 실행하세요.

Java 설치

ZooKeeper는 Java로 작성되어 있습니다. Ubuntu 18.04 기본 저장소에 최신 Oracle Java가 없으므로 PPA를 추가합니다.

add-apt-repository ppa:linuxuprising/java

저장소를 갱신하고 Oracle Java 11을 설치합니다.

apt-get update -y
apt-get install oracle-java11-set-default

설치 후 Java 버전을 확인합니다.

java --version

예상 출력 예제:

java 11.0.2 2018-10-16 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.2+7-LTS)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.2+7-LTS, mixed mode)

Note: OpenJDK를 사용하려면 oracle-java11 대신 openjdk-11-jdk 패키지를 설치해도 됩니다.


ZooKeeper 전용 사용자 생성

서비스 보안을 위해 전용 시스템 사용자를 만듭니다.

useradd zookeeper -m
usermod --shell /bin/bash zookeeper
passwd zookeeper
usermod -aG sudo zookeeper

설명: zookeeper 사용자가 sudo 그룹에 추가되면 필요 시 제한된 관리 작업을 수행할 수 있습니다. 프로덕션에서는 sudo 권한을 더 엄격히 제어하세요.


ZooKeeper 설치

디스크에 상태와 로그를 저장할 디렉터리를 생성하고 권한을 설정합니다.

mkdir -p /data/zookeeper
chown -R zookeeper:zookeeper /data/zookeeper

/opt로 이동해 아파치 아카이브에서 배포판을 다운로드하고 압축을 풉니다. 이 가이드에서는 3.4.9 버전을 사용합니다(원본 자료 기준).

cd /opt
wget https://archive.apache.org/dist/zookeeper/zookeeper-3.4.9/zookeeper-3.4.9.tar.gz

tar -xvzf zookeeper-3.4.9.tar.gz
mv zookeeper-3.4.9 zookeeper
chown -R zookeeper:zookeeper /opt/zookeeper

중요: 최신 안정화 버전 사용을 권장합니다. 아카이브 대신 최신 릴리스 URL을 확인하세요.


구성 파일 만들기

ZooKeeper 설정 파일을 만듭니다.

nano /opt/zookeeper/conf/zoo.cfg

다음 내용을 추가합니다.

tickTime=2500
dataDir=/data/zookeeper
clientPort=2181
maxClientCnxns=80

설명: tickTime은 기본 시간 단위(밀리초)입니다. session 타임아웃과 내부 타이밍 동작에 영향을 줍니다. 단일 노드 테스트 목적일 경우 추가 서버 항목(예: server.1=…)은 필요 없습니다.


ZooKeeper 시작과 테스트 연결

설치를 완료한 뒤 ZooKeeper를 시작합니다.

cd /opt/zookeeper
bin/zkServer.sh start

예상 출력:

ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

로컬 클라이언트로 접속해 명령을 실행해 봅니다.

bin/zkCli.sh -server 127.0.0.1:2181

접속 성공 시 프롬프트가 나타납니다.

[zk: 127.0.0.1:2181(CONNECTED) 1]

help 명령으로 사용 가능한 클라이언트 명령을 확인할 수 있습니다.

help
ZooKeeper -server host:port cmd args
    stat path [watch]
    set path data [version]
    ls path [watch]
    ... (중략)

접속을 종료하려면 quit를 입력합니다.

quit

서비스 정지:

bin/zkServer.sh stop

출력 예시:

ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Stopping zookeeper ... STOPPED

systemd 서비스 파일 만들기

서버 재부팅 시 자동 실행 및 관리 편의를 위해 systemd 유닛을 만듭니다.

nano /etc/systemd/system/zookeeper.service

파일 내용:

[Unit]
Description=Zookeeper Daemon
Documentation=http://zookeeper.apache.org
Requires=network.target
After=network.target

[Service]
Type=forking
WorkingDirectory=/opt/zookeeper
User=zookeeper
Group=zookeeper
ExecStart=/opt/zookeeper/bin/zkServer.sh start /opt/zookeeper/conf/zoo.cfg
ExecStop=/opt/zookeeper/bin/zkServer.sh stop /opt/zookeeper/conf/zoo.cfg
ExecReload=/opt/zookeeper/bin/zkServer.sh restart /opt/zookeeper/conf/zoo.cfg
TimeoutSec=30
Restart=on-failure

[Install]
WantedBy=default.target

데몬 리로드와 서비스 시작, 부팅 시 자동 시작을 등록합니다.

systemctl daemon-reload
systemctl start zookeeper
systemctl enable zookeeper

상태 확인:

systemctl status zookeeper

상태 출력 예시(요약):

? zookeeper.service - Zookeeper Daemon
   Loaded: loaded (/etc/systemd/system/zookeeper.service; disabled; vendor preset: enabled)
   Active: active (running) since Wed 2019-03-06 15:03:01 UTC; 5s ago
   ...

운영 체크리스트 (role 기반)

  • 시스템 관리자
    • Java 및 패키지 업데이트 정책 수립
    • 디스크 사용량 모니터링 및 /data/zookeeper 백업 계획
    • systemd 유닛 파일 권한과 로그 위치 확인
  • DevOps 엔지니어
    • 프로덕션은 홀수 노드(3/5) 클러스터 권장
    • 서버 간 시간 동기화(NTP) 보장
    • 방화벽에서 2181, 2888, 3888 포트 정책 검토
  • 애플리케이션 개발자
    • 재시도 정책과 세션 타임아웃 튜닝
    • 클라이언트 라이브러리의 ZooKeeper 연결 예외 처리

보안 권장 사항

  • ZooKeeper ACL을 사용해 Znode 접근 제어를 설정하세요.
  • 운영 환경에서 외부 접속을 제한하고 내부 네트워크로만 클라이언트 포트를 열어 두세요.
  • 로그 디렉터리와 데이터 디렉터리의 파일 권한을 최소권한으로 설정하세요.
  • TLS/SSL 및 인증 기능이 필요한 경우 최신 ZooKeeper 버전과 관련 설정을 확인하세요.

프로덕션으로 확장하기 위한 미니 플레이북

  1. 홀수 개의 노드를 준비하고 각 노드에 동일한 ZooKeeper 버전 설치
  2. 각 노드의 zoo.cfg에 server.N=host:peerPort:leaderElectionPort 항목 추가
  3. 각 노드의 dataDir에 myid 파일 생성(예: echo 1 > /data/zookeeper/myid)
  4. 방화벽과 라우팅을 구성해 노드 상호 연결 허용
  5. 단계별로 롤링 업그레이드를 계획하고, 스냅샷과 백업을 준비

문제 해결 팁

  • 서버가 STARTED로 표시되지 않으면 로그 확인:
cat /opt/zookeeper/logs/zookeeper.out
  • 클라이언트가 연결되지 않을 경우 포트 및 방화벽 확인:
ss -ltnp | grep 2181
ufw status
  • 세션 타임아웃 이슈 발생 시 tickTime과 클라이언트 설정을 재검토

인수 기준

  • systemctl status zookeeper가 active (running)을 반환해야 합니다.
  • bin/zkCli.sh로 127.0.0.1:2181에 접속해 기본 명령(ls, create, get)을 수행할 수 있어야 합니다.
  • /data/zookeeper에 ZooKeeper가 데이터를 기록해야 합니다.
  • 서비스가 재부팅 후 자동으로 시작되어야 합니다.

간단 용어집

  • Znode: ZooKeeper의 계층적 데이터 노드
  • tickTime: ZooKeeper의 기본 시간 단위(밀리초)
  • clientPort: 클라이언트 연결 포트(기본 2181)

요약 및 다음 단계

요약: 이 문서는 Ubuntu 18.04에 ZooKeeper 단일 노드를 설치하고 systemd로 서비스화하는 전 과정을 다룹니다. 개발/테스트 환경에서는 단일 노드가 유용하지만, 가용성과 일관성이 중요한 프로덕션 환경에서는 반드시 홀수 개의 노드로 클러스터를 구성하세요.

다음 권장 작업:

  • 최신 ZooKeeper 안정화 버전으로 업그레이드 계획 수립
  • 백업 및 모니터링(로그, 디스크, 메트릭) 설정
  • 프로덕션 배포 전 보안(ACL, 네트워크 제한) 점검

중요: 추가 도움이 필요하면 사용 사례(테스트 vs 프로덕션), 노드 수, 네트워크 구성을 알려주시면 확장 가이드를 더 구체적으로 제공하겠습니다.

공유하기: X/Twitter Facebook LinkedIn Telegram
저자
편집

유사한 자료

아이폰을 Wi‑Fi 핫스팟으로 설정하는 방법
모바일

아이폰을 Wi‑Fi 핫스팟으로 설정하는 방법

Fortnite Crew 구독 취소 가이드
게임 가이드

Fortnite Crew 구독 취소 가이드

LGV 이론 시험 온라인 학습 가이드
운전시험

LGV 이론 시험 온라인 학습 가이드

Ubuntu 9.10 + FreeNX로 터미널 서버 설정
리눅스 서버

Ubuntu 9.10 + FreeNX로 터미널 서버 설정

Windows 8/8.1에서 터치패드 스와이프 끄는 방법
Troubleshooting

Windows 8/8.1에서 터치패드 스와이프 끄는 방법

Windows에서 색상 관리(컬러 매니지먼트) 여는 방법
튜토리얼

Windows에서 색상 관리(컬러 매니지먼트) 여는 방법