Redis의 고가용성(HA)
Redis는 고가용성(HA)를 위해 Replication(Master-Slave) 구조를 지원하며,
추가적으로 Sentinel or Cluster 구성 방법을 제공한다.
In-Memory DB 장애시 위험성
Redis 마스터노드가 다운이 되면, 메모리내에 저장되었던 데이터는 유실이 됩니다.
다행히, 리플리카 노드가 구성되어 있다면, 다행히 리플리카 노드에 데이터가 남아있을것입니다.
장애 상황이 단순하여 금방 마스터노드를 살릴 수 있는 상황이면 다행이지만,
장애가 단시간에 처리가 어려운 장애라면, 이 기간동안 데이터가 유실될 수도 있습니다.
이러한 장애를 피하기 위해서 존재하는것이 Sentinel 로 각 노드를 모니터링하고 있다가, 리플리카 노드를 마스터 노드로 승격시키는 Failover를 지원합니다.
- Replication : 실시간 복제구성
- Sentinel : Auto Failover
- Redis Cluster
- 샤딩(Sharding)
[Replication]
'마스터 노드'의 데이터를 실시간으로 '리플리카 노드'에 복사된다.
따라서, 서비스하던 '마스터 노드'가 죽더라도, '리플리카 노드'에 재연결해주면 서비스를 계속 할 수 있다.
Master-Replica 제공 형태
※ 마스터 노드는 1개만 존재
※ Master와 Slave 사이의 Replication은 Async 방식
장애상황
- Master가 장애시, Slave는 주기적으로 Master에 Connection 요청하여 복구될 때까지 대기
- Master가 복구되면, Slave는 Replication을 수행하여 Master와 동기화
- Master의 복구가 어려운 상황이면? Slave중에 하나를 Master로 승격.
- 나머지 Slave를 변경한 Master를 통해 Replication 받도록 수정.
[Sentinel]
장애 상황에서 마스터와 리플리카 사이에 수동으로 전환해줘야 하는 작업의 가용성 저하를 해결하기 위해 사용한다.
Sentinel은 마스터 노드와 리플리카 노드를 계속 모니터링하면서, 장애 상황이 발생하면, 리플리카 노드를 마스터로 승격시키기 위해 Auto Failover를 진행.
- 모니터링 후, 담당자에게 알림설정도 가능.
- 정상적인 기능을 위해서 적어도 3개의 Sentinel 인스턴스가 필요.
- 3대의 Sentinel이 모든 노드를 감시하고 있다가, 장애 발생시 3대의 Sentinel중에 과반수 이상 동의를 하면 Auto Failover가 진행된다.
이를위해서 어플리케이션은 마스터나 복제 노드에 직접 연결하지 않고, Sentinel 노드와 연결.
Sentinel 노드는 어플리케이션에게 현재 마스터 노드의 IP,Port를 알려줍니다.
[Cluster]
- 확장 : 노드를 추가할 수 있음.(최소 3개의 마스터 노드 필요)
- Failover를 위해 각 Master당 N대의 Slave가 필요
- 데이터세트을 여러 노드로 자동분할 하는 기능(샤딩) - 최대 1000개
- 일부 노드가 다운되어도 계속 작업을 할 수 있는 기능(고가용성)
- Cluster를 구성하는 각 Redis들 간에 Gossip Protocol을 통해 통신한다.
장애발생 FailOver
마스터 노드에 장애가 발생할 경우, 해당 Master의 Slave는 Gossip Protocol을 통해 장애를 파악한다.
이후 스스로 Master로 승격하여 Master를 대신한다.
장애가 발생한 Master가 복구될경우, 스스로 Slave로 강등
샤딩(Sharding)
파티셔닝이라고도 불리는데, 데이터를 특정 조건에 따라 분할 저장하는 방법이다. (쓰기분산)
Ex) 15개의 값이 있으면, 노드 A : 0~5 / 노드 B : 6~10 / 노드 C : 11~15
- 장점 : 여러 데이터를 분할 저장하므로, 더 많은 데이터 저장이 가능, 더 많은 쓰기 연산 처리 가능
- 단점 : 어플리케이션 복잡도 증가 / 1개로 요청이 몰리는경우, 성능확장을 위해 서비스 수정 or 중단이 불가피하다.
'IT Knowledge > 기타' 카테고리의 다른 글
Disk 파티션(GPT vs MBR) (0) | 2021.03.10 |
---|---|
Helm 설치하기(Helm 3 Windows Linux) (0) | 2021.01.18 |
Helm 개념과 구조 기술조사 (0) | 2021.01.14 |
레디스(Redis)란 무엇인가? 기본정리 (1) | 2020.12.11 |
공유기 vs 허브 차이점 (0) | 2020.12.03 |
댓글