문서 목적
해당 문서는 Redis에 대해 간략하게 정리한 문서이다.
Redis
The open source, in-memory data store used by millions of developers as a database, cache, streaming engine, and message broker.
> https://redis.io/
Redis는 분산 캐시 시스템이면서 NoSQL 데이터베이스처럼 대규모 데이터 관리 능력도 갖춘 IMDG(In-Memory Data Grid) 소프트웨어이다.
key-value 형식의 데이터 구조를 분산 서버상의 메모리에 저장하면서 고성능의 응답 속도를 보장한다.
인메모리 데이터를 영구적으로 저장할 수 있는 스냣샵 기능을 제공하며, 정합성을 보장한다. (AOF(Append Only File) 기능)
Sharding과 Replication도 지원하고 있어 높은 성능이 필요한 서비스를 많이 사용한다.
구성 요소
- Master : 분산 노드 간의 데이터 복제와 Slave 서버의 관리를 위한 마스터 서버
- Slave : 다수의 Slave 서버는 주로 읽기 요청을 처리하고, Master 서버는 쓰기 요청을 처리
- Sentinel : Redis 3.x부터 지원하는 기능으로, Master 서버에 문제가 발생할 경우 새로운 Master를 선출하는 기능
- Replication : Master 서버에 쓰인 내용을 Slave 서버로 복제해서 동기화 처리
- AOF / Snapshot : 데이터를 영구적으로 저장하는 기능으로, 명령어를 기록하는 AOF와 스냅샷 이미지 파일 방식을 지원
Architecture
- Single Master
- Redis architecture 개발과 테스트 환경에 주로 사용
- 설치하기 쉽고 단일 서버만으로도 빠른 응답 속도와 안정적인 기능을 제공
- 소규모이면서 중요도가 비교적 낮은 시스템 간의 데이터 공유에 종종 사용
- Single Master /Multi Slave
- Master인 쓰기 노드와 Slave인 읽기 노드로 분리 구성
- Master에 쓰여진 데이터는 복제를 통해 Slave 노드로 복제되면서 데이터 정합성을 유지
- 쓰기 / 읽기 노드를 분리해서 전체적인 성능을 향상시킨 구성
- Slave 2 같이 읽기 노드를 추가해서 성능을 극대화
- HA 클러스터링 구조(버전 3.x부터 지원)
- Master 서버 장애 발생 시 쓰기 요청이 실패하면서 데이터 유실이 발생할 수 있는 취약한 구조
- 클라이언트가 쓰기 노드와 읽기 노드를 알고 있어야 하므로 클라이언트 프로그램에 복잡도가 발생
- Sentinel이라는 노드 모니터링/제어 컴포넌트가 추가
- Sentinel이 노드들을 모니터링하고 있다가 Master 노드로 지정하고, 문제가 됐던 Master 노드와 연결을 끊으면서 HA 기능을 제공
Redis test - Ubuntu
출처