Redis Master-Slave-Slave 구조
Redis 는 높은 성능의 인메모리 데이터베이스로, 많은 데이터 처리와 빠른 응답 시간을 갖고있다. 하지만 하나의 Redis 서버만으로는 장애 발생 시 데이터 손실이나 서비스 중단 등의 문제가 발생 할 수 있다. 이를 해결하기 위해 Redis에서는 Master-Slave-Slave 구조를 사용해 고가용성과 장애 복구를 지원한다.
Master 서버
Master 서버는 데이터를 읽고 쓰는 주요 서버이다. 이 서버에 대한 모든 쓰기 요청은 Master 에서 처리되고, 그 데이터는 자동으로 각 Slave 서버로 복제된다.
Slave 서버
Slave 서버는 Maste가 서버의 데이터를 실시간으로 복제하고, 읽기 요청을 처리한다. 두 개 이상의 Slave 서버를 두는 이유는 고가용성을 보장하기 위해서 이다. 만약 하나의 Slave 서버에 장애가 발생하면, 다른 Slave 서버가 정상적으로 운영되므로 서비스 중단을 방지할 수 있다.
장애 복구
Master 서버에 장애가 발생하면, Redis Sentinel이 Master 상태를 모니터링 하고, 자동으로 새로운 Master 서버를 선출한다. 이때 기존의 Slave 서버 중 하나가 새로운 Master로 승격되고, 다른 Slave 서버가 다시 복제 작업을 시작한다. 이를 통해 서비스 중단 없이 장애 복구가 가능하다.
Master, Slave, Slave Redis 설치
sudo yum install -y redis
Master서버에서 /etc/redis.conf 수정
bind 0.0.0.0 # 모든 IP에서 접근 가능하게 설정
port 6379 # 기본 포트
protected-mode no # 외부 접속 허용
Slave서버에서 /etc/redis.conf 수정
bind 0.0.0.0 # 모든 IP에서 접근 가능하게 설정
port 6379 # 기본 포트
protected-mode no # 외부 접속 허용
replicaof 10.10.45.9 6379 # Master 서버의 IP 기입
Master 와 Slave서버 Redis 재시작
systemctl restart redis
각 노드에서 아래 명령어를 실행하여 role 확인
redis-cli info replication


Master 노드에 데이터를 저장하고, Slave 노드에서 데이터를 확인


Redis Sentinel을 이용한 faileover
Redis Sentinel은 Redis 클러스터에서 고가용성과 자동장애조치(failover)를 제공하는 도구이다. Sentinel은 여러 Redis 서버들간의 상태를 모니터링 하고, Masteer 서버에 문제가 생겼을때 Slave 서버를 Master로 승격시켜 서비스 중단을 최소화 한다.
Redis Sentinel 설치
(Sentinel 은 Redis 패키지에 포함되어있다)
sudo yum install -y redis
/etc/redis/sentinel.conf 파일을 수정

port 26379 # Sentinel이 사용할 포트 번호 (기본값: 26379)
sentinel monitor mymaster 10.10.45.9 6379 2 # "mymaster"라는 이름으로 Redis 마스터 노드 (IP: 10.10.45.9, 포트: 6379)를 모니터링, 최소 2개의 Sentinel이 마스터 실패를 감지해야 Failover 진행
sentinel down-after-milliseconds mymaster 5000 # 마스터 서버가 5000ms (5초) 동안 응답하지 않으면 "다운"으로 간주
sentinel failover-timeout mymaster 30000 # Failover가 시작된 후 30초 동안 새로운 마스터가 선출되지 않으면 실패로 처리
sentinel known-replica mymaster 10.10.45.12 6379 # "mymaster"의 슬레이브 서버 (IP: 10.10.45.12, 포트: 6379)를 설정
sentinel known-replica mymaster 10.10.45.11 6379 # "mymaster"의 또 다른 슬레이브 서버 (IP: 10.10.45.11, 포트: 6379)를 설정
dir "/root" # Sentinel의 데이터 디렉토리 (예: "/root" 디렉토리)
protected-mode no # 보호 모드 비활성화 (외부 접근을 허용)
Redis Sentinel 시작
redis-server /etc/redis/sentinel.conf --sentinel

Master Redis 가 Down 상태가 되면 Slave 중의 하나가 Master 로 승격되어야함
Master Redis 에서 Redis 를 stop
systemctl stop redis
Redis Sentinel 이 감지하고 새로운 Master 를 선출

+sdown master mymaster 10.10.45.9 6379
mymaster라는 이름의 마스터 서버(10.10.45.9)가 "슬레이브 다운" 상태로 감지.
마스터서버가 응답하지 않아서 Sentinel이 이를 장애 상태로 판단
+switch-master mymaster 10.10.45.9 6379 10.10.45.12 6379
mymaster 가 10.10.45.9 에서 10.10.45.12로 failover 되어 새로운 마스터 서버로 전환.
+slave slave 10.10.45.11:6379 10.10.45.11 6379 @ mymaster 10.10.45.12 6379
10.10.45.11 서버가 이제 새로운 마스터(10.10.45.12)의 슬레이브로 추가
+slave slave 10.10.45.9:6379 10.10.45.9 6379 @ mymaster 10.10.45.12 6379
10.10.45.9가 이제 10.10.45.12를 마스터로 하는 새로운 슬레이브로 추가
+sdown slave 10.10.45.9:6379 10.10.45.9 6379 @ mymaster 10.10.45.12 6379
10.10.45.9 슬레이브 서버가 "슬레이브 다운" 상태로 감지되었음을 나타낸다. 즉 10.10.45.9 서버가 마스터 서버의 새로운 슬레이브로 설정되었지만, 이 서버가 응답하지 않아 장애 상태로 판단되었음을 의미.
Redis Slave2의 role 이 master 로 승격

Master Redis 에서 Redis 를 restart
systemctl restart redis
Master Sentinel 가 이를 감지

-sdown slave 10.10.45.9:6379 10.10.45.9 6379 @ mymaster 10.10.45.12 6379
10.10.45.9 가 슬레이브 서버로서 "슬레이브 다운" 상태에서 벗어났음을 의미. 즉 10.10.45.9 서버가 장애상태에서 정상 상태로 돌아왔음을 의미.
+convert-to-slave slave 10.10.45.9:6379 10.10.45.9 6379 @ mymaster 10.10.45.12 6379
10.10.45.9가 새로운 마스터인 10.10.45.12에 대한 슬레이브로 설정되었음을 나타낸다. 이전에 장애 상태를 벗어난 후, 10.10.45.9 는 이제 10.10.45.12를 마스터로 하여 슬레이브로 복구되었고, 이 변환이 완료되었음을 의미.
'리눅스' 카테고리의 다른 글
systemctl enable (0) | 2025.04.02 |
---|---|
Redis Master/Slave + HAProxy (0) | 2025.03.18 |
Nginx SSL/TLS ssl_preread & stream (1) | 2025.03.17 |
Vmware 네트워크 (0) | 2025.01.12 |
inode (0) | 2025.01.11 |