1. Redis
Redis(REmote Dictionary Server)는 키-값 저장소 기반의 오픈소스 인메모리 데이터베이스다.
높은 성능과 다양한 데이터 구조를 지원하고, 캐싱, 세션 관리, 메시지 중개인 등 다양한 용도로 활용된다.
Redis는 일반적인 관계형 데이터베이스(RDBMS)와 달리 디스크가 아닌 메모리에서 데이터를 처리하기때문에 응답 속도가 빠르다.
또, 데이터 지속성(persistence) 및 복제(replication) 기능을 지원해 데이터 안정성과 가용성을 높일 수 있다.
2. Redis 아키텍처
1. 단일 인스턴스 구조
가장 간단한 Redis 아키텍처로 단일 서버에 하나의 Redis 인스턴스를 실행하는 방식이다.
하지만, 단일 인스턴스는 장애가 발생하면 전체 서비스가 중단될 수 있다는 단점이 있다.
2. 마스터-슬레이브(Replica) 구조
이 문제를 해결하기 위해 Redis는 마스터-슬레이브(replication) 아키텍처를 지원한다.
- 마스터(Master): 클라이언트의 모든 쓰기 작업을 처리
- 슬레이브(Slave): 마스터의 데이터를 복제(Replication)하여 읽기 전용 작업을 수행
이 방식은 읽기 부하 분산과 데이터 백업 역할을 수행할 수 있지만, 마스터 장애 시 수동으로 복구해야 하는 문제가 있다.
3. Redis Sentinel
redis Sentinel은 마스터 장애 발생 시 자동으로 새로운 마스터를 선출하고, 클라이언트가 이를 인식할 수 있도록 관리하는 고가용성 설루션이다.
주요 기능
- 모니터링(Monitoring): 마스터 및 슬레이브 인스턴스의 상태를 지속적으로 감시.
- 자동 장애 조치(Failover): 마스터 장애 감지 시 슬레이브를 새로운 마스터로 승격.
- 구성 관리(Configuration Management): 클라이언트가 새로운 마스터를 자동으로 찾을 수 있도록 지원.
4. Redis Cluster
Redis Cluster는 여러 개의 Redis 노드를 하나의 클러스터로 구성하여 데이터 분산과 고가용성을 보장하는 방식
특징
- 샤딩(Sharding) 지원: 데이터를 여러 노드에 자동으로 분배하여 처리 성능을 향상.
- 고가용성: 일부 노드에 장애가 발생해도 클러스터 전체가 동작할 수 있도록 설계되어 있다.
- 자동 페일오버: 장애가 발생한 노드를 감지하고 대체 노드를 자동으로 지정할 수 있다.
Sentinel은 마스터-슬레이브 구조에서 마스터 장애 조치를 수행하는 반면, Redis Cluster는 데이터를 여러 노드에 분산 저장하여 확장성을 극대화할 수 있는 차이점이 있다.
선택과 고민
프로젝트에 Redis를 적용시켜 보기 위해 서버를 어떤 구조로 구성할지 고민을 해봤다.
단일 인스턴스는 가용성이 너무 떨어지고 클러스터를 구성하기에는 너무 자원과 시간이 많이 소모된다고 판단해서 replica의 단점 중 하나인 마스터 장애 시 수동 복구를 커버하면서 설정난이도도 상대적으로 쉬운 Redis-sentinel을 사용해 보기로 정했다
세팅 과정
vmware로 가상머신 3대 준비
master, slave01, slave02
모든 서버에 아래의 과정을 수행하면 된다.
1. Redis 설치
먼저 Redis를 설치한다. 최신 패키지를 받기 위해 apt 패키지 리스트를 업데이트하고 Redis를 설치한다
apt update && apt install redis -y
2. Redis 설정
설정 파일을 수정하여 Redis를 외부에서 접근 가능하도록 설정한다. /etc/redis/redis.conf 파일을 열어 아래와 같이 설정을 변경한다
vi /etc/redis/redis.conf
- bind: 0.0.0.0으로 설정하여 모든 IP에서 접근하게 한다.
- port: 기본 포트인 6379를 사용.
- protected-mode: no로 설정하여 외부 접근을 허용.
- appendonly: yes로 설정하여 AOF(Append-Only File)를 활성화하여 데이터를 지속적으로 저장.
슬레이브 서버에는 추가적으로 아래 설정을 해야 한다. 마스터 서버의 IP와 포트를 지정해 주자.
replicaof 192.168.1.10 6379 # 마스터 IP와 포트 설정
3. Redis 실행 및 자동 시작 설정
Redis를 재시작하고, 시스템 부팅 시 자동으로 Redis 서버가 실행되도록 설정한다.
systemctl restart redis systemctl enable redis-server
4. Redis Sentinel 설치 및 설정
다음 명령어로 Redis Sentinel을 설치해 주자.
apt install redis-sentinel -y
설정 파일을 수정하여 Sentinel을 구성해 주자.
vi /etc/redis/sentinel.conf
다음과 같은 설정을 추가하면 된다.
- port: Sentinel의 기본 포트인 26379를 사용.
- bind: 0.0.0.0으로 설정하여 외부 접근을 허용.
- protected-mode: no로 설정하여 Sentinel에 대한 접근을 허용.
- sentinel monitor: 마스터 서버의 IP와 포트를 지정하고, quorum을 설정 ex) 2, 2개 이상의 slave가 장애를 감지하면 failover. 이 예시에서는 mymaster라는 이름을 사용하여 마스터 서버를 모니터링한다.
- sentinel down-after-milliseconds: 30초 동안 응답이 없으면 해당 서버를 다운으로 간주.
- sentinel failover-timeout: 장애 조치가 시작된 후 3분 내에 새로운 마스터를 선출하도록 설정.
- sentinel parallel-syncs: 동기화할 슬레이브의 수를 설정.
port 26379 # Sentinel 기본 포트
bind 0.0.0.0 # 외부 접근 허용
protected-mode no # Sentinel 접근 허용
sentinel monitor mymaster 192.168.1.10 6379 2 # 마스터 IP, 포트, quorum(2개 이상 동의 시)
sentinel down-after-milliseconds mymaster 30000 # 30초 동안 응답 없으면 다운으로 판단
sentinel failover-timeout mymaster 180000 # 3분 동안 failover 시도
sentinel parallel-syncs mymaster 1 # 동시에 몇 개의 슬레이브를 동기화할지 설정
이후 Redis 및 Redis Sentinel을 재시작하고, 자동 시작되도록 설정.
systemctl restart redis
systemctl restart redis-sentinel
systemctl enable redis-sentinel
5. Redis 역할 확인
Redis 서버의 역할을 확인하려면 redis-cli를 사용하여 다음 명령어로 확인할 수 있다.
redis-cli -p 6379 INFO replication
6. Sentinel이 감지한 마스터/슬레이브 상태 확인
Redis Sentinel이 감지한 마스터 및 슬레이브 서버 정보를 확인하려면 아래 명령어를 사용하면 된다.
- 슬레이브 서버 확인:
redis-cli -p 26379 SENTINEL slaves mymaster
- 마스터 서버 확인:
redis-cli -p 26379 SENTINEL masters
7. 마스터 서버 다운 후 새로운 마스터 선출 확인
마스터 서버를 종료하고, 새로운 마스터가 선출되는지 확인한다. 마스터 서버를 중지하려면 아래 명령어를 사용한다:
systemctl stop redis
이후 Redis Sentinel이 자동으로 새로운 마스터를 선출하여 장애 조치를 진행한다.
5, 6의 명령어로 새로운 마스터가 지정된 걸 확인하면 정상적으로 redis-sentinel이 작동하는 것이다.
'Linux' 카테고리의 다른 글
Shell Script 문법 가이드 (0) | 2025.03.11 |
---|---|
[Linux] 가상머신의 IP 설정 (0) | 2024.11.27 |
[Linux] 기본 명령어 정리 (0) | 2024.11.26 |
Ubuntu 설치 및 세팅 (0) | 2024.11.24 |