Redis Software 데이터 지속성 설정하기

Redis Software 데이터 지속성 설정하기 (AOF / RDB)

Redis는 기본적으로 데이터를 RAM(또는 RAM과 플래시 메모리의 조합)에 두는데, 이러면 프로세스나 서버가 죽는 순간 데이터를 잃을 위험이 있어요. Redis Software는 데이터베이스 단위로 디스크에 영속화하는 여러 방법을 제공해서 이런 손실을 막아줘요. 이 글에서는 AOF와 스냅샷(RDB) 두 방식의 차이, 그리고 운영 환경에서 어떤 기준으로 고르면 좋은지 알아볼게요.

출처: Redis 공식 문서 - Configure database persistence

지속성 모델은 언제 정하나요

데이터 지속성은 데이터베이스를 만들 때 설정하거나, 이미 만든 데이터베이스를 편집해서 정할 수 있어요. 지속성 모델은 실행 중에도 바꿀 수 있지만, 데이터베이스 규모와 전환 대상 모델에 따라 전환에 시간이 걸릴 수 있으니 주의해야 해요.

UI로 설정하려면 이렇게 따라가 주세요.

  1. Databases 목록에서 데이터베이스를 선택한 뒤 Configuration을 선택해요.
  2. Edit을 선택해요.
  3. Durability 섹션을 펼쳐요.
  4. Persistence에서 목록의 옵션 중 하나를 골라요.
  5. Save를 선택해요.

데이터 지속성 옵션

Redis Software에서 지속성 옵션은 여섯 가지가 있어요.

옵션 설명
None 데이터를 디스크에 전혀 저장하지 않아요.
Append-only file (AOF) - fsync every write 모든 쓰기마다 데이터를 디스크에 fsync해요.
Snapshot, every 1 hour 매시간 데이터베이스 스냅샷을 만들어요.
Snapshot, every 6 hours 6시간마다 스냅샷을 만들어요.
Snapshot, every 12 hours 12시간마다 스냅샷을 만들어요.

(원문 표에서 Append-only file (AOF) - fsync every write 외에도 AOF 관련 옵션이 더 있을 수 있지만, 핵심 선택지는 위와 같이 스냅샷 주기와 AOF 정책으로 나뉘어요.)

지속성 전략 고르기

성능과 내구성 사이의 균형을 위해 Redis가 fsync()를 얼마나 자주 수행할지를 정할 수 있어요. Redis는 세 가지 fsync 정책을 지원해요. 모든 쓰기마다, 매초마다, 그리고 비활성이 그 세 가지예요. Redis는 또 RDB 파일을 통한 스냅샷 저장도 허용하는데, Redis Software 안에서는 스냅샷과 fsync 정책을 함께 구성할 수 있어요.

고가용성이 필요하다면 복제(replication)를 써서 데이터 손실 위험을 더 줄이는 게 좋아요.

데이터 손실 비용이 큰 경우라면:

  • Append-only file (AOF) - fsync every write — Redis Software가 Redis 지시자 appendfsyncalways를 설정해요. 이 정책에서는 쓰기와 fsync가 끝날 때까지 기다린 뒤 클라이언트에 데이터가 기록됐다는 응답을 보내요.
  • Append-only file (AOF) - fsync every 1 sec — 새로 쓴 데이터를 매초 fsync해요. 이 정책은 성능과 내구성의 균형을 잡아주는데, 실패 시 최소한의 데이터 손실이 허용되어야 하는 경우에 써요. Redis의 기본 정책이기도 하죠.

AOF로 지속성을 쓰고 있다면 복제를 활성화해 성능을 높이는 걸 권장해요. 두 기능을 모두 켜면 복제본이 지속성을 담당해서, 마스터에 성능 영향을 주지 않거든요.

데이터 손실이 오랫동안 허용되거나 복구 가능한 경우라면:

  • Snapshot, every 1 hour — 매시간 전체 백업을 수행해요.
  • Snapshot, every 6 hour — 6시간마다 전체 백업을 수행해요.
  • Snapshot, every 12 hour — 12시간마다 전체 백업을 수행해요.
  • None — 백업도 지속성도 전혀 하지 않아요.

AOF와 스냅샷(RDB), 뭘 고를까

두 옵션을 더 잘 고르기 위해 비교해볼게요.

Append-only File (AOF) Snapshot (RDB)
리소스 소모가 더 큼 리소스 소모가 더 적음
디스크 공간을 더 많이 차지 (파일이 커져 압축 필요) 리소스가 덜 필요 (몇 시간에 한 번 I/O, 압축 불필요)

Active-Active 데이터 지속성

Active-Active 데이터베이스는 AOF 지속성만 지원해요. 스냅샷 지속성은 Active-Active 데이터베이스에서 지원되지 않아요.

Active-Active 데이터베이스가 스냅샷 지속성을 사용 중이라면, crdb-cli로 AOF 지속성으로 전환할 수 있어요.

crdb-cli crdb update --crdb-guid <CRDB_GUID> --default-db-config \
   '{"data_persistence": "aof", "aof_policy":"appendfsync-every-sec"}'

Auto Tiering 데이터 지속성

성능이 매우 중요한 경우, 데이터 지속성이 레이턴시를 더하지 않게 하고 싶을 수 있어요. 마스터 샤드에서 데이터 지속성을 켜거나 끄려면 다음 rladmin 명령을 쓰면 돼요.

rladmin tune db <database_ID_or_name> master_persistence <disabled | enabled>

더 알아보기