레디스 백업에는 RDB와 AOF두가지 방식이 존재함
RDB(Redis Database)
- 일정 시간마다 전체 데이터를 디스크에 씀
- 특정 시점에 스냅샷으로 데이터를 저장
- 재시작 시 RDB 파일이 있으면 읽어서 복구
장점
- 작은 파일 사이즈로 백업 파일 관리가 용이 (AOF보다 작음, 원격지 백업 다른곳으로 보냄, 버전관리 날짜별)
- fork를 이용해 백업하므로 서비스중인 프로세스에는 성능에 영향이 없음
- 데이터 스냅샷 방식이 빠른 복구가 가능 스냅샷을 메모미에 그래로 올리면 됨
단점
- 스냅샷을 저장하는 시점 사이에 데이터 변경사항은 유실 될 수 있음
- 1분마다 저장을 하더라도 59초에 장애나고 저장이 안된다면 유실될 수 있음
- fork를 이용하기 때문에 시간이 오래걸릴수 있고 CPU와 메모리 자원을 많이 소모
- 데이터 무결성이나 정합성에 대한 요구가 크지 않는 경우 사용
저장 주기 설정
- save 60 10 (60초마다 10개이상의 변경이 있을때 수행)
수동으로 저장
- bssave
AOF(Append Only File)를 사용한 백업
- 모든 쓰기 요청에 대한 로그를 작성 (set, delete)
- 재시작 시 AOF에 기록된 모든 동작을 재수행해서 데이터를 복구
AOF사용의 장점
- 모든 변경사항이 기록되므로 RDB 방식 대비 안전한 백업
- AOF파일은 append-only방식으로 백업 파일이 손상될 위험이 적음
- 실제 수행된 명령어가 저장되어있으므로 사람이 보고 이해할 수 있고 수정도 가능
AOF 단점
- RDB보다 파일 사이즈가 커짐
- RDB 방식 대비 백업 및 복구 속도가 느림 (백업 성능은 fsync정책에 따라 조절가능)
AOF 사용 (기본값은 no)
appendonly yes
fsync정책 설정 (always, everysec, no)
appnedfsync everysec
- fsync() 호출은 OS에게 데이터를 디스크에 쓰도록 함
always : 새로운 커맨드가 추가될때마다 수행, 가장 안전하지만 느림
everysec: 1초마다 수행 성능은 RDB수준
no : os에 맡김, 가장 빠르지만 덜 안전함(커널마다 수행시간이 달라질 수 있음)