Redis 주-복제 복제 설정 가이드
replicaof, 인증, 모니터링 및 프로덕션 안전 점검을 통해 Redis 주-복제 복제를 설정합니다.
Redis 주-복제 복제 설정 가이드
Redis 복제는 고가용성, 데이터 중복성 및 읽기 확장성을 달성하기 위한 기본 패턴입니다. 주(이전에는 마스터라고 함)와 하나 이상의 복제본(이전에는 슬레이브라고 함)을 설정하면 주에 기록된 데이터가 연결된 모든 복제본에 자동으로 복사됩니다.
이 가이드는 Redis 주-복제 복제를 구성하고, 동기화가 작동하는지 확인하며, Redis를 노출시키거나 복제본을 조용히 오래된 상태로 만드는 일반적인 실수를 방지하는 방법을 보여줍니다.
Redis 복제 기본 사항 이해
Redis 복제는 비동기식입니다(주가 복제본의 쓰기 확인을 기다리지 않음). 따라서 높은 성능을 제공합니다. 초기 동기화와 지속적 동기화의 두 단계로 작동합니다.
전체 동기화(SYNC)
복제본이 처음으로 주에 연결하거나 부분 재동기화를 방해하는 네트워크 중단 후에 전체 동기화가 발생합니다.
- 복제본이 주에
PSYNC명령을 보냅니다. - 주는 RDB 스냅샷 파일(
.rdb)을 생성하기 위해 백그라운드 저장 프로세스를 시작합니다. - 주는 RDB가 생성되는 동안 수신된 모든 새 쓰기 명령을 버퍼링합니다.
- RDB 파일이 완료되면 주는 이를 복제본으로 보냅니다.
- 복제본은 RDB 파일을 메모리에 로드합니다.
- 마지막으로 주는 버퍼링된 모든 쓰기 명령을 복제본에 보내 따라잡습니다.
부분 재동기화(PSYNC)
Redis 2.8 이상은 부분 재동기화를 지원합니다. 주와 복제본 간의 링크가 잠시 끊어지면 복제본은 복제 백로그 버퍼(주에서 구성 가능한 순환 버퍼)를 사용하여 링크가 끊어진 이후의 누락된 명령만 요청할 수 있습니다.
전제 조건 및 설정
복제를 구성하기 전에 최소한 두 개의 별도 Redis 인스턴스가 실행 중인지 확인하십시오(또는 테스트를 위해 동일한 서버의 다른 포트에서 실행되는 별도 구성).
이 가이드에서는 다음 설정을 가정합니다.
| 인스턴스 | 역할 | IP 주소 | 포트 | 구성 파일 |
|---|---|---|---|---|
| 주 | 주 | 192.168.1.100 | 6379 | redis-primary.conf |
| 복제본 1 | 복제본 | 192.168.1.101 | 6380 | redis-replica-1.conf |
2.1단계: 주 인스턴스 구성
주 인스턴스가 복제본의 연결을 수락할 준비가 되었는지 확인하고 주 자체의 안정성을 위해 필요한 경우 지속성(RDB 또는 AOF)을 관리하도록 구성되었는지 확인하십시오.
중요한 주 설정:
- 바인딩: 여러 시스템에서 실행하는 경우 주가 공용 IP 주소 또는
0.0.0.0에 바인딩되어 있는지 확인하십시오. 방화벽을 사용하는 경우 복제본 IP에 대해 포트 6379가 열려 있는지 확인하십시오. - 지속성: 복제 자체에 엄격히 필요하지는 않지만 주 데이터 지속성을 위해 RDB/AOF를 활성화하는 것이 좋습니다.
# redis-primary.conf
port 6379
bind 0.0.0.0 # 모든 인터페이스에 바인딩(외부 복제본에 필요)
# RDB 지속성 활성화
save 900 1
save 300 10
save 60 10000
2.2단계: 복제본 인스턴스 구성
복제본 설정의 핵심은 replicaof 지시문에 있습니다. 이는 인스턴스가 데이터를 동기화해야 하는 주를 알려줍니다.
중요한 복제본 설정:
- 포트: 동일한 시스템에서 실행하는 경우 다른 포트를 사용하십시오.
- 복제 지시문:
replicaof또는slaveof(레거시 이름)를 사용하십시오.
# redis-replica-1.conf
port 6380
# *** 필수 복제 구성 ***
replicaof 192.168.1.100 6379
# 복제본이 읽기 전용인지 확인(Redis 5 이후 기본값)
replica-read-only yes
# Sentinel/Cluster에서 HA를 처리하는 경우 복제본에서 지속성을 비활성화하는 것이 좋습니다.
# 빠른 재시작을 위해 지속성이 필요한 경우 활성화된 상태로 유지하십시오.
save ""
참고: 주에 암호가 필요한 경우
masterauth <password>로 복제본을 구성하십시오. Redis 6 이상 ACL 설정에서는 복제 사용자가 기본 사용자가 아닌 경우masteruser도 구성하십시오.
구현 방법
구성 파일을 편집하고 서버를 다시 시작하거나 redis-cli에서 REPLICAOF 명령을 동적으로 실행하여 복제를 구현할 수 있습니다.
3.1방법: 구성 파일(프로덕션에 권장)
위와 같이 redis-replica-1.conf를 업데이트한 후 두 인스턴스를 모두 시작하십시오.
# 주 시작
redis-server redis-primary.conf
# 복제본 1 시작
redis-server redis-replica-1.conf
시작 시 복제본 1은 즉시 192.168.1.100:6379의 주에 연결을 시도하고 동기화 프로세스를 시작합니다.
3.2방법: 동적 구성
Redis 인스턴스가 이미 실행 중이고 다시 시작하지 않고 복제본으로 변환하려면 redis-cli를 통해 REPLICAOF를 실행하십시오.
복제본으로 변환하려는 인스턴스(이 예에서는 포트 6380에서 실행)에 연결합니다.
redis-cli -p 6380복제 명령을 실행합니다.
127.0.0.1:6380> replicaof 192.168.1.100 6379 OK
6380의 인스턴스는 이전 데이터를 삭제하고 새 주와 전체 동기화(SYNC)를 시작합니다.
⚠️ 경고: 복제 비활성화
복제본을 다시 독립 실행형 주 인스턴스로 전환하려면 해당 인스턴스에서
replicaof no one을 실행하십시오.
4. 복제 상태 모니터링
연결 상태를 모니터링하는 것은 데이터 일관성을 보장하는 데 중요합니다. 주와 복제본 모두에서 redis-cli를 통해 INFO replication 명령을 사용하십시오.
4.1 주 상태 확인
주(6379)에 연결하고 연결된 복제본 수와 상태를 확인하십시오.
redis-cli -p 6379 INFO replication
예상 출력 스니펫(주):
# Replication
role:master
connected_slaves:1
slave0:ip=192.168.1.101,port=6380,state=online,offset=2048,lag=0
master_replid:a9b1c2...
master_replid2:000000...
master_repl_offset:2048
role:master는 역할을 확인합니다.connected_slaves:1은 복제본이 표시됨을 확인합니다.state=online은 원하는 안정 상태입니다.lag=0또는 낮은 값은 복제본이 신속하게 응답함을 의미합니다. Redis 복제는 여전히 비동기식이므로 이는 데이터 손실이 없음을 보장하지 않습니다.
4.2 복제본 상태 확인
복제본(6380)에 연결하고 주 링크 상태를 확인하십시오.
redis-cli -p 6380 INFO replication
예상 출력 스니펫(복제본):
# Replication
role:slave
master_host:192.168.1.100
master_port:6379
master_link_status:up
master_sync_in_progress:0
slave_priority:100
slave_read_only:1
role:slave는 역할을 확인합니다.master_link_status:up은 연결이 활성 상태이고 정상임을 확인합니다.master_sync_in_progress:0은 초기 동기화가 완료되었음을 의미합니다.
복제 모범 사례 및 최적화
5.1 복제 읽기 전용 모드
기본적으로 복제본은 읽기 전용입니다(replica-read-only yes). 이는 중요한 안전 메커니즘입니다. 복제본에 쓰기를 시도하면 오류가 발생하여 클러스터 전체의 데이터 일관성이 보장됩니다.
읽기 전용 모드를 비활성화하면 복제본에 대한 모든 쓰기는 로컬이 되며 복제 링크가 끊어지고 전체 동기화가 발생하면 덮어쓰여집니다.
5.2 동기화 시간 최적화
데이터 세트가 매우 큰 경우 초기 SYNC 프로세스가 느릴 수 있습니다. 다음 요소를 고려하십시오.
- 네트워크 대역폭: RDB 전송을 위해 주와 복제본 간에 충분한 대역폭이 있는지 확인하십시오.
- RDB 생성: 주는 RDB 파일을 생성하기 위해 CPU 및 디스크 I/O가 필요합니다. 동기화 중에 서버에 사용 가능한 리소스가 있는지 확인하십시오.
- 복제본에서 디스크 지속성 비활성화(선택 사항): 주가 모든 지속성을 처리하고 복제본이 읽기 확장 전용인 경우 복제본에서
save ""를 설정하면 RDB 파일 쓰기의 I/O 오버헤드를 방지하여 다시 시작 속도를 높일 수 있습니다.
5.3 보안 및 네트워크 구성
주가 인터넷에 복제 포트(6379 또는 기타)를 공개적으로 노출하지 않는 것이 중요합니다. 복제 트래픽이 복제본 서버의 지정된 IP 주소에서만 허용되도록 방화벽 규칙을 구성하십시오.
5.4 읽기 확장에 복제본 사용
복제의 주요 이점은 읽기 부하를 분산하는 것입니다. 주로 읽기 작업을 수행하는 애플리케이션을 복제본 인스턴스로 직접 보내고 주는 쓰기 작업을 위해 예약하여 전체 시스템 처리량을 개선하십시오.
다음 단계
Redis 주-복제 복제를 설정하는 것은 복원력 있고 고성능 애플리케이션을 구축하는 데 필수적입니다. replicaof 지시문을 올바르게 구성하고 INFO replication을 사용하여 링크 상태를 정기적으로 모니터링하면 고가용성 및 효과적인 읽기 확장을 위한 기반을 만들 수 있습니다.
이 가이드는 기본 설정에 중점을 두지만 프로덕션 환경에서는 자동 주 승격 및 장애 감지를 위한 Redis Sentinel 또는 여러 노드 간의 자동 파티셔닝 및 데이터 분산을 위한 Redis Cluster와 같은 추가 자동화 계층을 통합하는 경우가 많습니다.