aof_backup
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 >> |
---|