-
Notifications
You must be signed in to change notification settings - Fork 55
zkensemble rejoin
arcus는 ZooKeeper의 znode를 활용해 클러스터를 관리합니다. 따라서 ZooKeeper 관련 문제가 발생하는 경우 해당 캐시 서버는 클러스터 정보를 갱신할 수 없는 상태가 되는데요, 이러한 상태로 서비스를 지속하는 경우 데이터 일관성에 문제가 생길 수 있습니다.
이러한 문제를 예방하기 위해 arcus는 문제가 발생한 캐시 서버를 자동으로 클러스터에서 제외하고, 남은 서버들로 클러스터링이 중단되지 않고 서비스를 지속할 수 있도록 합니다.
그런데 캐시 의존성이 높거나 캐싱 대상 데이터가 많은 서비스는 위와 같이 클러스터에서 제외되었던 캐시 서버를 재구동(cold start)하고 데이터를 복구하는 과정이 부담스러울 수 있습니다.
arcus-memcached는 이러한 상황에서 사용할 수 있는 zkensemble rejoin
명령을 제공하고 있습니다.
캐시 서버가 PAUSE
상태일 때 zkensemble rejoin
요청을 전송하면 캐시 서버는 기존 데이터를 유지한 상태로 ephemeral znode를 다시 생성하여 클러스터에 재가입합니다.
캐시 서버는 ZooKeeper에서 자신이 생성한 ephemeral znode 정보를 가져올 수 없는 경우 PAUSE
상태로 전환합니다.
- 클러스터링에서 제외되어 외부 요청을 받지 않는 상태
- 기존에 저장되어 있던 데이터는 유지
-
zkensemble rejoin
명령 수행 가능
캐시 서버가 PAUSE
상태로 전환되는 경우는 크게 두 가지입니다.
ZooKeeper와 연결 자체에는 문제가 없지만, 사용자의 잘못된 조작 등으로 외부 요인에 의해 znode가 제거된 상태입니다.
znode를 reload 하는 과정에서 자신의 znode가 존재하지 않는 것이 확인되면, 자신의 상태를 PAUSE
로 전환합니다.
ZooKeeper와 연결이 불안정하여 session이 만료되는 경우입니다. 이 경우 기존 session에 의해 생성되었던 ephemeral znode가 자동으로 제거됩니다.
- ZooKeeper 자체 장애
- 스위치 장애 등으로 인한 네트워크 단절
- 리소스 부족으로 인한 timeout 발생
ZooKeeper session이 만료되는 경우의 기본 동작은 fail-stop(프로세스 종료)입니다.
만약 세션이 만료되었을 때 프로세스를 종료하는 대신 PAUSE
상태로 전환하기를 원하는 경우 config zkfailstop off
명령을 사용할 수 있습니다.