Skip to content

zkensemble rejoin

Namjae Kim edited this page Nov 3, 2023 · 2 revisions

arcus는 ZooKeeper의 znode를 활용해 클러스터를 관리합니다. 따라서 ZooKeeper 관련 문제가 발생하는 경우 해당 캐시 서버는 클러스터 정보를 갱신할 수 없는 상태가 되는데요, 이러한 상태로 서비스를 지속하는 경우 데이터 일관성에 문제가 생길 수 있습니다.

이러한 문제를 예방하기 위해 arcus는 문제가 발생한 캐시 서버를 자동으로 클러스터에서 제외하고, 남은 서버들로 클러스터링이 중단되지 않고 서비스를 지속할 수 있도록 합니다.

zkensemble rejoin 명령

그런데 캐시 의존성이 높거나 캐싱 대상 데이터가 많은 서비스는 위와 같이 클러스터에서 제외되었던 캐시 서버를 재구동(cold start)하고 데이터를 복구하는 과정이 부담스러울 수 있습니다.
arcus-memcached는 이러한 상황에서 사용할 수 있는 zkensemble rejoin 명령을 제공하고 있습니다.

캐시 서버가 PAUSE 상태일 때 zkensemble rejoin 요청을 전송하면 캐시 서버는 기존 데이터를 유지한 상태로 ephemeral znode를 다시 생성하여 클러스터에 재가입합니다.

PAUSE 상태

캐시 서버는 ZooKeeper에서 자신이 생성한 ephemeral znode 정보를 가져올 수 없는 경우 PAUSE 상태로 전환합니다.

  • 클러스터링에서 제외되어 외부 요청을 받지 않는 상태
  • 기존에 저장되어 있던 데이터는 유지
  • zkensemble rejoin 명령 수행 가능

캐시 서버가 PAUSE 상태로 전환되는 경우는 크게 두 가지입니다.

Ephemeral znode를 임의로 제거한 경우

ZooKeeper와 연결 자체에는 문제가 없지만, 사용자의 잘못된 조작 등으로 외부 요인에 의해 znode가 제거된 상태입니다.

znode를 reload 하는 과정에서 자신의 znode가 존재하지 않는 것이 확인되면, 자신의 상태를 PAUSE로 전환합니다.

ZooKeeper session이 만료되는 경우

ZooKeeper와 연결이 불안정하여 session이 만료되는 경우입니다. 이 경우 기존 session에 의해 생성되었던 ephemeral znode가 자동으로 제거됩니다.

  • ZooKeeper 자체 장애
  • 스위치 장애 등으로 인한 네트워크 단절
  • 리소스 부족으로 인한 timeout 발생

ZooKeeper session이 만료되는 경우의 기본 동작은 fail-stop(프로세스 종료)입니다.
만약 세션이 만료되었을 때 프로세스를 종료하는 대신 PAUSE 상태로 전환하기를 원하는 경우 config zkfailstop off 명령을 사용할 수 있습니다.