Redis 마스터-슬레이브 복제 메커니즘 및 구성

1. Redis 복제 아키텍처의 기본 원리

Redis에서 마스터-슬레이브 구조는 데이터 복제를 통해 고가용성과 읽기 성능 향상을 실현하는 핵심 전략이다. 클라이언트 쓰기 요청은 마스터 노드에서 처리되며, 슬레이브 노드는 마스터로부터 데이터를 비동기로 복제하여 읽기 부하 분산에 활용된다.

1.1 초기 동기화 과정

새로운 슬레이브 노드가 연결되면 다음 절차가 수행된다:

  1. 슬레이브는 PSYNC 명령어를 통해 마스터에 연결을 시도한다.
  2. 마스터는 백그라운드 프로세스를 통해 RDB 스냅샷 생성을 시작하고, 동시에 새롭게 들어오는 쓰기 명령어를 메모리 버퍼에 임시 저장한다.
  3. RDB 파일 생성 완료 후, 이를 슬레이브에게 전송한다.
  4. 슬레이브는 수신한 RDB를 디스크에 저장한 후 메모리에 로드하고, 이후 마스터로부터 보류 중이던 쓰기 명령어를 적용받아 데이터 일관성을 확보한다.

복제 과정 중 네트워크 장애 발생 시, 재연결 후에는 이전 상태 기반으로 증분 동기화가 가능하다.

1.2 증분 복제와 오프셋 관리

Redis 2.8 이상부터는 오프셋 기반의 증분 복제를 지원한다. 마스터와 각 슬레이브는 다음과 같은 정보를 유지한다:

  • Replication Offset: 처리된 바이트 단위의 데이터 위치.
  • Run ID: 인스턴스 식별자. 재시작 시 변경됨.
  • Backlog: 순환 큐 형태의 메모리 영역 (기본 1MB). 최근 복제 데이터를 보관하여 네트워크 끊김 후 짧은 시간 내 재접속 시 전체 동기화 없이 복구 가능.

슬레이브가 재연결 시 이전 offset을 제시하면, 마스터는 backlog 내 해당 위치부터 차이 분만 전달한다. 만약 offset이 범위를 벗어나면 전체 동기화(FULLRESYNC)가 트리거된다.

1.3 무디스크 복제 (Diskless Replication)

대량의 데이터를 복제할 때 디스크 I/O를 회피하기 위해 마스터가 RDB를 직접 소켓을 통해 스트리밍 전송하는 방식이다. 관련 설정:

repl-diskless-sync yes
repl-diskless-sync-delay 5

지연 옵션은 다수의 슬레이브가 동시에 접속할 수 있도록 대기 시간을 제공한다.

1.4 키 만료 처리

슬레이브는 TTL 기반 키 만료를 독립적으로 수행하지 않는다. 마스터에서 키가 삭제되거나 LRU 정책에 의해 제거되면, DEL 명령어가 슬레이브에 전파되어 일관성을 유지한다.

2. 복제 동작의 핵심 특성

  • 비동기 복제: 마스터는 쓰기 후 즉시 응답하며, 슬레이브 동기화는 백그라운드에서 수행된다.
  • 계층형 연결: 슬레이브는 다른 슬레이브의 마스터 역할을 할 수 있다 (chaining).
  • 쿼리 서비스 지속성: 초기 동기화 중에도 슬레이브는 기존 데이터로 읽기 요청을 처리한다. 다만 동기화 완료 후에는 데이터 리로드로 인해 일시 중단될 수 있다.
  • 읽기 확장성: 다수의 슬레이브를 배치해 읽기 트래픽을 분산시킬 수 있다.

3. 복제 안정성을 위한 마스터 영속성 권고

마스터 노드에 대한 영속성(RDB 또는 AOF)은 필수적이다. 비활성화 시 다음과 같은 위험이 발생할 수 있다:

  1. 마스터 다운 → 재시작 시 메모리 기반이라 모든 데이터 소실.
  2. 재시작 후 슬레이브들과 복제 시작 → 빈 데이터 세트가 모든 슬레이브에 전파됨.
  3. 결과적으로 전체 클러스터 데이터 손실.

심지어 Sentinel 기반 자동 장애 조치 환경에서도 마스터가 빠르게 복구되면 슬레이브들이 여전히 오래된 상태일 수 있어 동일한 문제가 발생할 수 있다. 따라서 마스터에는 반드시 RDB/AOF를 활성화하고, 주기적인 백업도 함께 운영해야 한다.

4. 복제 흐름 상세 단계

  1. 슬레이브 시작 시 slaveof {master_ip} {port} 설정에 따라 마스터 정보를 저장.
  2. 정기 타이머를 통해 마스터 연결 필요성을 확인하고, 소켓 연결을 시도.
  3. PING을 통해 연결 상태 검증.
  4. 인증 필요 시 masterauth 비밀번호 전달.
  5. 초기 전체 동기화 실행.
  6. 이후 변경 사항을 지속적으로 비동기 전파.

5. 주요 구성 파라미터

# 마스터 설정
requirepass your_password
# 슬레이브 설정
slaveof 192.168.10.101 6379
masterauth your_password
slave-read-only yes

방화벽에서 6379 포트의 TCP 접근이 허용되어야 함.

6. 구성 검증 방법

마스터에서 복제 상태 확인:

$ redis-cli -a your_password
127.0.0.1:6379> info replication
role:master
connected_slaves:1
slave0:ip=192.168.10.102,port=6379,state=online,offset=1234,lag=1

슬레이브에서 데이터 조회 테스트:

$ redis-cli
127.0.0.1:6379> get k1
"v1"

7. 성능 테스트 도구 활용

내장 벤치마킹 도구로 기본 성능을 평가할 수 있다:

redis-benchmark \
  -h 192.168.10.101 \
  -c 1000 \
  -n 100000 \
  -d 50 \
  -t set,get

옵션 설명:

  • -c: 동시 클라이언트 수
  • -n: 요청 총량
  • -d: 값 데이터 크기 (바이트)
  • -t: 테스트할 명령어 지정

서버 사양에 따라 결과는 달라지며, 실제 트래픽 패턴에 맞춰 조정 필요.

태그: Redis Master-Slave Replication Data Synchronization Diskless Replication Redis Persistence

7월 12일 03:02에 게시됨