Zookeeper Configuration Setting


Standalone mode

ZooKeeper server를 standalone mode로 설정하는 것은 직관적이다. 서버는 JAR 파일에 포함되어 있기 때문에, 설치 시 configuration 파일이 생성된다.
따라서, ZooKeeper를 다운받고 이를 압축해제 하여 configuration 파일을 설정해주어야 한다. 아래는 그 예시이다.

tickTime=2000
dataDir=/var/zookeeper
clientPort=2181
  • tickTime: ZooKeeper가 사용하는 기본 시간 단위(milliseconds)로, heartbeats를 보내는데에 사용된다. 또한 세션 타임아웃 최소 단위는 tickTime의 2배로 설정
  • dataDir: 인메모리 데이터베이스 스냅샷을 저장할 공간. 특정 directory가 명시되지 않으면, 트랜잭션 로그는 database에 기록된다.
  • clientPort: client의 연결을 listen할 port 번호


Replicated ZooKeeper

tickTime=2000
dataDir=/var/zookeeper
clientPort=2181
initLimit=5
syncLimit=2
server.1=zoo1:2888:3888
server.2=zoo2:2888:3888
server.3=zoo3:2888:3888

Zookeeper 서비스 내 서버들의 Replicated group을 우리는 'quorum'이라 부른다. 그리고 이러한 Replicated mode의 설정을 위해서는 quorum내 존재하는 모든 서버들이 같은 설정의 configuration 파일을 가지고 있어야 한다. 이 Configuration 파일은 Standalone mode의 설정과 유사하지만, 약간의 추가된 설정이 있다.

  • initLimit은 quorum내의 Zookeeper 서버들이 leader에 연결할 때 사용되는 최대 시간을 제한하기 위해 사용하는 timeout 단위이다.
  • syncLimit은 서버가 leader로부터 얼마나 sync에 뒤쳐질 수 있는지를 제한하는 timeout 단위이다.

위 두 가지 timeout들은 모두 앞서 설정한 tickTime의 시간 단위를 사용한다. 즉, 이 예제에서 initLimit의 timeout은 5 ticks이며 tickTime이 2000 milliseconds이기 때문에, '10초'로 설정된 것이다.

다음으로 server.X 목록들은 ZooKeeper 서비스를 구성하는 서버들을 나타낸다. ZooKeeper 서버가 시작되면 서버는 dataDir 경로에 존재하는 myid 파일을 참조함으로써 해당 서버가 어떤 서버인지 식별한다. myid 파일은 server.X의 x에 해당하는 server 번호를 내용으로 가지고 있어야 한다. 따라서 myid 파일이 해당 경로에 존재하지 않는다면 사용자가 직접 생성해주어야 한다.

마지막으로 위 server list들에 붙어 있는 2888과 3888의 포트 번호들에 대해 알아보자. ZooKeeper 서비스 내의 peer들은 다른 peer와 연결하기 위해 2888 포트 번호를 사용한다. 이 연결은 peer들간 통신이 가능하게 하기 위한 필수적 연결이다. 더 세부적으로 이야기하면, ZooKeeper 서버는 follower들을 leader에 연결시키기 위해 이 포트 번호를 사용한다. 즉, ZooKeeper의 leader가 선출되면 follower는 2888번 포트를 사용하여 TCP 연결을 leader에게 개방한다. 다음으로 포트 번호 3888번은 Service의 leader 선출을 위한 Election에 사용한다. Leader Election 역시 TCP 연결을 사용해서 진행되기 때문에 2888번과 충돌하지 않는 다른 포트 번호를 사용하는 것이다.


+ Recent posts