하야시 쇼고 님의 "실전 레디스" 책을 정리한 포스팅 입니다.
1. 데이터 영속성
인메모리 데이터베이스
- 레디스는 기본적으로 인메모리 데이터베이스이므로 서버가 재시작되면 데이터가 유실될 수 있음
영속성 지원
- 레디스를 데이터 저장소처럼 데이터 영속성을 전제로 운영할 수 있음 (옵션 제공)
성능 vs 내구성
- 영속성을 설정하면 성능에 영향을 줄 수 있으므로, 적절한 트레이드 오프를 고려해야 함
- 성능과 내구성의 타협점을 찾고 설정하는것을 권장함
전략 설정 필요
- 시스템 요구사항에 맞는 영속성 설정을 선택하여 운영해야 함
2. 스냅숏
- 특정 시점의 데이터베이스 내용을 RDB라는 형식의 파일로 저장
- 파일을 복원하는 형태로 데이터 재사용이 가능함
- 기본적으로 설정된 영속성 방법
저장 방식
방식 | 실행 방식 | 특징 | 동작 방식 | 권장 여부 |
SAVE | 동기 | 블로킹 발생 | 즉시 RDB 파일을 생성하고 저장 |
❌ (권장되지 않음)
|
BGSAVE | 비동기 | 성능 우수 | 자식 프로세스를 포크하여 RDB 파일을 덤프 (Copy On Write 활용) | ✅ (권장) |
자동 BGSAVE | 비동기 | 설정 기반 | 일정 시간 내에 변경된 키 개수가 기준을 넘으면 자동 실행 | ✅ (권장) |
예시
SAVE
BGSAVE
save 900 1 # 900초(15분) 동안 1개 이상의 키 변경 시 RDB 저장
save 300 10 # 300초(5분) 동안 10개 이상의 키 변경 시 RDB 저장
save 60 10000 # 60초(1분) 동안 10000개 이상의 키 변경 시 RDB 저장
복원
- cron, system.timer 활용하여 자동 복원 가능
튜닝
쓰기 작업 수용 여부
- 저장 중 오류가 발생하면 쓰기 작업 요청을 수락하지 않음
- 영속성 문제를 관리자에게 알리기 위함
압축
- rdbcompression 지시자를 활용하여 사용 여부 설정
데이터 무결성
- CRC64 체크섬을 추가하여 데이터의 무결성을 체크
지시자
지시자 | 설명 | 예제 값 |
dir | RDB 파일이 저장될 디렉토리 경로 | /var/lib/redis |
dbfilename | 저장될 RDB 파일의 이름 | dump.rdb |
rdbcompression | RDB 파일 압축 여부 (yes = 압축, no = 압축 안 함) | yes / no |
stop-writes-on-bgsave-error | BGSAVE 중 오류 발생 시 추가적인 쓰기 요청을 수락할지 여부 | yes / no |
3. AOF
- Append-Only File (추가 전용 파일)
- 모든 쓰기 작업을 로그 형식으로 기록하여 데이터를 복구하는 방식
- 명령어를 AOF 파일에 추가하고, 재시작 시 AOF 파일을 읽어와 데이터를 복원
AOF 버퍼
- 명령어를 버퍼링하여 저장 후, 일정 주기마다 AOF 파일에 디스크 플러시(저장)
AOF 재작성
- AOF 파일이 커지면 Redis는 자동으로 AOF 파일을 재작성하여 크기를 줄이고 효율성을 높임
- 부모 프로세스와 자식 프로세스가 협력하여 새로운 AOF 파일을 생성 및 교체함
과정
- 자식 프로세스 포크
- 현재 실행중인 프로세스에서 자식 프로세스를 포크함
- Copy-On-Write 기법을 사용하여 메모리 복사를 최소화함
- 자식 프로세스: 새로운 AOF 파일을 생성
- 자식 프로세스는 기존 AOF 파일을 기반으로 최적화된 새로운 AOF 파일을 생성함
- 삭제된 키, 중복된 명령어, 불필요한 명령어를 제거하여 AOF 파일 크기를 줄임
- 부모 프로세스: AOF 재작성 버퍼에 명령어 저장
- AOF 재작성 중에도 Redis는 계속해서 클라이언트 요청을 처리해야 함
- 부모 프로세스는 포크 이후 들어온 새로운 쓰기 작업을 AOF 재작성 버퍼에 저장해 둠
- 자식 프로세스: AOF 재작성 완료 후 부모 프로세스에게 신호 전달
- 부모 프로세스는 AOF 재작성 버퍼의 변경 사항을 자식 프로세스에 전달함
- 자식 프로세스: 변경사항 반영 및 저장
- 자식 프로세스는 전달 받은 AOF 재작성 버퍼의 내요을 새로운 AOF 파일에 추가하여 최신 상태로 만듬
- 새 AOF 파일을 기존 파일과 교체
멀티파트 AOF
스냅숏(RDB)과 다른 디렉터리에 저장
기본 AOF 파일과 추가 AOF 파일
- AOF 파일은 기본 파일과 추가 파일로 분할됨
- 기본 AOF 파일은 Redis 서버가 시작될 떄 전체 데이터 세트를 보유하는 파일로 사용됨
- 추가 AOF 파일은 새로운 명령어들이 추가될 때마다 생성됨 (여러개가 될 수 있음)
- 분리로 인해 부모 프로세스가 자식 프로세스로 추가 데이터를 전송하는 과정이 불필요해져 CPU 처리 시간이 줄음
단점
- AOF 파일이 커질수록 재시작 시간이 길어짐
지시자
지시자 | 설명 |
appendonly |
AOF 활성화 (yes로 설정 시 동작)
|
appenddirname |
AOF 파일이 저장될 디렉터리 지정
|
appendfilename |
AOF 파일 이름 지정
|
appendfsync |
AOF 데이터 디스크 반영 주기 (always, everysec, no 선택)
|
auto-aof-rewrite-percentage |
기존 AOF 크기 대비 몇 % 커지면 AOF 재작성 실행할지 설정
|
auto-aof-rewrite-min-size |
AOF 재작성이 실행될 최소 크기 지정
|
예제
활성화
appendonly yes
appenddirname /var/lib/redis/aof
appendfilename "appendonly.aof"
appendfsync everysec
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
AOF 재작성 수동 실행
BGREWRITEAOF
'Database > Redis' 카테고리의 다른 글
[실전 레디스] 5-3. 레디스 운용 관리: 셋팅 (0) | 2025.03.21 |
---|---|
[실전 레디스] 5-2. 레디스 운용 관리: 아키텍처 (0) | 2025.03.21 |
[실전 레디스] 3-1. 고급 기능: 주요 기능 (0) | 2025.03.21 |
[실전 레디스] 3-2. 고급 기능: 루아 (0) | 2025.03.21 |
[실전 레디스] 2-4. 자료형과 기능: 공통 명령어 (0) | 2025.03.21 |