Redis-Cluster config
> cluster-enabled <yes/no> : 클러스터 모드 설정
> cluster-config-file <filename> : 해당 노드의 클러스터를 유지하기 위한 설정을 저장하는 파일. 사용자가 수정하지 않는다.
> cluster-node-timeout <milisecond> : 특정 노드가 정상이 아닌 것(장애 여부)를 판단하는 기준 시간, 이산동안 감지되지 않는 Master 노드는 Replica에 의해 failover가 이루어진다.
> cluster-replica-validity-factor <factor> : Master 노드와 통신한지 오래된 Replica가 failover를 수행하지 않도록 하는 설정. 오랫동안 Master 노드와 통신이 끊긴 Replica는 오래된 데이터일 가능성이 높기 떄문에 안정성이 떨어진다.(cluster-node-timeout * factor 만큼 통신하지 않은 Replica는 failover 대상에세 제외한다.)
> cluster-migration-barrier <count> : 한 Master 노드가 유지해야 하는 최소 Replica 갯수. 일부 Replica는 Replica를 가지지 않는 다른 Master 노드의 Replica로 Migrate 된다.
> cluster-require-full-coverage <yes/no> : 일부 Hash Slot이 커버되지 않을 때, write 요청을 받지 않을 지 여부. no 설정 시(default yes), 일부 노드의 장애로 Hash Slot이 정상 작동 하지 않더라도 나머지 Hash Slot에 대해 작동 할 수 있다.
> cluster-allow-reads-when-down <yes/no> : 클러스터가 정상 상태가 아닐 때에도 read 요청은 받도록 할지 여부. default no 이며, read 동작의 consistency(일관성)가 중요치 않은 경우 yes로 설정 할 수 있다.
Redis에서 Cluster를 사용하기 위해서는 최소 6개의 노드가 필요하다(Master 3, Replica 3). 7000-7005번 포트로 각각의 노드를 실행한 후 클러스터로 구현한다. (편의상 포트 번호를 노드 번호로 설정한다)
<aside> 💡 redis.conf 를 수정하여 cluster-enabled을 켜주고, 포트번호를 모두 다르게 설정해야 한다.
</aside>
위와 같은 상태로 redis-cluster가 구성된다. 다음 화면은 7003번이 7000번의 Replica(Slave)로 생성되었음을 보여준다.
7003번 화면, 7000번을 Master로 하는 Replica로 실행되었음을 알 수 있다.
Cluster의 Master 노드 중 하나가 장애가 발생하여 연결이 끊어졌을 경우를 가정해보기 위해 7000번의 서버를 다운 시켜볼 것이다.
예상) 7000번의 Replica는 7003번이기 때문에, Master 노드와의 통신이 끊긴 것을 확인할 경우 자동적으로 failover를 진행하여 7003번이 Master 노드로 승격 될 것이다.
결과 ) 다음과 같이 Master 노드와의 Connection을 시도하다, 완전히 끊겼음을 판단하여 faliover를 진행, 7003번이 Master 노드로 승격되었음을 확인할 수 있다.
7003번 화면, ”I’m the new master” 라는 문구가 출력되며 성공적으로 Master 노드로 승격된 모습.
다시 7000번을 재가동 할 경우, 다음과 같이 7003번의 Replica로 변경된 것을 확인할 수 있다.
7000번 재가동 시 화면, 7003번에게 Master를 빼앗긴 모습.