이야기박스
Redis High Availability; Sentinel vs Cluster 본문
Overview
지난 포스팅에서 Redis가 무엇인지 가볍게 살펴보는 시간을 가졌었습니다. 이번 포스팅에서는 Redis의 HA 구성을 주제로 Sentinel과 Cluster 두 방식을 비교해보도록 하겠습니다.
Sentinel
Sentinel이라는 이름이 처음에는 낯설었지만, 어느 순간부터 zookeeper를 생각하면서 읽다 보니 괜스레 친숙하게 느껴지더라고요.
Sentinel의 주요 역할은 다음과 같습니다.
- Monitoring: Master / Slave에 이상이 없는지 체크
- Notification: 문제가 발생한 경우, 다른 프로그램 혹은 프로그램 관리자에게 알림 제공
- Automatic Failover: Master에 문제가 발생한 경우, 새로운 Master를 선출하게 됩니다.
# Failover
과반수 이상의 Sentinel 인스턴스에서 Master 장애를 감지하여야 Failover를 동작하게 됩니다.
Failover 탐지는 아래 두 방식으로 이루어지게 됩니다.
- SDOWN(Subjectively Down)
- Sentinel -> Master로 주기적으로 보내는 Ping이 응답하지 않는 경우
- ODOWN(Objectively Down)
- 설정 값의 quorum 이상의 Setinel SDOWN 인지되면, Redis 장애로 인지
- Note. quorum: 얼마나 많은 Sentinel이 장애로 인지해야 Redis의 장애로 인지할지 판별하는 기준 값
# Zookeeper와의 차이점
Client가 서비스의 주소를 알기 위해 Zookeeper에 직접 요청을 보내는 일은 흔치 않습니다. 반면에 Sentinel에서는 Client가 Master의 주소를 알기 위하여 Sentinel에 우선 호출을 진행해야 합니다.
Cluster
대규모 클러스터 환경이 많아진 요즘 시대에 걸맞는, 어떻게 보자면 Sentinel에서 진화된 형태로도 보입니다.
Redis Cluster는 Sentinel에서처럼 Automatic Failover를 지원하고 더 나아가 Data Sharding까지 지원하게 됩니다.
# Data sharding
Multi-Master / Multi-Slave 구조를 가지게 됩니다. 여기서 Data sharding은 Master 단위로 진행되게 되고, 그렇기에 Master당 최소 하나의 Slave가 존재하지 않는다면 데이터 유실이 발생할 수 있습니다.
Sharding은 CRC16 해시 함수 및 모듈로 연산을 활용하여 Hash slot으로 나누게 됩니다.
# Failover
Master가 죽는 경우, 기존 Slave 중 하나가 Master로 승격되게 됩니다. 그리고 기존 Master가 다시 살아나게 되면 새로운 Master의 Slave가 됩니다.
Sentinel vs Cluster 비교
개인적으로 소규모 환경에서는 Sentinel, 대규모 환경에서는 Cluster 구성을 하는 게 맞다고 봅니다.
예를 들어 Airflow의 Celery Executor는 요청량 자체가 많지 않은데, 다중 Master에 Sharding까지 지원하는 Cluster 구성은 요구사항에 비해 과하지 않나 싶습니다.
반면에, 트래픽이 큰 서비스의 경우 저장되는 데이터도 많을 것이기 때문에 Sentinel보다는 Cluster 구성을 하는 게 좋지 않을까 생각됩니다.
후기
Redis 문서들은 작년 이맘때, Airflow helm 구성할 때 봤었습니다. 근데 1년이 지나고 잘 사용하지 않는 기술이다 보니 기억이 잘 안나더라고요. 더 오래 지나 완전히 잊히기 전에 글을 남겨야겠다는 생각이 들어 이렇게 포스팅을 정리해봅니다.
Reference
https://cloudinfrastructureservices.co.uk/redis-sentinel-vs-cluster/
'Computer & Data > Big Data' 카테고리의 다른 글
Redis. Deploy on Kubernetes with helm (1) | 2022.09.24 |
---|---|
Redis 컨테이너 환경 실행 with Docker-compose (0) | 2022.09.12 |
What is Redis; Remote Dictionary Server (0) | 2022.08.20 |
Elasticsearch - RestHighLevelClient를 통하여 대량의 문서를 조회하기 (0) | 2022.05.18 |
Streaming 비교, Spark Streaming - Flink Streaming (0) | 2022.03.24 |