Redis CLUSTER RESET

<< CLUSTER COUNT-FAILURE-REPORTS CLUSTER SAVECONFIG >>

Redis CLUSTER RESET

CLUSTER RESET은 자신을 클러스터로 부터 독립시키는 명령이다.
옵션으로 HARD|SOFT가 있다.   옵션을 지정하지 않으면 SOFT로 수행된다.
이 문서는 버전 3.2.0을 기준으로 만들었습니다.

수행 조건

  • RESET 명령을 수행할 노드가 마스터이면 키를 가지고 있지 않아야 한다.   키를 가지고 있으면 FLUSHALL 명령을 우선 수행한다.
  • RESET 명령을 수행할 노드가 슬레이브이면 다른 조건없이 수행된다.

처리 순서

  1. redis.io에 있는 영어 원문을 그대로 옮기면 다음과 같다.
    "All the other nodes in the cluster are forgotten."
    이것은 forget 명령을 실행해서 클러스터의 다른 노드들에게 내가 탈퇴한다는 것을 알리는 것으로 이해되나, 실제로는 이렇게 하지 않는다.   따라서 RESET 명령 후에 자신은 클러스터에서 독립했지만, 클러스터의 다른 노드들은 RESET 명령을 실행한 노드가 아직 클러스터에 속해 있는 노드로 인식한다.   이에 대해서는 아래에 다시 논의한다.
  2. 할당된 슬롯을 모두 제거한다.
  3. 슬레이브이면 마스터로 변경한다.
  4. HARD일 경우 node-id를 새로 할당하고, Epoch를 0으로 한다.
    SOFT일 경우 이전 node-id를 그대로 가지고 있고, Epoch 데이터도 그대로 유지된다.
  5. 변경된 내용을 nodes.conf 파일에 저장한다.

논의 사항

RESET 명령 실행 후 클러스터 내의 다른 노드들은 이 노드를 클러스터에 정상적으로 있는 것으로 인식한다.   따라서 cluster info 명령으로 보아도 상태가 정상으로 나오고, cluster nodes로 보아도 해당 노드가 그대로 있는 것으로 나온다.   그러나 탈퇴한 노드에 할당되어 있는 슬롯에 해당하는 키를 입력하면 에러가 발생한다.  실제로 클러스터는 Fail 상태인데 정상(ok)로 인식하고 있는 것이다.

RESET 명령의 결과가 이렇게 된 것이 개발자인 살바로트가 의도한 것인지는 모르겠으나,
클러스터는 탈퇴한 노드를 정상 노드로 인지하고 있는 것으로 보아 버그로 의심된다.

소스 코드

cluster.c

replication.c


명령문

CLUSTER RESET [SOFT|HARD]

  • 이 명령은 version 3.0.0 부터 사용할 수 있다.
  • 논리적 처리 소요시간은 O(N)이다. N은 클러스터 노드 수이다.

Clients for Java Jedis, Lettuce
Clients for C Hiredis


<< CLUSTER COUNT-FAILURE-REPORTS CLUSTER RESET CLUSTER SAVECONFIG >>

질문하거나 댓글을 보려면 클릭하세요.  댓글수 :    조회수 :

Email 返事がかかってなれば、メールでお知らせします。