인프라/REDIS

Redis의 영속성에 대해 더 알아보자

물에서육지로 2024. 11. 20. 16:04

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 구성 예시:

save 900 1 # 900초(15분)마다 1번 이상의 변경이 있으면 저장
save 300 10 # 300초(5분)마다 10번 이상의 변경이 있으면 저장
save 60 10000 # 60초마다 10000번 이상의 변경이 있으면 저장

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는 RDBAOF를 함께 사용할 수 있습니다. 이 경우, 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의 영속성 기능은 RDBAOF 방식으로 제공되며, 각 방식은 속도, 데이터 안정성, 복구 속도 등에서 차이를 보입니다. 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