관리 메뉴

가끔 보자, 하늘.

Redis "... currently not able to persist on disk." 메세지 본문

개발 이야기/개발 및 서비스

Redis "... currently not able to persist on disk." 메세지

가온아 2023. 12. 27. 12:22

오래된 서비스에서 사용중인 redis에서 사고가 나 기록차 남겨둡니다. 

windows server 2019, redis 3.x  x64 버전 을 사용중인 서버입니다. 워낙 오래된 하드웨어라 ubuntu 혹은 centos 최신 버전이 설치되지 않는 시스템이었습니다. 사용중인 redis 버전의 마지막 업데이트는 7년전이더군요.

메모리 32GB, dump.rdb 파일의 용량이 10GB 되기 직전이었으며 쓰기를 시도하면 에러가 발생하고 있는 상황이었습니다.

발생한 에러 메세지는 다음과 같습니다.

Redis error {:message=>"ERR Error running script (call to f_b9af23c13eeefc2ae7a9375fe3d3645e2e9c9fc8): @user_script:3: @user_script: 3: -MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redis logs for details about the error.", :exception=>Redis::CommandError}

 

시스템에서는 temp db 파일이 생성되어 복사를 시도하는 듯 했는데 메모리 부족 때문이었는지 계속 실패를 반복하고 있는 듯 했습니다. 

config 파일의 stop-writes-on-bgsave-error 옵션은 기본값이 yes로 설정되어 있어 rdb 파일의 쓰기 작업이 완료되기 전까지는 데이터 추가는 막혀 있고 rdb 파일 쓰기는 메모리 부족 문제로 계속 실패를 반복하고 있는 악순환의 상태였습니다. 

디스크 용량은 충분했고 메인 메모리가 32GB, dump.rdb의 용량이 10GB, snapshot 시 10GB가 추가되어도 20GB의 여유만 있으면 복사하는데 문제가 없었을 듯 한데 왜 이런 문제가 발생했는지 좀 의아했습니다. 시스템 페이징 파일 용량 설정도 12GB 였기에 무리가 없었을 듯 한데...  Disk에는 압축되어 저장되므로 in memory에서는 더 큰 용량을 사용하지 않았을까 하여 다시 올려보니 메모리에는 약 16GB 정도 차지하더군요. OS의 기본 사용량을 고려하면 문제가 될 듯 했습니다. 

테스트를 위해 쓰기 작업을 시작하는 순간 snapshot을 시도하며 temp 파일이 생성되어 10GB 파일을 추가로 생성을 시도하지만 정상적으로 완료되지 않더군요. 그럼 이후에는 위와 동일한 에러가 발생하면서 다시 stuck!!

별 수 없이 다른 시스템으로 dump.rdb 파일을 옮겨 데이터를 복구하고 기존 시스템은 데이터를 초기화해서 복구. 용량 초과되지 않도록 조치 후 마무리했습니다. 기본적으로 redis에 10GB 이상의 데이터가 쌓이도록 한게 문제이니 redis 문제라고 하기는 애매하긴 했네요.

혹시 몰라 system paging file 용량도 좀 늘려두었으나 그래도 redis 3.x 버전은 너무 오래된 듯 하여 다음에 다른 Redis windows 버전 으로 업데이트 할 예정입니다. 업데이트 후 문제가 발생하면 여기 추가해 두겠습니다. 윈도우에 wsl2 나 docker없이 redis 사용하시는 분들은 참고하세요.

끝!!

반응형