Redis의 개념과 정의는 알아보았는데, 데이터 관점에서 백업과 복구가 중요할 수 있어서 좀 더 세분화 적으로 확인해보았습니다.
이번글에서는 인메모리 데이터베이스 구조의 캐시 기능으로 빠르게 데이터를 읽을 수 있다는 알겠지만
영속성 즉, 영속성이란? 데이터를 생성한 프로그램이 종료되어도 사라지지 않는 데이터의 특성에 대한 옵션에 대해 알아 보겠습니다.
영속성 기능을 사용하면 Redis 서버가 재시작되거나 시스템 장애가 발생해도 데이터를 복구할 수 있습니다. Redis는 여러 가지 영속성 옵션을 제공하여 사용자가 요구하는 수준의 영속성을 선택할 수 있도록 합니다.
Redis 영속성의 주요 방식
Redis는 **RDB (Redis Database Snapshotting)**와 AOF (Append-Only File) 두 가지 주요 영속성 옵션을 제공합니다. 또한 두 가지 방식을 혼합하여 사용할 수도 있습니다.
1. RDB (Redis Database Snapshotting)
- RDB는 Redis 데이터베이스의 스냅샷을 주기적으로 디스크에 저장하는 방식입니다.
- 일정한 시간 간격으로 Redis의 전체 데이터를 하나의 파일로 덤프하여 저장합니다. 이 파일은 보통 dump.rdb라는 이름으로 저장됩니다.
특징:
- 주기적 저장: RDB는 일정 주기로 데이터를 디스크에 저장합니다. 예를 들어, 1분에 한 번, 10분에 한 번 등으로 설정할 수 있습니다.
- 성능: RDB는 데이터를 스냅샷으로 한 번에 저장하므로, 쓰기 작업이 적고 성능이 중요한 경우에 적합합니다.
- 백업과 복구: RDB 파일은 백업 및 복구 작업에 유용합니다. 전체 데이터베이스를 한 번에 저장하고 복구할 수 있습니다.
- 데이터 손실 가능성: RDB는 저장 주기마다 스냅샷을 찍기 때문에, 주기 사이에 발생한 데이터는 저장되지 않습니다. 즉, Redis가 예기치 않게 종료되면, 마지막 스냅샷 이후의 데이터는 손실될 수 있습니다.
RDB 구성 예시:
2. AOF (Append-Only File)
- AOF는 모든 쓰기 작업을 로그로 기록하는 방식입니다. Redis의 모든 set, incr, del 등의 쓰기 명령을 순차적으로 파일에 기록합니다.
- AOF는 로그 파일이므로, 데이터를 복구하려면 AOF 로그를 재생하여 마지막 상태로 복구할 수 있습니다.
특징:
- 데이터 안전성: AOF는 모든 쓰기 작업을 기록하므로 데이터 손실을 최소화할 수 있습니다. 마지막 쓰기 작업 이후의 데이터도 복구가 가능합니다.
- 파일 크기: 시간이 지남에 따라 AOF 파일 크기가 커질 수 있습니다. 하지만 Redis는 이를 리빌드할 수 있는 기능을 제공하여 AOF 파일을 최적화할 수 있습니다.
- 성능: AOF는 모든 쓰기 명령을 기록하므로, RDB 방식보다 성능이 떨어질 수 있습니다. 하지만, AOF 기록 방식을 조정하여 성능을 조절할 수 있습니다.
- 데이터 손실 최소화: AOF는 fsync 정책에 따라 디스크에 쓰는 빈도를 설정할 수 있습니다. 예를 들어, 매 명령마다 쓰기, 초기화 후 일정 시간마다 쓰기 방식이 있습니다.
AOF fsync 설정:
- appendonly yes: AOF를 활성화.
- appendfsync always: 매 명령 후 바로 디스크에 기록.
- appendfsync everysec: 1초마다 디스크에 기록 (성능과 안전성 균형).
- appendfsync no: Redis가 데이터를 디스크에 쓰는 시점에 맡기는 방식.
3. RDB와 AOF의 혼합 사용
- Redis는 RDB와 AOF를 함께 사용할 수 있습니다. 이 경우, Redis는 기본적으로 AOF를 사용하여 모든 쓰기 작업을 기록하고, 일정 주기로 RDB 스냅샷을 생성합니다.
- 이렇게 하면 데이터 복구 속도는 AOF가 책임지고, 백업과 빠른 복구는 RDB가 담당합니다.
영속성 설정 예시
Redis 설정 파일 (redis.conf)에서 영속성 설정
- RDB 설정:
save 900 1 save 300 10 save 60 10000
- AOF 설정:
appendonly yes appendfsync everysec
AOF 파일 최적화 (Rewriting)
AOF 파일은 시간이 지남에 따라 커지므로, AOF 리라이트(AOF Rewrite)를 통해 AOF 파일을 최적화할 수 있습니다. Redis는 일정한 조건 하에 AOF 리라이트를 자동으로 수행하여, AOF 파일을 다시 작성하고, 불필요한 명령을 제거하여 파일 크기를 줄입니다.
영속성 옵션 선택
- RDB:
- 백업이 주 목적이고, 성능이 중요한 경우에 적합합니다. 주기적으로 스냅샷을 찍으므로 성능이 우선인 환경에서 유리합니다.
- 데이터 손실을 최소화하려면 주기를 짧게 설정해야 합니다.
- AOF:
- 데이터 손실을 최소화하고, 데이터 복구를 더욱 중요시하는 환경에서 유용합니다.
- AOF는 모든 쓰기 작업을 기록하므로 시스템 부하를 고려하여 적절한 fsync 정책을 선택하는 것이 중요합니다.
- RDB와 AOF의 혼합:
- RDB와 AOF를 혼합하면, AOF로 데이터를 안정적으로 저장하고, RDB로 백업을 관리할 수 있습니다. 이 방법은 성능과 안정성을 모두 고려하는 경우에 유용합니다.
결론:
Redis의 영속성 기능은 RDB와 AOF 방식으로 제공되며, 각 방식은 속도, 데이터 안정성, 복구 속도 등에서 차이를 보입니다. Redis에서는 영속성 방식들을 적절하게 조합하여, 데이터 안전성과 성능을 균형 있게 관리할 수 있습니다.
복구와 백업의 주 목적에 맞게 올바르게 사용하면 아주 유용할 것 같습니다.
물경력 육지로 갈때 까지 물경력 화이팅~!
'인프라 > REDIS' 카테고리의 다른 글
Redis Session store (0) | 2024.11.23 |
---|---|
Redis Cli 명령어 (0) | 2024.11.21 |
Redis는 Single thread 라는데? (2) | 2024.11.20 |
Redis가 뭐지? (2) | 2024.11.20 |
redis 명령어 (1) | 2023.11.19 |