반응형

AOF File 손상에 대한 오류 해결 방법

The Problem

Redis를 docker-compose를 통해 Container 구성 후 정상적으로 동작했었는데, 재부팅 등.. Container가 정상적으로 종료되지 않는 상황에서 간혹 위와 같은 오류에 직면하게 되었다.

먼저 AOF 란? 무엇이고 왜 Bad file format....reading 이 발생했는지 그 원인을 알아보자.
현재 내가 설정한 redis.conf 구성 환경은 다음과 같다.

appendonly yes
appendfilename "appendonly.aof"
....생략

Redis는 데이터를 메모리에 저장하는 임시 저장소 구조로 Redis Container가 Stop or Restart 되면 저장된 데이터는 휘발된다. 따라서 데이터 손실을 해결하기 위해 내부적으로 백업 메커니즘을 제공하는데 크게 RDB와 Append-only File(AOF)을 제공한다. 두 가지 방식을 동시에 ON 할 수도 있는데 나의 경우도 위와 같이 redis.conf에 appenonly를 활성화 해놓은 상태다. AOF의 경우 실시간으로 요청받는 Command를 파일에 지속적으로 추가하는 방식으로, 간혹 Redis Container가 비정상으로 종료되어 파일에 기록이 잘 못되거나 손상될 경우 Redis 재기동시 백업 데이터를 복구하면서 Bad file format reading the append only file 예외가 발생할 수 있습니다.
Redis는 손상된 AOF file을 확인하고 수정할 수 있는 redis-check-aof라는 툴을 제공합니다.

먼저 아래와 같이 docker-container에 접속해서 appendonly.aof 파일을 확인해 봅니다.

docker container 접속

$ docker exec -it redis-6397 bash

appendonly.aof 파일 내용 확인 및 --fix 옵션 사용

docker volume에서 지정한 data 디렉터리로 이동 후 --fix 옵션을 지정하여 명령어를 실행하면, 아래와 같이 prompt 모드가 노출됩니다. 그리고 수정을 위해 y를 선택하면 정상적으로 successfully truncated 메시지가 노출되면 처리가 완료된 것을 확인할 수 있고,
다시 cat 명령어로 appendonly file을 열어보면 위 내용에서 1672910415643 이후 라인이 삭제된 것을 볼 수 있습니다.

상황에 따라 수정할 라인을 알 수 있을 경우 vi 에디터로 직접 수정 후 file의 valid 상태를 점검하는 용도로 사용하실 수 있습니다. redis-check-aof 툴의 경우 성능상의 단점과 디스크 공간을 필요로 한다고 합니다. 이 부분은 조금 더 상세하게 확인이 필요하고 실제 production 환경에서 사용 시 반드시 체크 후 진행이 필요합니다.

$ /src/redis-check-aof appendonly.aof

위 과정을 수행 후 docker-compose up을 수행하면 아래와 같이 정상적으로 Redis 컨테이너가 기동 됩니다.

오늘은 Redis AOF file 손상 시 복구 및 해결 방법에 대하여 실습해 봤습니다.

[참고자료]

[Sysadmin Blog](https://sysadminblog.online/general/docker-redis-bad-file-format-reading-the-append-only-file/)
[redis.io](https://redis.io/docs/management/persistence/#what-should-i-do-if-my-aof-gets-corrupted)

반응형

+ Recent posts