AOF Backup

Redis Server Course Redis Technical Support Redis Enterprise Server

AOF Backup script

개요 槪要 Outline

이 글에서는 AOF 파일을 백업받는 방법을 설명합니다.   이 전 글에서 설명한 "AOF fsync is taking too long" 문제를 일으키지 않고 효과적으로 백업받는 방법입니다.
AOF 관련 운영 설정(redis.conf)을 "appendonly yes", "appendfsync everysec", "auto-aof-rewrite-percentage 0"으로 했을 경우 적용하기 좋은 방법이다.   마지막 파라미터(auto-aof-rewrite-percentage)는 AOF 파일 크기가 증가하면 자동으로 전체 데이터를 다시쓰기(rewrite)하는 옵션인데 0으로 설정하면 자동 다시쓰기를 하지 않는다.   여기서는 AOF 파일 크기를 줄이기 위해서 백업 진행 단계에서 bgrewriteaof 명령으로 다시쓰기한 후 백업한다.
이 백업 스크립트 수행은 레디스 서버 부하가 적은 시간대를 선택해서 한다.

방법 方法 Method

백업은 총 5 단계로 진행된다.   마지막 단계는 총 소요 시간 표시한다.   각 단계 중간에 1초씩 여유 시간(sleep time)을 준다.

  • Step 1)   appendfsync no로 변경
    appendfsync 를 no로 변경하면 디스크 쓰기는 운영체제(OS,Linux)가 담당하며, 최대 30초까지 지연될 수 있다.   백업 시간 동안 이 정도 지연이 허용될 경우 적용한다.   하지만, 30초 지연은 슬레이브가 없을 경우에 해당하며, 슬레이브가 있으면 슬레이브에 실 시간 복제가 되므로 데이터 유실은 걱정하지 않아도 된다.
  • Step 2) background rewrite aof
    bgrewriteaof 명령을 수행해서 전체 데이터를 다시쓰기(rewrite)를 시작한다.
  • Step 3) aof rewrite가 완료되었는지 확인하는 부분
    bgrewriteaof는 백그라운드로 실행되므로 완료되었는지 확인하는 것을 이 단계에서 한다.   확인 방법은 매 초마다 info persistence 명령을 실행해서 여러 항목 중 두 가지을 체크한다.   두 가지 항목으로 모두 만족하면(AND 조건) 다시쓰기가 완료된 것으로 확정한다.
    • aof_rewrite_in_progress: 다시쓰기(rewrite)가 수행중이면 1, 아니면 0이다.   매초 확인 시 마다 이전 값을 저장하고 있다가 1에서 0으로 바뀌면 완료된 것으로 본다.
    • aof_current_rewrite_time_sec: 다시쓰기(rewrite) 수행 시간이 나온다.   계속 증가하다가 완료되면 "-1"로 바뀐다.   이전 값이 "-"가 아니고(양수이고) 현재 값이 "-"이면(-1 이면) 완료된 것으로 본다.
  • Step 4) 압축과 백업 Compression and backup(move file)
    다시쓰기로 만들어진 AOF 파일을 zip으로 압축하여 백업 디렉토리(HDD)에 쓴다.
  • Step 5) everysec로 변경
    appendfsync를 원래대로 everysec로 변경한다.
  • 시작 시각, 종료 시각, 소요 시간 표시
    시작 시각, 종료 시각, 총 소요 시간을 표시한다.   총 소요 시간은 단계 마다에 있는 여유 시간(sleep time) 4초를 포함한다.

스크립트 설명 About shell script

  • 쉘은 Bash(Bourne-again shell)를 사용했다. 다른 쉘을 사용할 경우 각 쉘에 맞게 수정할 필요가 있을 것이다.
  • 이 스크립트를 크론(cron)이나 다른 스케줄러에 등록해서 정기적으로 수행한다.
  • 압축된 파일명은 aof_20161008120821-7000.zip 형태이다. 중간에 압축 일시(년월일시분초)가 들어가고, 마지막이 포트이다.
  • 디렉토리, 포트는 운영환경에 맞게 수정하시기 바랍니다.

정리 整理 Summary

AOF 파일 백업하는 방법을 설명하고 쉘 스크립트로 만들어 보았습니다.   이 글이 운영에 도움이 되기길 바랍니다.   이 글을 보시고 질문이나 의문사항있으면 댓글을 올려주세요.   더불어 잘못된 내용이 있으면 알려주시면 고맙겠습니다.


<< AOF fsync is taking too long AOF Backup AOF Multi-Part >>

Email 답글이 올라오면 이메일로 알려드리겠습니다.