개요
SpringBoot와 Redis사용법을 redis-cli을 통해 로컬 환경에서 익혔다면, 호스팅 방법과 운영 방식에 대해 공부하고, 결정해보자.
데이터 관리 방식
Redis의 장점은 인메모리 방식으로 모든 데이터를 RAM에 저장하여 입출력 성능을 끌어올리는 것이다. 이러한 장점을 잘 사용하려면 어떤 데이터를, 어떻게 사용할지에 대해 잘 정의하고 이를 관리하는 방식에 대한 정의가 필요하다.
캐싱 전략
레디스 캐싱 전략은 크게 4 가지이다. 보통 읽기/쓰기 패턴을 고려하여 4 가지 전략 중 한 가지를 택하거나 2 가지 이상의 전략을 결합하여 사용한다.
레디스 DB에 쓰기 작업을 진행할 때 주의할 점은 인메모리 데이터베이스 특성상 영속성이 보장되지 않는다는 점이다. 따라서 이러한 데이터의 휘발성을 보완하기 위해 RDB, AOF 등 백업 옵션에 대해 고민해야 한다.
RDB와 AOF
RDB
redis의 데이터를 지속적으로 유지하기 위해 스냅샷을 디스크에 저장한다.
AOF
redis의 명령어를 로그형식으로 기록하는 방식이다. redis 서버가 수신한 각 명령어를 파일에 순차적으로 기록하므로 데이터를 지속적으로 저장할 때마다 이 파일이 업데이트된다.
영속성을 위한 RDB, AOF 선택 방법
이에 대해서는 NHN 클라우드의 세션이 많이 도움되었다. 요약하자면,
- RDB - 백업은 필요하지만 어느정도의 데이터 손실이 발생해도 괜찮은 경우
- AOF - 장애 상황 직전까지의 모든 데이터가 보장되어야 하는 경우
만약 강력한 내구성을 요구한다면 두 가지 방식을 모두 사용하면 된다.
Redis Architecture
레디스에서는 Replication, Sentinel, Cluster 세 가지 아키텍처를 제공한다.
중점을 두고 봐야할 점은 "Redis 서버의 Failover 상황시, 어떤 가용성을 제공하는가?"이다.
Replication
이 구성은 마스터와 레플리카가 직접 연결되어 마스터 측에서 데이터에 관한 트리거가 발생했을 때 일련의 명령을 통해 레플리카에 복제본을 전송함으로써 레플리카를 업데이트하는 방식이다.
마스터 1대만 운영함으로써 간단한 복제만 진행하고, HA 기능이 없어서 장애 상황 시 수동으로 복구를 해야한다. 이게 치명적인 단점이 되는데, 따라서 레디스가 구축된 서비스가 기능할 때 필요한 데이터가 많지 않고, 장애 시 서비스에 대한 영향이 크지 않은 경우에 사용한다.
Sentinel
Seninel이라는 노드를 따로 하나 만들어서, 이 노드를 통해 다른 노드를 감시하는 방식이다. (HA - High Availablity 구성) 마스터가 비정상일 경우 자동으로 페일오버를 감지하고, 서비스 장애 상황을 막기 위해서 남아있는 복제본을 마스터 노드로 변경한다.
이러한 기능을 위해서 항상 3대 이상의 홀수로 존재해야 하며, 과반수 이상의 sentinel이 동의해야 페일오버를 진행하게 된다.
- 보통 2대의 서버에 일반 레디스와 센티널을 함께 띄우고, 최저 사양의 다른 노드에는 센티널만 띄워 유연성 있게 변동사항이 반영되도록 구성한다.
그림으로 나타내면 다음과 같다.
Cluster
최소 3대 이상의 마스터 노드가 필요하며, 모든 노드가 서로 감시하면서 자동으로 페일오버를 감지한다.
키를 여러 노드에 자동으로 분할해서 저장하는 샤딩 기능이 있다.
이와 관련해서 베스핀글로벌 블로그에 잘 정리된 표가 있다.
설치형과 클라우드 서비스
이러한 레디스 서버를 관리하기 위해서는 두 가지 호스팅 방식이 있다.
- 클라우드 연동 서비스(EC2는 ElastiCache, GCP는 Cloud Memory Store)
- EC2와 같은 가상머신에 직접 설치
설치형과 관리형의 큰 차이는 다음 표를 통해 이해할 수 있다.
비교값 | 설치형(VM 인스턴스에 설치) | 관리형(Cloud Memory Store) |
관리효율 | 낮 | 높 |
비용 | 낮 | 높 |
설치형은 버전관리/ 자동화/ 유지보수와 같은 세부적인 작업을 수동으로 해줘야하는 점에서 상당히 많은 공부가 필요할 것같다....
그래서 관리형 서비스의 가격 측정표를 잘 살펴보고 예상 가격 측정을 통해 결정해야한다.
예상 가격측정표 만들어서 보고해야겠다.
Reference
레디스는 공식 문서가 참 잘되어있다
https://redis.io/docs/management/replication/
https://redis.io/docs/management/sentinel/
'DevOps > DevOps' 카테고리의 다른 글
[DevOps] 멀티모듈 프로젝트 CI/CD 적용 - 설계 구상 편 (3) | 2024.07.22 |
---|---|
[Redis] Redis 3편. Spring Boot와 Redis | Lettuce, RedisTemplate, RedisRepository (1) | 2024.01.08 |
[Redis] Redis 2편. 기본 자료형 (0) | 2024.01.04 |
[Redis] Redis 1편. 개념과 특징, 설치 및 간단한 사용법 (2) | 2024.01.04 |