레플리케이션
레디스 레플리케이션은 하나의 마스터 노드에서 발생하는 모든 데이터를 다수의 레플리카 노드로 실시간으로 복제하여 데이터의 가용성을 높이고, 읽기 성능을 향상시키는 기술이다. 이는 다음과 같은 상황에서 활용된다:
읽기 성능 개선:
읽기 요청을 여러 레플리카로 분산하여 마스터의 부하를 줄인다.
고성능이 필요한 애플리케이션에서 읽기 전용 레플리카 활용.
장애 복구:
마스터 장애 시 레플리카를 새로운 마스터로 승격하여 데이터 손실 및 다운타임 최소화.
페일오버 전략을 통한 자동 복구.
데이터 중복성:
동일 데이터를 여러 노드에 저장하여 데이터 유실 가능성 감소.
장애나 서버 오류에도 데이터의 지속성을 보장.
레디스 레플리케이션의 구조
마스터-레플리카 모델
마스터: 쓰기 작업의 중심 역할을 담당하며, 모든 데이터 변경 사항을 관리.
레플리카: 읽기 요청을 처리하며, 마스터의 모든 데이터를 복제.
기본적으로 레플리카는 읽기 전용으로 설정되어 있으나, 특정 요구사항에 따라 쓰기를 활성화할 수 있음.
레플리케이션 설정
설정 파일 구성
마스터 설정 파일 예제 (redis-master.conf
)
레플리카 설정 파일 예제 (redis-replica.conf
)
레플리케이션 메커니즘
초기 동기화 (Full Synchronization)
마스터와 레플리카가 처음 연결될 때 수행되는 과정:
PSYNC 요청:
레플리카는 PSYNC 명령어를 통해 마스터에 동기화를 요청.
이때 레플리카는 이전에 처리된 레플리케이션 ID와 오프셋 정보를 전송.
RDB 파일 생성:
마스터는 메모리의 데이터를 RDB 파일로 스냅샷 생성.
생성된 RDB 파일은 레플리카로 전송.
쓰기 버퍼 전송:
RDB 전송 이후, 마스터는 쓰기 작업 내용을 레플리카로 전달.
레플리카는 RDB 파일을 메모리에 로드하고 이후 실시간 복제를 시작.
초기 동기화는 네트워크 부하와 디스크 I/O가 크기 때문에 시스템 성능에 영향을 미칠 수 있다.
부분 동기화 (Partial Synchronization)
기존 연결이 끊어졌다가 재연결된 경우:
마스터는 레플리케이션 백로그를 참조하여 누락된 데이터만 레플리카로 전송.
네트워크 부하를 줄이고 빠르게 동기화 가능.
레플리케이션 백로그 크기(
repl-backlog-size
)와 TTL 설정(repl-backlog-ttl
)은 성능에 중요한 영향을 미친다.
비동기 레플리케이션과 동기화 보장
기본 동작: 비동기 처리
마스터에서 데이터가 레플리카로 복제되는 동안 네트워크 딜레이 발생 가능.
장애 발생 시 데이터 손실 가능성 존재.
동기식 레플리케이션 강제
WAIT
명령어를 통해 동기적 동작을 보장:
예시: 최소 2개의 레플리카가 데이터를 저장할 때까지 대기.
디스크 없는 레플리케이션
디스크 없는 RDB 전송
RDB 파일을 디스크에 저장하지 않고 소켓을 통해 직접 전송:
설정 활성화:
장점:
디스크 I/O를 줄여 동기화 속도 향상.
네트워크 대역폭이 충분할 경우 특히 유리.
단점:
메모리 사용량 증가.
페일오버와 고가용성
수동 페일오버
마스터가 장애를 일으킨 경우, 수동으로 레플리카를 승격:
Redis Sentinel
자동 페일오버 기능 제공:
장애를 감지하여 새로운 마스터를 선택.
클라이언트가 새로운 마스터를 참조하도록 재구성.
센티널 설정 예시:
실습: Docker를 활용한 레플리케이션 구성
Docker Compose 설정
실행
Docker 컨테이너 시작:
레플리케이션 상태 확인:
마스터:
레플리카:
트러블슈팅 및 최적화
문제 해결
레플리카 연결 실패: IP 및 인증 설정 확인.
전체 동기화 반복:
repl-backlog-size
와repl-backlog-ttl
조정.데이터 손실:
WAIT
명령어로 동기화 보장.
성능 최적화
출력 버퍼 제한:
TCP_NODELAY 비활성화:
Last updated
Was this helpful?