-
Redis Replication 정리Redis 2025. 7. 24. 18:06728x90반응형
1. Redis Replication 이란?
Master 서버의 데이터를 Replica 서버에 복사하는 기능입니다.
- 데이터 안전성 : Master 서버가 죽어도 Replica 서버에 데이터가 남아있습니다.
- 성능 향상 : 읽기 요청을 Replica로 분산하여 속도를 향상시킵니다.
- 고가용성 : Master 서버가 죽더라도 Replica 서버가 Master로 승격해서 서비스를 이어갈 수 있습니다.
2. Redis Replication 작동 방식
Redis Replication은 기본적으로 비동기 방식을 사용합니다.
- Master 서버는 Replica 서버가 데이터를 받았는지 확인하지 않고 자기 할 일을 합니다.
2-1. 정상 연결 상태
Master 서버가 Client의 쓰기 요청 혹은 데이터 만료를 처리하면 이 처리 데이터에 대해 Stream을 사용하여 Replica 서버에게 전달합니다.
2-2. 재 연결 상태
다양한 이유로 Master와 Replica 간의 연결이 끊기면 두 서버 간의 데이터 불일치가 발생할 수 있습니다.
이때 Replica 서버는 Master 서버와 재연결하면서 자신이 마지막으로 받은 오프셋(offset) 정보를 전달합니다.
Master 서버는 오프셋 이후 부터 지금까지 데이터를 Replication BackLog 버퍼에 모두 담을 수 있는지 확인합니다.
- 담을 수 있는 경우 내용을 담아서 Replica 서버로 응답하여 부분 재동기화를 실행합니다.
- 담을 수 없는 경우 RDB 스냅샷을 생성하여 Replica 서버로 응답 하여 전체 재동기화를 실행합니다.
- Master 서버의 RDB 저장 주기와 상관없이 현 시점으로 RDB 스냅샷을 만들게 됩니다.
3. Replication BackLog 란?
Master 서버가 Replica 서버에게 전달하는 스트림을 일시적으로 저장하는 메모리 버퍼입니다.
- 이때 AOF 처럼 실제 데이터가 아닌 명령어만 저장됩니다.
3-1. Replication BackLog 크기와 메모리 사용량
Replication BackLog의 크기는 Master 서버의 메모리 사용량 비례해서 설정하는 것이 좋습니다.
repl-backlog-size 10mb3-2. Replication BackLog 설정 방법
Redis의 경우 Master 서버가 초기 연결되거나 복제 설정이 활성화 되는 경우 자동으로 크기를 설정하지만 수동으로도 설정할 수 있습니다.
- Replication BackLog는 Master 서버만 설정합니다.
3-2-1. Replication BackLog 크기 확인
CONFIG GET repl-backlog-size # 결과 예시: "repl-backlog-size" "1048576" (1MB)3-2-2. Replication BackLog 크기 일시적 설정
CONFIG SET repl-backlog-size 1048576 # 1MB로 설정3-2-3. Replication BackLog 크기 영구적 설정 (redis.conf)
repl-backlog-size 10mb4. 복제 방식
Redis 복제 방식에는 디스크 사용 여부에 따라 나뉘며 해당 문단에서 말하는 복제 방식은 전체 동기화와 관련 있습니다.
- Redis는 실시간 응답성과 속도를 우선시하기 때문에 디스크 I/O로 인한 지연을 방지하기 위해 기본적으로는 디스크 리스 방식을 사용합니다.
4-1. 디스크 사용 방식
Master 서버가 RDB 스냅샷을 디스크에 저장한 후 Replica 서버에게 전송합니다.
이 방식은 장애 발생 시 데이터를 안전하게 복구할 수 있습니다.
4-2. 디스크 리스 방식 (default)
Master 서버가 RDB 스냅샷을 저장하지 않고 메모리에서 바로 Replica 서버에게 전송합니다.
이 방식은 장애 발생 시 복구 할 수 없습니다.
4-3. 복제 방식 확인 및 설정
4-3-1. 디스크 리스 복제 확인
CONFIG GET repl-diskless-sync # 결과: "repl-diskless-sync" "yes" (디스크 리스 복제 활성화)4-3- 2. 디스크 리스 복제 활성화
CONFIG SET repl-diskless-sync yes # 명령어 혹은 redis.conf에 추가 repl-diskless-sync yes # 1초 대기 후 전송 repl-diskless-sync-delay 15. 영속성(Persistence) & 복제
Redis는 데이터를 디스크에 저장해서 영속성을 유지하게 되며 대표적으로 RDB와 AOF 방식이 있습니다.
- RDB : 데이터의 순간 모습을 디스크에 저장
- AOF : 모든 쓰기 명령어를 로그에 기록
영속성 설정 확인
CONFIG GET save # 결과 예: "1500 1 300 10" (1500초에 1번, 300초에 10번 저장) # 빈 문자열("")이면 RDB 비활성화 CONFIG GET appendonly # 결과: "appendonly" "no" (AOF 비활성화)5-1. Master 서버의 영속성 비활성화 시 위험
Master 서버의 영속성(RDB / AOF)을 모두 비활성화하면 재시작 시 데이터가 초기화 됩니다.
Replica 서버는 Master 서버와 데이터를 똑같이 맞추기 때문에 Replica 서버까지 초기화 됩니다.
6. 고가용성과 장애 복구
Reids는 Sentinel과 Cluster로 고가용성을 강화합니다.
- Sentinel : Master 서버를 감시하면서 죽으면 Replica 서버 중 하나를 Master로 승격시킵니다.
- Cluster : 데이터를 여러 노드에 나누어 저장하고, 장애 발생 시 자동 복구합니다.
7. 키 만료 처리
Redis 작동 방식에서 잠깐 언급했지만, Redis의 경우 Key에 대한 만료시간을 설정할 수 있습니다.
- Replica 서버는 Key를 직접 만료 시키지 않으며 Master 서버가 키를 삭제(DEL)하면 이를 Replica에게 전송하게됩니다.
- Replica 서버는 읽기 위주로 사용되는데 이때 읽기 요청에선 만료 시간을 무시하여 일관성을 유지하게 됩니다.
8. 복제 설정 방법
8-1. Replica 설정 (redis.conf)
# Master 서버의 IP와 Port replicaof 123.123.123.1 63798-2. Master 서버가 실행 중일때 설정
redis-cli -h [Replica_ip] -p 6379 REPLICAOF 123.123.123.1 63798-3. Master 서버에 비밀번호가 있는 경우
# redis.conf masterauth [password] # 또는 명령어 CONFIG SET masterauth [password]8-4. 읽기 전용 Replica (default)
# 쓰기 금지 replica-read-only yes9. 주의 사항
1. Backlog 크기 설정의 경우 꼭 Master 서버의 메모리 사용량에 맞게 설정해야합니다.
- 만약 크기가 너무 작다면 전체 동기화 빈도가 늘어나기 때문에 성능상 좋지 못합니다.
2. Master 서버의 영속성 설정을 모두 비활성화하게 되면 데이터 손실 위험이 있습니다.
3. Replica 서버는 데이터 일관성을 유지하기 위해 replica 서버의 maxmemory 설정과 상관 없도록 만들어줘야합니다.
- 데이터 불일치를 방지하기 위한 권장 설정입니다.
# redis.conf replica-ignore-maxmemory yes4. Redis 7.0부터는 Replica 서버의 쓰기는 허용하지 않는것을 권장합니다.
728x90반응형'Redis' 카테고리의 다른 글
Redis Cluster 입문하기 (0) 2025.08.14 [Redis] Caching 전략 및 가이드 (0) 2025.06.18 [Redis] 트랜잭션 이해 : 원자성과 일관성 보장의 기술적 접근 (0) 2025.06.04 [공식 문서 훑어보기] 6. Redis AOF 동작 원리 및 리스크 관리 대안 (0) 2025.05.06 [공식 문서 훑어보기] 5. Redis Persistence RDB? AOF? 장단점 알아보기 (0) 2025.05.05