728x90
이번 포스팅에서는 작년 기상청 프로젝트에서 프로세서들을 관리하는 툴이 필요하여 ZooKeeper가 검토되었고 그때 자료조사를 한 내용를 올리도록 하겠습니다.
순서는
2020/06/11 - [개발관련 자료] - ZooKeeper #1 - 개요 및 특징
2020/06/11 - [개발관련 자료] - ZooKeeper #2 - 데이터모델
2020/06/11 - [개발관련 자료] - Zookeeper #3 - 사용
으로 진행되며 도입 검토 차원에서 이루어진 조사라서 실무적용 보다는 ZooKeeper란 어떤 것인지 파악하는 정도로만 생각하시면 될듯합니다.
1. 클러스터 관리
- 그룹 멤버십 목록을 가질 부모 znode를 생성(예: /members)
- 부모 znode에 자신을 위한 자식 znode를 ephemeral로 생성 (예: /members/m-hostip
- 자식 znode 데이터는 다른 구성원이 자신과 통신하는데 필요한 정보 저장(예: IP/Port) 또는 주기적으로 상태를 변경(load, memory, CPU etc.)
- 탈퇴하고자 할 경우 자신에 해당하는 znode를 삭제
- 멤버십 목록, 주기적 갱신(각 클라이언트) - 주기적으로 getChildren 실행해서 목록 갱신
- 멤버십 목록, Watch 이용(각 클라이언트) - 부모 znode에 getChildren 로 WATCH 등록하고 getChildren 결과로 목록 갱신
- NodeChildrenChanged 이벤트 수신 시, 위 과정 재실행
2. 리더 선출
- 마스터 후보 등록: 부모 znode에 자신을 위한 자식 znode를 시퀀스 & ephemeral 로 생성 (예: /masters/m-0000000010)
- 마스터 선출
- 부모 znode에 getChild로 WATCH 등록
- NodeChildrenChanged 이벤트 수신시, 현재 마스터가 없는지 확인
- 마스터에 해당 자식 znode가 없으면 부모 znode에 자식 znode를 구한뒤 시퀀스 번호가 가장 작은 znode를 마스터로 선택
- 부모 znode에 getChild로 WATCH 등록
3. 분산 배타적 잠금
- N개의 클라이언트가 잠금(lock)을 소유하려고 시도한다고 가정
- 클라이언트들을 임시, 순차znode를 /cluster/locknode에 생성
- 클라이언트들은 잠금 znode 하위의 자식 리스트를 요청한다
- 가장 낮은 ID를 가진 클라이언트가 잠금을 소유한다.
- 그 외의 클라이언트들은 감시(WATCH)를 수행한다.
- 통지가 발생할 떄마다 잠금을 확인한다.
- 잠금을 해제하고 싶은 클라이언트는 노드를 삭제하고 다음 클라이언트가 잠금을 획득하게 된다.
4. 기타 용도
- 이벤트 통지: WATCH 사용
- pub/sub : SEQUENCE사용
- 분산카운터: SEQUENCE 또는 znode의 version 사용
5. Kafka 적용
○ Kafka의 기본 구성 요소와 동작
- Kafka는 발행-구독(publish-subscribe) 모델을 기반으로 동작하며 크게 producer, consumer, broker로 구성된다.
- Kafka의 broker는 topic을 기준으로 메시지를 관리한다.
- Producer는 특정 topic의 메시지를 생성한 뒤 해당 메시지를 broker에 전달한다.
- Broker가 전달받은 메시지를 topic별로 분류하여 쌓아 놓으면, 해당 topic을 구독하는 consumer들이 메시지를 가져가서 처리하게 된다.
- Kafka는 확장성(scale-out)과 고가용성(high availability)을 위하여 broker들이 클러스터로 구성되어 동작하도록 설계되어있다.
- 심지어 broker가 1개 밖에 없을 때에도 클러스터로써 동작한다.
- 클러스터 내의 broker에 대한 분산 처리는 아래의 그림과 같이 Apache ZooKeeper가 담당한다.
- Zookeeper는 분산 메시지 큐의 정보를 관리해주는 역할로 Kafka에서 반드시 실행되어야 한다.
- Kafka 패키지에 기본적으로 포함되어 있는 config/zookeeper.properties 파일은 하나의 Zookeeper 인스턴스를 실행하는데 쓰이는 설정 파일이다.
- 3개의 인스턴스로 이루어진 클러스터를 구축하기 위해서는 인스턴스 간 통신을 할 때 필요한 설정을 추가해 주어야 한다.
- config/zookeeper.properties 파일을 열면 기본적으로 다음의 항목들이 설정되어 있다.
dataDir=/tmp/zookeeper
clientPort=2181
maxClientCnxns=0
728x90
'개발관련 자료' 카테고리의 다른 글
인플럭스DB(InfluxDB) #3 - 용어 정리 (0) | 2020.06.11 |
---|---|
인플럭스DB(InfluxDB) #2 - 주요 개념 (0) | 2020.06.11 |
인플럭스DB(InfluxDB) #1 - 개요 및 특징 (0) | 2020.06.11 |
쥬키퍼(ZooKeeper) #2 - 데이터모델 (0) | 2020.06.11 |
쥬키퍼(ZooKeeper) #1 - 개요 및 특징 (0) | 2020.06.11 |
댓글