반응형
최근에 Redis가 고가용성을 어떻게 보장하는가?에 대한 면접 질문을 받게 되어서 조금 공부를 해보았습니다.
Redis의 고가용성 전략(Sentinel, Clustering)
Redis의 고가용성
위의 목차를 클릭하면 해당 글로 자동 이동 합니다.
Sentinel
- 먼저, Redis의 경우 데이터베이스 이중화와 동일하게 Replication(master-slave) 구조를 지원한다.
- 사용자가 데이터를 조회하게 되면 마스터 노드 혹은 슬레이브 노드에서 데이터를 읽어온다.
- 반면, 사용자가 데이터를 쓰게 되면 이것은 무조건 마스터 노드에만 적용된다.
- 마스터 노드의 데이터가 변경되면 슬레이브들은 이 데이터를 동기화한다.
- 마스터 노드 다운 시, 메모리에 저장된 것들이 사라지는데, 레플리카 노드의 존재로 인해 데이터의 유실을 막는다.
- 장애 상황이 짧으면 마스터 노드를 바로 살리면 되지만, 길어지면 마스터 노드를 살리지 못하는 그 기간 동안의 데이터가 유실된다.
- 이때, 레플리카 노드를 마스터로 승격하여 정상적으로 작동하게 만들 수 있다.
- 그런데 이를 수작업으로 하게 되면 복잡하기 때문에 Sentinel이 등장한다.
- 최소 3개 이상의 Sentinel이 마스터 노드와 슬레이브 노드를 모니터링한다.
- 장애가 발생했을 때, 과반 수 이상의 Sentinel이 동의하면 슬레이브 노드가 마스터 노드로 승격하게 된다.
- 이때, 3개 이상의 Sentinel을 쓰는 이유는 Sentinel 역시 다운될 수 있기 때문이라고 한다.
- 애플리케이션은 마스터 노드나 슬레이브 노드에 직접적으로 연결하지 않는다.
- 애플리케이션은 Sentinel과 연결되어 있으며, Sentinel을 통해 마스터 노드로 접근이 가능하다. 일종의 프록시라고 볼 수 있다.
- 아래는 Sentinel 구조를 나타낸 그림이다.
Clustering
- 간단하게 말하면 데이터베이스의 샤딩과 동일하다.
- 하나의 데이터베이스를 쪼개서 여러 데이터베이스에 분할 저장하는 형태이다.
- 샤딩을 통해 복수의 Redis에 데이터를 분할한다.
- 각 샤드는 다시 마스터와 슬레이브로 구성된다.
- 모든 마스터 노드와 슬레이브 노드들은 연결되어 있으며, 서로를 모니터링 한다.
- 부하를 분산시킬 수 있기 때문에 사용자 입장에서는 속도가 빨라진다.
- 센티널의 경우 확장성이 없으나 클러스터링은 확장성이 좋다.
- 앞서 얘기한 바와 같이 클러스터링은 엑세스 속도가 빠르다.
- 반면에 센티널의 경우 배포 및 관리가 용이하다.
- 아래는 클러스터링의 구조를 나타낸 그림이다.
데이터베이스 이중화의 개념을 Redis에 적용시킬 수 있었다면, 면접에서도 충분히 할 수 있는 얘기였을 것 같다. 추후에는 센티널 구조를 내가 가지고 있는 웹 앱에 직접 구현해보면 좋을 것 같다.
추천글
https://lifeplan-b.tistory.com/13
레디스(Redis) 고가용성(HA-High Availability)
Redis의 고가용성(HA) Redis는 고가용성(HA)를 위해 Replication(Master-Slave) 구조를 지원하며, 추가적으로 Sentinel or Cluster 구성 방법을 제공한다. In-Memory DB 장애시 위험성 Redis 마스터노드가 다운이 되면,
lifeplan-b.tistory.com
반응형
'개발' 카테고리의 다른 글
트랜잭션과 격리성 그리고 낙관적 락과 비관적락에 대한 얘기 (0) | 2025.02.09 |
---|---|
Redis로 분산락 관리하기 (Spring에 Redisson 적용) (0) | 2025.02.08 |
Spring Web MVC에서 Spring session redis 적용 (0) | 2025.01.19 |
적절한 DB Connection Pool 설정하기 (0) | 2025.01.01 |
Servlet & JSP 기반의 웹 앱에 관계형 데이터베이스 연동하기 (MySQL, DBCP) (0) | 2024.08.26 |