cluster-require-full-coverage
Redis CLUSTER-REQUIRE-FULL-COVERAGE
레디스 클러스터 교육 |
레디스 정기점검/기술지원 Redis Technical Support |
레디스 엔터프라이즈 서버 Redis Enterprise Server |
---|
Redis CLUSTER-REQUIRE-FULL-COVERAGE
여기서는 클러스터의 일부 노드가 다운되어도 클러스터 전체가 다운되지 않고 운영할 수 있는 방법을 설명합니다.
마스터 노드가 3개 일때
- cluster-require-full-coverage yes일때는 슬레이브가 없는 마스터 노드 중 어느 하나라도 다운되면 클러스터가 다운되어 클라이언트의 어떤 오퍼레이션도 동작하지 않는다.
- cluster-require-full-coverage no일때는 슬레이브가 없는 마스터 노드가 다운되더라도 클러스터는 다운되지 않고 살아있다. 다운된 노드의 슬롯은 에러가 나지만 다른 노드의 슬롯에는 데이터가 정상적으로 입력/수정/삭제/조회된다.
- 어떤 방식을 선택할까? 살아있는 노드의 데이터를 받아도 전체 데이터의 무결성이 깨질때는 yes를 선택해야 할 것이다. 이런 경우는 전체 데이터의 무결성이 깨진다는 것은 살아있는 노드의 데이터도 쓸모없어지는 경우이기 때문이다. 하지만 일부 데이터가 없어도 전체를 운영하는데 큰 지장이 없다면 no로 선택해서 운영하는 것이 맞겠다. no로 운영할 경우는 다운된 노드를 빨리 알아내 복구하는 것이 중요한다.
- cluster info 정보: yes로 했을 때 3개 노드중 1개 노드 다운되면 cluster_state가 fail로 나온다.
- cluster info 정보: no로 했을 때 3개 노드중 1개 노드 다운되면 cluster_state가 ok로 나온다. 다른 정보는 yes일때와 같다.
- cluster info 정보: no로 했을 때 살아있는 노드의 서버 로그를 보면 아래와 같다. 다운된 node-id 가 표시되고, 과반수의 마스터 노드가 살아있으므로 클러스터는 다운되지 않고 살아있다.
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_state:fail
cluster_slots_assigned:16384
cluster_slots_ok:10923
cluster_slots_fail:5461
cluster_known_nodes:3
cluster_size:3
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_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:10923
cluster_slots_fail:5461
cluster_known_nodes:3
cluster_size:3
39797:M * Marking node ba03fc6f1b0b88fab9eee5b01bff945b439a7c4c as failing (quorum reached).
마스터 노드가 4개 일때
- 5001번부터 5004번까지 4개 마스터로 구성된 클러스터에서 노드 2개가 차례로 다운될때,
cluster-require-full-coverage no - 5001번 노드가 다운되었을때, 5004번 노드가 감지해서 5002번과 5003번에게 알려주었다. 아래 표시중 원래는 node-id 인것을 확인하기 쉽게하기 위해 port를 표시했다. 현재 클러스터는 살아있다.
- 5002번 노드가 다운되면, 4개 노드중 2개가 다운되어서 살아있는 노드가 과반수가 되지 않으므로, 클러스터가 다운되었다. 그러므로 cluster-require-full-coverage 를 no로 설정해도 동시에 또는 연속해서 2개 노드가 다운되면 클러스터는 다운된다. 아래는 살아있는 5003번과 5004번 노드의 메시지이다.
- 이런 경우를 방지하려면 5001번이 다운되었을때, 살아있는 노드들에 5001번을 클러스터에서 제외시키는 forget 명령을 실행해서 클러서터 사이즈를 3으로 줄여야 한다. 그러면 5002번이 다운되어도 3개중 1개가 다운된 것이므로 과반수의 노드가 살아있어 클러스터는 살아있다. forget 다음은 5001번 노드의 node-id이다.
- 5001번에 대해서 forget명령을 실행했다면 이어서 5002번이 다운되어도 클러스터는 살아있다.
- 2개 노드가 동시에 다운되면 클러스터는 다운된다.
- cluster-require-full-coverage no 일지라도 반 이상의 노드가 다운되면 클러스터는 다운된다.
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번 log: 40077:M * FAIL message received from 5004 about 5001
5003번 log: 40079:M * FAIL message received from 5004 about 5001
5003번 log: 40079:M * Cluster state changed: fail
5004번 log: 40081:M * Cluster state changed: fail
5004번 log: 40081:M * Cluster state changed: fail
5002>cluster forget 8f849643e79d856c3ce39d0bc2ad0dfac03507e7
5003>cluster forget 8f849643e79d856c3ce39d0bc2ad0dfac03507e7
5004>cluster forget 8f849643e79d856c3ce39d0bc2ad0dfac03507e7
5003>cluster forget 8f849643e79d856c3ce39d0bc2ad0dfac03507e7
5004>cluster forget 8f849643e79d856c3ce39d0bc2ad0dfac03507e7
<< MIGRATION-BARRIER |
---|
Email
답글이 올라오면 이메일로 알려드리겠습니다.