Redis CLUSTER-REQUIRE-FULL-COVERAGE

레디스 클러스터 교육 레디스 정기점검/기술지원
Redis Technical Support
레디스 엔터프라이즈 서버
Redis Enterprise Server

Redis CLUSTER-REQUIRE-FULL-COVERAGE

여기서는 클러스터의 일부 노드가 다운되어도 클러스터 전체가 다운되지 않고 운영할 수 있는 방법을 설명합니다.

마스터 노드가 3개 일때

  • cluster-require-full-coverage yes일때는 슬레이브가 없는 마스터 노드 중 어느 하나라도 다운되면 클러스터가 다운되어 클라이언트의 어떤 오퍼레이션도 동작하지 않는다.
  • Redis Cluster cluster-require-full-coverage yes
  • cluster-require-full-coverage no일때는 슬레이브가 없는 마스터 노드가 다운되더라도 클러스터는 다운되지 않고 살아있다.   다운된 노드의 슬롯은 에러가 나지만 다른 노드의 슬롯에는 데이터가 정상적으로 입력/수정/삭제/조회된다.
  • Redis Cluster cluster-require-full-coverage no
  • 어떤 방식을 선택할까?   살아있는 노드의 데이터를 받아도 전체 데이터의 무결성이 깨질때는 yes를 선택해야 할 것이다.   이런 경우는 전체 데이터의 무결성이 깨진다는 것은 살아있는 노드의 데이터도 쓸모없어지는 경우이기 때문이다.   하지만 일부 데이터가 없어도 전체를 운영하는데 큰 지장이 없다면 no로 선택해서 운영하는 것이 맞겠다.   no로 운영할 경우는 다운된 노드를 빨리 알아내 복구하는 것이 중요한다.
  • cluster info 정보: yes로 했을 때 3개 노드중 1개 노드 다운되면 cluster_state가 fail로 나온다.
  • 5002> cluster info
    cluster_state:fail
    cluster_slots_assigned:16384
    cluster_slots_ok:10923
    cluster_slots_fail:5461
    cluster_known_nodes:3
    cluster_size:3
  • cluster info 정보: no로 했을 때 3개 노드중 1개 노드 다운되면 cluster_state가 ok로 나온다.   다른 정보는 yes일때와 같다.
  • 5002> cluster info
    cluster_state:ok
    cluster_slots_assigned:16384
    cluster_slots_ok:10923
    cluster_slots_fail:5461
    cluster_known_nodes:3
    cluster_size:3
  • cluster info 정보: no로 했을 때 살아있는 노드의 서버 로그를 보면 아래와 같다.   다운된 node-id 가 표시되고, 과반수의 마스터 노드가 살아있으므로 클러스터는 다운되지 않고 살아있다.
  • 39797:M * Marking node ba03fc6f1b0b88fab9eee5b01bff945b439a7c4c as failing (quorum reached).

마스터 노드가 4개 일때

  • 5001번부터 5004번까지 4개 마스터로 구성된 클러스터에서 노드 2개가 차례로 다운될때,
    cluster-require-full-coverage no
  • Redis Cluster cluster-require-full-coverage no 4 nodes
  • 5001번 노드가 다운되었을때, 5004번 노드가 감지해서 5002번과 5003번에게 알려주었다.   아래 표시중 원래는 node-id 인것을 확인하기 쉽게하기 위해 port를 표시했다.   현재 클러스터는 살아있다.
  • 5004번 log: 40081:M * Marking node 5001 as failing (quorum reached).
    5002번 log: 40077:M * FAIL message received from 5004 about 5001
    5003번 log: 40079:M * FAIL message received from 5004 about 5001
  • 5002번 노드가 다운되면,   4개 노드중 2개가 다운되어서 살아있는 노드가 과반수가 되지 않으므로, 클러스터가 다운되었다. 그러므로 cluster-require-full-coverage 를 no로 설정해도 동시에 또는 연속해서 2개 노드가 다운되면 클러스터는 다운된다.   아래는 살아있는 5003번과 5004번 노드의 메시지이다.
  • 5003번 log: 40079:M * Cluster state changed: fail
    5004번 log: 40081:M * Cluster state changed: fail
  • 이런 경우를 방지하려면 5001번이 다운되었을때, 살아있는 노드들에 5001번을 클러스터에서 제외시키는 forget 명령을 실행해서 클러서터 사이즈를 3으로 줄여야 한다.   그러면 5002번이 다운되어도 3개중 1개가 다운된 것이므로 과반수의 노드가 살아있어 클러스터는 살아있다.  forget 다음은 5001번 노드의 node-id이다.
  • 5002>cluster forget 8f849643e79d856c3ce39d0bc2ad0dfac03507e7
    5003>cluster forget 8f849643e79d856c3ce39d0bc2ad0dfac03507e7
    5004>cluster forget 8f849643e79d856c3ce39d0bc2ad0dfac03507e7
  • 5001번에 대해서 forget명령을 실행했다면 이어서 5002번이 다운되어도 클러스터는 살아있다.
  • Redis Cluster cluster-require-full-coverage no forget
  • 2개 노드가 동시에 다운되면 클러스터는 다운된다.
  • Redis Cluster cluster-require-full-coverage no 2 nodes down
  • cluster-require-full-coverage no 일지라도 반 이상의 노드가 다운되면 클러스터는 다운된다.


<< MIGRATION-BARRIER

Email 답글이 올라오면 이메일로 알려드리겠습니다.