Redis 백업 및 복구(RDB, AOF)

woonie·2023년 2월 14일
0

Redis를 작년 프로젝트에서 사용해보고 이번 프로젝트에서도 사용하기로 했다.

Redis는 인메모리 데이터 저장소로 읽기 성능이 뛰어나 캐싱, 세션 저장소 등 다양한 곳에서 많이 사용된다.

하지만 인메모리 데이터 특성상 휘발성으로 종료되는 경우 데이터가 유실된다. 기존 프로젝트에서는 현재 채팅방 인원수를 카운팅 해야하기에 유실되도 상관이 없었다.
이번 프로젝트에서는 속도 개선과 DB에 데이터를 저장하게 되면 너무 방대한 양의 데이터가 저장되고 조회수 어뷰징 방지, 최근 조회 글, 다운로드 글 등 데이터가 유실되면 안되기에 데이터를 다시 DB에 저장해야 하나 고민중에 Redis에서 RDB와 AOF 라는 방법으로 백업이 가능하다고 한다.

RDB와 AOF도 각각의 장단점이 있으니 비교하면서 상황에 맞게 적절한 방법으로 사용해야 한다

1. RDB(Redis Database)

  • 특정 시점(snapShot)의 메모리에 있는 데이터 전체를 바이너리 파일로 저장하는 방법
  • AOF 파일보다 사이즈가 작아 Redis 실행 시 AOF 파일보다 빠르게 로드된다.
  • 단일 파일이기 때문에 원거리 데이터 센터 또는 S3로 전송하기 용이
  • 바이너리 파일로 저장되기에 사람이 읽을 수 없다.
  • 특정 조건이 만족되면 현재의 Redis 상태를 스냅샷으로 백업하므로 그 전에 Redis가 종료된다면 그 사이의 데이터는 복원할 수 없다.

1-1.RDB 기본 설정

  • 별도 설정을 하지 않은 경우 기본 설정은 아래와 같이 지정되어 있다.
  • config get save
    • 3600초 안에 1개 이상의 데이터가 변경되면 저장
    • 300초 안에 100개 이상의 데이터가 변경되면 저장
    • 60초 안에 10000개 이상의 데이터가 변경되면 저장

1-2. RDB Restoring

  • dump.rdb 파일을 restore하기 위해 단순히 Redis의 data dir에 넣고 Redis를 재시작 하기만 하면 된다.
  • Data dir 위치는 redis.conf 또는 redis-cli에서 congfig get dir 명령어로 찾는다.

2. AOF(Append Oniy File)

  • 쓰기 명령에 대한 모든 로그를 남긴다.
  • 쓰기 명령에 대해 추가하며 기록되기 때문에 파일 사이즈가 커진다.
  • 사이즈가 많이 커진다면 레디스 서버 시작 시 로드가 지연될 수 있다.
  • 용량이 특정 사이즈보다 크면 rewrite를 통해 사이즈를 줄인다.
  • AOF파일은 text 파일이므로 edit이 가능하다.
    ->flusall 명령으로 메모리에 있는 모든 데이터를 지웠을 경우 appendonly.aof파일에서 해당 명령어를 제거 후 redis를 재실행하면 데이터 손실 없이 DB를 살릴 수 있다.

2-1. AOF 기본 설정

  • appendonly yes 또는 no : yes는 AOF기능을 사용. no는 사용하지 않음. Redis 서버 시작 시 이 값이 yes 일때만 AOF 파일을 읽는다.no 이면 AOF 파일이 있어도 읽지 않는다.
  • appendfilename "appendonly.aof" : AOF 파일명을 지정. Path는 지정할 수 없다. Path는 working directory에 따른다.
    appendfsync : AOF에 기록하는 시점을 정함.
    • always : 명령 실행 시 마다 AOF에 기록. 데이터 유실의 염려는 없으나, 성능이 매우 떨어진다.
    • everysec : 매 초 마다 AOF에 기록. 1초 사이 데이터 유실될 수 있으나, 성능에 거의 영향을 미치지 않으면서 데이터를 보존할 수 있어, 일반적으로 권장. (default 값)
    • no : AOF에 기록하는 시점을 OS가 정함. 기본적으로 리눅스는 30초 마다 flush하지만 커널의 정확한 조정에 다름.

2-2. Rewrite

  • AOF 파일이 특정 사이즈가 넘어 간다면 Redis의 현재 메모리 정보를 다시 AOF 파일에 쓰게된다.
  • 설정
    • auto-aof-rewrite-percentage 100 : AOF 파일 사이즈가 100% 이상 커지면 rewrite.
      처음에는 Redis 서버가 시작할 시점의 AOF 파일 사이즈를 기준. Rewrite를 이 후에는 Rewrite 후 파일 사이즈를 기준으로 계산한다.
    • auto-aof-rewrite-min-size 64mb : AOF 파일 사이즈가 64mb 이하면 Rewrite를 하지 않는다. 파일이 작을때 Rewrite가 자주 발생하는 것을 막아주고 만약 이 설정 값이 0이라면 rewrite를 수행하지 않는다.
profile
동료들과 함께하는 개발의 중요성에 관심이 많습니다. 언제나 호기심을 갖고 꾸준히 노력하는 개발자로서 성장하고 있습니다.

0개의 댓글