Zookeeper 세션(Session)

 

·       Version : Zookeeper

 

주키퍼에서 세션(session)  주키퍼 서버와 클라이언트의 연결을 의미한다. 세션 상태는 5가지가 있다.

·       Connecting : 클라이언트가 주키퍼 서버와 연결을 시도하고 있는 상태이다.

·       Connected : 서버와 연결된 상태로, z노드에 연산을 수행할 있는 상태이다.

·       Closed : close() 메소드에 의해 명시적으로 연결을 종료했거나, 세션 타임아웃, 인증 실패 등으로 서버와 연결이 종료된 상태

·       Disconnected : 시스템 장애, 네트워크 장애등으로 서버와의 접속이 끊긴 상태이다. Disconnected 상태에서는 클라이언트가 자동으로 파라메터로 받은 서버 대에 다시 접속을 시도하며, 이때. 서버 접속시 발급받은 64비트의 세션 아이디를 재접속시 사용하여 세션값을 계속 유지 있다. Disconnected 상태에서는 임시노드는 삭제되지 않는다.

·       Session Expired : 세션 타임아웃 시간동안 세션 유지 요청이 없으면 세션을 무효화한다. 세션 타임아웃 시간을 너무 짧게 설정하면 세션이 너무 자주 끊겨 임시 노드가 삭제되는 문제가 있으며, 타임 아웃 시간이 너무 길면 Session Expired 상태에 대한 이벤트를 받는데 오래 걸린다.

 

 

주키퍼는 세션 연결과 읽기 연산시 이벤트를 받을 있는 와처(watcher) 설정하는 기능을 제공한다. 와처는 세션의 상태가 변경되었거나 관심 있는 노드의 상태가 변경되었을때 클라이언트가 이벤트를 받아 처리할 있게 하는 기능을 제공한다. 와처는 옵저버(Observer) 패턴을 취하고 있어 이벤트 대상에 콜백 객체를 등록하고 조건에 만족한 이벤트가 발생하면 콜백 객체로 등록된 와처를 호출하는 방식을 취한다.

 

클라이언트가 주키퍼 서버에 연결되면 Peer-To-Peer FIFO 네트워크 채널을 생성한다. 네트워크 채널은 세션이 종료될 때까지 유지한다. , 한번 생성된 소켓은 계속 사용한다. 특정 z노드에 와처를 등록하면 클라이언트에서는 메모라에 와처 객체를 등록한다. 주키퍼 서버로는 z노드의 패스와 클라이언트 호스트 정보를 전달하고, 서버에는 z노드와 와처를 등록한 클라이언트 목록을 가지고 있으며 z노드 상태가 변경되서을때 와처 목록에 있는 클라이언트로 변경 내역을 전송한다. 주키퍼 와처는 한버 이벤트를 받으면 등록된 와처는 삭제된다. 따라서 이벤트를 계속 받기 위해서는 와처를 계속 등록해야 한다.

 

[참고자료]

·       ZooKeeper Sessions : https://zookeeper.apache.org/doc/r3.3.5/zookeeperProgrammers.html#ch_zkSessions

·       ZooKeeper Watches : https://zookeeper.apache.org/doc/r3.3.5/zookeeperProgrammers.html#ch_zkWatches

 

 

 

2020-05-12 / Sungwook Kang / http://sungwookkang.com

 

Hadoop, Big Data, 하둡, 빅데이터, 데이터분석, 주키퍼, Zookeeper, 분산 코디네이션

+ Recent posts