Hello, Freakin world!

[docker-compose] 주키퍼 클러스터 만들기 본문

도커

[docker-compose] 주키퍼 클러스터 만들기

johnna_endure 2021. 2. 17. 18:17

docker-compose.yml

version: "3.0"
services:
  zk1:
    image: zookeeper:3.5
    restart: always
    hostname: zk1
    ports:
      - 2181:2181
    environment:
      ZOO_MY_ID: 1
      ZOO_SERVERS: server.1=zk1:2888:3888;2181 server.2=zk2:2888:3888;2181 server.3=zk3:2888:3888;2181

    volumes:
      - "~/zk-cluster/zk1/data:/data"

  zk2:
    image: zookeeper:3.5
    restart: always
    hostname: zk2
    ports:
      - "2182:2181"
    environment:
      ZOO_MY_ID: 2
      ZOO_SERVERS: server.1=zk1:2888:3888;2181 server.2=zk2:2888:3888;2181 server.3=zk3:2888:3888;2181
    volumes:
      - "~/zk-cluster/zk2/data:/data"

  zk3:
    image: zookeeper:3.5
    restart: always
    hostname: zk3
    ports:
      - "2183:2181"
    environment:
      ZOO_MY_ID: 3
      ZOO_SERVERS: server.1=zk1:2888:3888;2181 server.2=zk2:2888:3888;2181 server.3=zk3:2888:3888;2181
    volumes:
      - "~/zk-cluster/zk3/data:/data"

  zoo-navi:
    image: elkozmon/zoonavigator
    ports:
      - 9000:9000
    environment:
      HTTP_PORT: 9000

 

볼륨 설정

docker hub의 공식 zookeeper 리포지토리의 도커파일을 참고해야된다.

도커파일에서 컨테이너의 루트를 기준으로 각 디렉토리를 생성하고 있는데(/data, /logs, /conf, /datalog)

볼륨을 설정하려고 한다면 호스트의 디렉토리를 여기에 매핑해주면 된다.

위에서는 data 부분만 볼륨을 설정해놓았다.

 

ZOO_MY_ID

클러스터 내에서 해당 id는 유일해야 한다. 주키퍼 클러스터에서 주키퍼를 식별하기 위한 값이다.

 

ZOO_SERVERS

주키퍼 버전 3.5부터 문법이 변경됐다.

server.id=<address1>:<port1>:<port2>[:role];[<client port address>:]<client port>

어떤 부분이냐면 client port 부분이다. server.1=zk1:2888:3888;2181 에서 ;뒤에 클라이언트 포트인 2181을 덧붙여 줘야 된다.

개인적으로 이 부분 때문에 하루종일 헤맸다... 공식 문서를 꼭 읽는 습관을 들이자.

붙이지 않을 경우 zkCli.sh를 이용해 해당 주키퍼에 접속할 수 없었다. 주키퍼 서버에 접속해 각 정보를 관찰할 수 없다는 얘기다.

그렇다고 주키퍼 서버 간에 통신이 되지 않는다는 말은 아니다. 주키퍼 피어끼리는 2888, 3888 포트로 통신하기 때문이다.

 

zoonavigator

zoonavigator를 통해 주키퍼 정보를 웹을 통해 살펴볼 수 있다.

localhost:9000으로 접속해 zk1:2181, zk2:2181, zk3:2181 로 해당 주키퍼에 접속이 가능하다.

주의할 점은 호스트에 바인딩된 주소가 아니라 도커 내에 할당된 네트워크 주소를 이용한다는 점이다.

 


위의 docker-compose.yml 이 위치한 디렉토리에서 아래의 커맨드를 실행시키면 작동한다.

 

$) docker-compose up -d

 

작동을 중지하고 싶다면 docker-compose down 을 입력하자.

모든 서버가 내려가고 생성된 컨테이너도 삭제시켜준다.

Comments