DB

[Redis] 레디스의 복제

Raconer 2024. 3. 10. 15:42
728x90

 Redis replication(복제)

  • 백업만으로는 장애 대비에 부족함(백업 실패 가능성, 복구에 소요되는 시간)
  • Redis도 복제를 통해 가용성을 확보하고 빠른 장애조치가 가능
  • master가 죽었을 경우 replica 중 하나를 master로 전환해 즉시 서비스 정상화 가능
  • 복제본(replica)은 read-only 노드로 사용가능 하므로 traffic 분산도 가능

Redis 복제 사용

  • Replica노드에서만 설정을 적용해 master-replica 복제 구성
# Replica로 동작 하도록 설정
replicaof 127.0.0.1 6379

# Replica는 read-only로 설정
replica-read-only
Master 노드에는 RDB나 AOF를 이용한 백업 기능 활성화가 필수!
(재시작 후에 비어있는(Master는 비어 있지만 복제본에는 데이터가 있는 경우) 데이터 상태가 복제 되지 않도)

 

설정 방법

# Master

## 1. Master Redis를 실행
docker run  --name my-redis-master -p 5000:6379 redis

# Replica

## 2. 설정 파일 수정

code redis.conf

##### REPlICATION #####
# replicaof <masterip> <masterport> -> 이 부분을
replicaof 127.0.0.1 5000 # 로 수정 5000은 위에 작성한 Master Redis port주소

## 3. Replica 실행 Docker Network 설정 필수
docker run --network host -v $(pwd)/redis.conf:redis.conf --name my-redis-replica redis redis-server /redis.conf

 

Docker-Compose를 사용하여 더욱 쉽게 설정하는 방법

  • docker-compose는 여러개의 컨테이너로 구성된 어플리케이션을 정의 하고 실행 할수 있는 도구
  • YAML 파일을 통해 설정 한다.

Docker-Compose 구조

version: "3"
services:
  my-redis-a:
    hostname: redis-master
    container_name: redis-master
    image: "bitnami/redis"
    environment:
      - REDIS_REPLICATION_MODE=master
      - ALLOW_EMPTY_PASSWORD=yes
    ports:
      - 6379:6379
  my-redis-b:
    hostname: redis-replicas-1
    container_name: redis-replicas-1
    image: "bitnami/redis"
    environment:
      - REDIS_REPLICATION_MODE=slave
      - REDIS_MASTER_HOST=redis-master
      - ALLOW_EMPTY_PASSWORD=yes
    ports:
      - 5000:6379
    depends_on:
      - my-redis-a

Docker Compose 실행 명령어

# docker-compose.yml 위치에서
# docker-compose up으로 실행 하며 --build로 실행 할때마다 다시 Build해서 실행 시킨다.
docker-compose up --build

# redis-cli 접속
docker exec -it redis-master /bin/sh

 

728x90

'DB' 카테고리의 다른 글

[Redis] Redis Cluster  (0) 2024.03.12
[Redis] Redis Sentinel  (0) 2024.03.10
[Redis] 백업과 장애 복구 (AOF 방식)  (0) 2024.03.10
[Redis] 백업과 장애 복구 (RDB 방식)  (0) 2024.03.07
[Redis] Pub/Sub을 이용한 채팅방 구현  (0) 2024.03.01