반응형
SMALL
레디스에서 데이터를 영구 저장하기
레디스 인스턴스가 재시작될 경우 메모리에 상주해 있던 레디스의 모든 데이터는 손실될 가능성이 있다.
- 복제: 가용성을 위한 것
- 백업: 장애 상황에서 데이터의 복구를 위한 것
레디스에서는 RDB와 AOP 두 가지의 백업 방식을 지원한다.
RDB | AOP | |
개념 | 일정 시점에 메모리에 저장된 데이터 전체를 저장한다. (snapshot) | 레디스 인스턴스가 처리한 모든 쓰기 작업을 차례대로 기록한다. 복원 시에는 파일을 다시 읽어가며 데이터 세트를 재구성한다. |
장점 | 시점 단위로 여러 백업본을 저장할 수 있다. AOF 파일보다 복원이 빠르다. |
원하는 시점으로 복구할 수 있다. |
단점 | 특정 시점으로의 복구는 불가능하다. | RDB 파일보다 크기가 크고 주기적으로 압축해 재작성해야 한다. |
RDB 방식의 데이터 백업
원하는 시점에 메모리 자체를 스냅숏 찍듯 저장할 수 있기 때문에 백업에 적합한 파일 형태로 볼 수 있다. 하지만 저장 시점부터 장애가 발생한 직전까지의 데이터는 손실될 수 있다.
특정 조건에 자동으로 RDB 파일 생성
save <기간(초)> <기간 내 변경된 키의 개수> # 일정한 기간동안 변경된 키의 개수가 조건에 맞을 때 자동으로 RDB 파일 저장
dbfilename <RDB 파일 이름> # RDB 파일은 dbfilename 옵션에 지정된 이름으로 생성
dir <RDB 파일이 저장될 경로> # dir에 지정한 경로에 저장
save 옵션을 사용해 원하는 조건에 RDB 파일을 저장하도록 설정할 수 있다.
수동으로 RDB 파일 생성
- SAVE 커맨드
- 동기 방식으로 파일을 저장한다.
- 파일 생성이 완료될 때까지 다른 모든 클라이언트의 명령을 차단한다.
- BGSAVE 커맨드
- fork를 호출해 자식 프로세스를 생성하며 생성된 자식 프로세스가 백그라운드에서 RDB 파일을 생성한 뒤 종료된다.
- 백그라운드로 데이터가 저장되고 있을 때 이 커맨드를 수행하며 에러를 반환한다. (SCHEDULE 옵션을 사용하면 기존 백업 완료 후 다시 BGSAVE 수행)
복제를 사용할 경우 자동으로 RDB 파일 생성
- 복제본에서 REPLICAOF 커맨드를 이용해 복제를 요청하면 마스터 노드에서는 RDB 파일을 새로 생성해 복제본에 전달한다.
- 이미 복제 연결이 돼 있는 상태에서도 상황에 따라 마스터에서는 언제든지 RDB 파일을 재생성할 수 있다.
AOF 방식의 데이터 백업
appendonly yes
appendfilename "appendonly.aof"
appenddirname "appendonlydir"
appendonly 옵션을 yes로 지정하면 AOF 파일에 주기적으로 데이터가 저장된다.
AOF 파일을 재구성하는 방법
- 기본이 되는 바이너리 형태의 RDB 파일, 증가하는 RESP의 텍스트 형태의 AOF 파일로 나눠 데이터를 관리한다.
- 현재 레디스가 바라보고 있는 파일이 어떤 것인지 나타내는 매니페스트 파일이 추가적으로 도입됐다.
- 세 파일 모두 설정 파일에 지정한 appenddirname 이름의 폴더 내에 저장된다.
- 레디스 인스턴스는 fork를 이용해 자식 프로세스를 생성한다. 생성된 자식 프로세스는 레디스 메모리의 데이터를 읽어와 신규로 생성한 임시 파일에 저장한다.
- 백그라운드로 (1)의 과정이 진행되는 동안 레디스 메모리의 데이터가 변경된 내역은 신규 AOF 파일에 저장된다.
- (1)의 AOF 재구성 과정이 끝나면 임시 매니페스트 파일을 생성한 뒤, 변경된 버전으로 매니페스트 파일 내용을 업데이트한다.
- 생성된 임시 매니페스트 파일로 기존 매니페스트 파일을 덮어 씌운 뒤, 이전 버전의 AOF, RDB 파일들을 삭제한다.
자동 AOF 재구성
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
AOF 파일을 다시 쓰기 위한 시점을 정하기 위한 옵션이다. 마지막으로 재구성됐던 AOF 파일의 크기와 비교해, 현재의 AOF 파일이 지정된 퍼센트만큼 커졌을 때 재구성을 시도한다.
수동 AOF 재구성
BGREWRITEAOF 커맨드를 이용하면 원하는 시점에 직접 AOF 파일을 재구성할 수 있다.
AOF 타임스탬프
aof-timestamp-enabled yes
aof-timestamp-enabled 옵션을 활성화시키면 AOF 데이터가 저장될 때 타임스탬프도 함께 저장된다.
AOF 파일 복원
- 시점 복원에서 사용한 redis-check-aof 프로그램은 AOF 파일이 손상됐을 때에도 사용할 수 있다.
- 레디스가 의도치 않은 장애로 중단됐을 때 redis-check-aof 프로그램을 사용하면 AOF 파일의 상태가 정상적인지 확인할 수 있다.
- fix 옵션을 사용한 복구 또한 원본 파일을 변경하기 때문에 이전의 데이터를 보호하고 싶은 경우 원본 데이터를 다른 곳에 복사해두는 것이 안전하다.
AOF 파일의 안전성
레디스에서 AOF 파일을 저장할 때 APPENDSYNC 옵션을 이용하면 FSYNC 호출을 제어할 수 있으며, 즉 파일 저장의 내구성을 제어할 수 있다.
- APPENDSYNC no: AOF 데이터를 저장할 때 WRITE 시스템 콜을 호출한다.
- APPENDSYNC always: AOF 데이터를 저장할 때 항상 WRITE와 FSYNC 시스템 콜을 함께 호출한다.
- APPENDSYNC everysec: 데이터를 저장할 때 WRITE 시스템 콜을 호출하며, 1초에 한 번씩 FSYNC 시스템 콜을 호출한다.
백업을 사용할 때 주의할 점
- RDB와 AOF 파일을 사용하는 경우 인스턴스의 maxmemory 값은 실제 서버 메모리보다 여유를 갖고 설정하는 것이 좋다.
- 물리적 메모리에 있는 실제 메모리 페이지가 그대로 복제되기 때문에 최악의 경우 레디스는 기존 메모리 용량의 2배를 사용하게 될 수도 있다.
- RDB 스냅숏을 저장하는 도중엔 AOF의 재구성 기능을 사용할 수 없고, AOF 재구성이 진행될 때에는 BGSAVE를 실행할 수 없다.
반응형
LIST
'독서 > 개발자를 위한 레디스' 카테고리의 다른 글
[개발자를 위한 레디스] 9장 센티널 (1) | 2024.12.02 |
---|---|
[개발자를 위한 레디스] 8장 복제 (0) | 2024.11.23 |
[개발자를 위한 레디스] 6장 레디스를 메시지 브로커로 사용하기 (0) | 2024.10.29 |
[개발자를 위한 레디스] 5장 레디스를 캐시로 사용하기 (0) | 2024.10.19 |
[개발자를 위한 레디스] 4장 레디스 자료 구조 활용 사례 (0) | 2024.10.06 |