Redis Software 데이터 지속성 설정하기
Redis Software 데이터 지속성 설정하기 (AOF / RDB)
Redis는 기본적으로 데이터를 RAM(또는 RAM과 플래시 메모리의 조합)에 두는데, 이러면 프로세스나 서버가 죽는 순간 데이터를 잃을 위험이 있어요. Redis Software는 데이터베이스 단위로 디스크에 영속화하는 여러 방법을 제공해서 이런 손실을 막아줘요. 이 글에서는 AOF와 스냅샷(RDB) 두 방식의 차이, 그리고 운영 환경에서 어떤 기준으로 고르면 좋은지 알아볼게요.
지속성 모델은 언제 정하나요
데이터 지속성은 데이터베이스를 만들 때 설정하거나, 이미 만든 데이터베이스를 편집해서 정할 수 있어요. 지속성 모델은 실행 중에도 바꿀 수 있지만, 데이터베이스 규모와 전환 대상 모델에 따라 전환에 시간이 걸릴 수 있으니 주의해야 해요.
UI로 설정하려면 이렇게 따라가 주세요.
- Databases 목록에서 데이터베이스를 선택한 뒤 Configuration을 선택해요.
- Edit을 선택해요.
- Durability 섹션을 펼쳐요.
- Persistence에서 목록의 옵션 중 하나를 골라요.
- 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>