본문 바로가기

소질없는 개발

Zookeeper 를 이용한 batch 서버 HA 구성

0. 들어가기 전에

 - 이벤트 발생 시점과 동떨어진 배치를 수행하는 경우(주기적 실행) 배치서버를 단일로 구성할 경우 배치가 수행되지 않을 수 있고, 다중으로 구성할 경우 배치 중복 처리에 대한 우려가 있을 수 있다. 각 서버간 배치 수행 시간에 차등을 두어 이를 피하는 것이 가능하나 서버별로 스케줄링을 관리해야 하는 어려움이 있다. 배치의 역할과 중요도에 따라 HA 구성을 고려할 수 있고, 이 때 zookeeper 를 이용할 수 있다.

 

 
개요
Master(active) 서버와 Client(active + standby) 서버의 정보를 관리하는 persistent node 를 각각 생성하고,
배치 서버 instance 가 구동될 때 Client node 에 ephemeral node 를 추가한다.


1. 최초 batchClientServer instance 구동
 - Master/Client Data Node 생성 (persistent)
 - 자신의 hostname 을 Client Data Node(batchClient) 의 Child Node 로 생성 (ephemeral)
 - Master Data Node(naviBatchMaster) 에 자신의 hostname 을 기록 


 2-1. 이후 batchClientServer instance 구동 : Master 가 정상적인 경우
 - Master Data Node 에 기록된 hostname 을 가진 Client Child Node 가 존재하는 경우
 - 자신의 hostname 을 Client Data Node 에 Child Node 로 생성 (ephemeral)


 2-2. 이후 batchClientServer instance 구동 : Master 가 비정상적인 경우
 - Master Data Node 에 기록된 hostname 을 가진 Client Child Node 에 존재하지 않는 경우
 - 자신의 hostname 을 Client Data Node 에 Child Node 로 생성 (ephemeral)
 - Master Data Node 에 자신의 hostname 을 기록 


 3. batchClientServer instance 중지
 - 배치 서버가 중지되면 zookeeper 와 세션 연결이 종료되며 이때 ephemeral 로 생성한 node 가 delete 됨
 - zookeeper 에 연결된 다른 서버는 watcher 를 통해 NodeDeleted 이벤트 수신
 - Master Data Node 에 기록된 hostname 을 가진 Client Child Node 가 존재하는지 확인
 - Master 정보가 비정상적인 경우 자신의 hostname 을 Master Data Node 에 등록
 - 이 때, Master Data Node 의 version 정보를 확인하여 여러 서버가 동시에 Master Node 를 변경하는 것을 방지


4. 자체 오류 또는 외부 요인에 의해 유효하지 않은 Master Data Node 값을 가진 경우
 - 배치 스케줄러 수행시 현재 Master Node 에 기록된 정보가 정상인지 확인하여 비정상인 경우 자신을 master 로 등록


5. 배치 스케줄러 수행
 - 배치 스케줄러 수행시 자신이 master 인지 확인하여 master 인 경우 배치 수행
 - master 가 아닌 경우 master node 데이터를 update 함 (비정상인 경우에만 자신으로 변경 됨)

 

 

 

(2022.09.16)

다 필요 없고.. 그냥 shedlock 사용하면 됨 ㅠㅠ;;