Linux, ML/DL, DevOps, 클라우드

[Redis] Error: MISCONF Redis is configured to save RDB snapshots, but it is currently not able to persist on disk. 본문

DB/Redis

[Redis] Error: MISCONF Redis is configured to save RDB snapshots, but it is currently not able to persist on disk.

draidev 2024. 2. 7. 22:52

Error message

Error: MISCONF Redis is configured to save RDB snapshots, but it is currently not able to persist on disk. Commands that may modify the data set are disabled, because this instance is configured to report errors during writes if RDB snapshotting fails (stop-writes-on-bgsave-error option). Please check the Redis logs for details about the RDB error.

Redis가 디스크에 데이터를 지속적으로 저장하는 데 문제가 있다는 것을 나타낸다. 이는 일반적으로 Redis의 스냅샷 기능과 관련이 있는데, 이 기능은 지정된 간격으로 메모리의 데이터를 디스크에 저장한다.

 

Redis는 persistent 를 위해서 BGSAVE로 RDB를 만들어낸다. 그런데 기본적으로 이 BGSAVE가 실패하게 되면 Redis는 설정에 따라서 Write 커맨드를 전부 거부 해버린다. 그래서 Redis를 단순한 캐시 용도로만 사용한다면 RDB기능을 꺼버리면 된다.

 

실제로 회사 장비의 disk가 98%가 넘게 차있었고 디스크를 정리해주니 정상작동하게 되었다.

 

Redis의 데이터 저장 방식은 아래에 따로 정리하였다.

Redis 데이터 저장 방식

1. Snap Shotting 메모리 스냅샷(RDB, Redis Database)

  • 특정 시점(snapshot)의 메모리에 있는 데이터 전체를 바이너리 파일로 저장한다.
  • AOF파일보다 사이즈가 작기때문에 로딩속도가 AOF보다 빠르다.
  • 저장 시점은 redis.conf의 save파라미터로 설정한다.
    • save 900 : 900초 동안 1번 이상 key 변경 발생 시 저장
    • save 300 10 : 300초 동안 10번 이상 key 변경 발생 시 저장
    • save 조건은 여러 개 지정 가능하며 or조건으로 하나라도 만족하면 수행

2. Append on File(AOF)

  • 명령이 실행될 때마다 해당 명령이 파일에 기록된다.
  • 데이터 손실이 거의 없다.
    • 거의라고 표현하는 이유는 명령이 실행되면 바로 작성하는게 아니라, 버퍼에 두었다가 주기적으로 파일에 쓰는 방식이기 때문이다.
  • 기본값으로 appendonly.aof 파일에 기록된다.
  • 조회 명령을 제외한 입력/수정/삭제 명령이 실행될 때마다 버퍼에 기록 후 파일로 동기화됩니다.
  • 특정 시점에 데이터 전체를 다시 쓰는 기능(rewrite)이 있다.

 

 

Comments