Ossian Story

[DB] Redis Persistance - 데이터 저장


Redis Persistance


Redis Persistance 저장 방법에는 두가지의 환경을 제공합니다.


•RDB Mode
   특정 시점 또는 반복적으로 메모리에 있는 전체 데이터를 디스크에 저장합니다.


•AOF Mode
   명령이 실행 될 때 마다 기록이 저장됩니다.

   


Redis Persistance - 장점 / 단점


•RDB Mode
   -  장점

      + 파일크기가 작아 AOF 보다 로딩시간이 빠릅니다.
   
   - 단점

     + 특정 시점에 데이터를 저장함에 따라 이슈 발생 시 데이터가 유실 될 수 있습니다.
        * 매 시간 단위로 백업 설정 시 예를 들어 13:00에 백업 후 13:30에 서버장애 발생 시 13:00 ~ 13:30에 생성된 데이터는 복구할 수 없습니다.
     + 바이너리 파일로 백업을 제공합니다. 따라서 손상이 발생된다면 식별이 어렵습니다.

•AOF Mode

   - 장점

     + 서버 장애가 발생해도 데이터 유실이 거의 없습니다.

     + 텍스트 파일로 백업을 제공합니다. 따라서 손상이 발생하더라도 쉽게 Edit 하여 복구 가능합니다.


   - 단점

     + 모든 명령이 기록되기 때문에 파일 크기가 커지며, 데이터 로딩이 느려질 수 있으며, OS의 파일크기 제한으로 장애가 발생할 수 있습니다.
        * Re-write를 통해 파일 크기를 줄일 수 있으며, Re-write를 할 경우 파일의 최종 데이터만 남게됩니다.



Redis Persistance - RDB Mode 사용방법


수동 저장 - (save / bgsave)

 - "save"는 실행중인 Redis를 블럭시킨 후 메모리에 있는 데이터를 RDB로 저장합니다. 데이터가 클 경우 장애가 발생 될 수 있습니다.
 - "bgsave"는 자식 프로세스를 생성하여 백그라운드에서 메모리에 있는 데이터를 RDB로 저장합니다. "save" 보다는 "bgsave" 명령어를 통해 저장을 권고합니다.

$> redis-cli
127.0.0.1:6379> save
OK
 
127.0.0.1:6379> bgsave
Background saving started



자동 저장 - (Config 설정)

Redis의 Config 파일을 편집기로 수정합니다.

$> sudo vi /etc/redis/6379.conf



################################ SNAPSHOTTING  ################################
#
# Save the DB on disk:
#
#   save <seconds> <changes>
#
#   Will save the DB if both the given number of seconds and the given
#   number of write operations against the DB occurred.
#
#   In the example below the behaviour will be to save:
#   after 900 sec (15 min) if at least 1 key changed
#   after 300 sec (5 min) if at least 10 keys changed
#   after 60 sec if at least 10000 keys changed
#
#   Note: you can disable saving completely by commenting out all "save" lines.
#
#   It is also possible to remove all the previously configured save
#   points by adding a save directive with a single empty string argument
#   like in the following example:
#
#   save ""
save 900 1        # 900초 동안 1번 이상 쓰기 작업이 실행되면 RDB 파일에 저장합니다.
save 300 10       # 300초 동안 10번 이상 쓰기 작업이 실행되면 RDB 파일에 저장합니다.
save 60 10000     # 60초 동안 10000번 이상 쓰기 작업이 실행되면 RDB 파일에 저장합니다.



# The filename where to dump the DB
dbfilename dump.rdb   # RDB 파일의 이름을 지정합니다.



# The working directory.
#
# The DB will be written inside this directory, with the filename specified
# above using the 'dbfilename' configuration directive.
#
# The Append Only File will also be created inside this directory.
#
# Note that you must specify a directory here, not a file name.
dir /var/lib/redis/6379    # RDB와 AOF의 디렉토리를 정의합니다.



RDB 기타 설정

Stop-writes-on-gbsave-error
백그라운드에서 RDB로 데이터를 저장할 때 오류 발생에 대한 처리를 설정합니다.

"yes" 일 때 RDB에 데이터를 저장하다 실패한다면 모든 쓰기 요청을 거부합니다.

"no" 일 때 쓰기 요청은 처리하지만 RDB에 데이터가 저장되지 않습니다.

stop-writes-on-bgsave-error yes



Rdbcompression

RDB 파일에 대한 압축 여부를 설정합니다.

"yes" 일 때 LZF 압축을 사용합니다.

"no" 일 때 압축을 사용하지 않습니다.

rdbcompression yes



Rdbchecksum

"yes" 일 때 RDB 파일에 Checksum을 저장하고 Redis가 다시 시작할 때 Checksum을 실행합니다.

RDB에 있는 Checksum 값이 같지 않을 경우 Redis를 시작하지 않습니다.

rdbchecksum yes




Redis Persistance - AOF Mode 사용방법


AOF Mode Config 설정

Redis의 Config 파일을 편집기로 수정합니다.

$> sudo vi /etc/redis/6379.conf



Appendonly

"yes" 일 때 AOF 파일을 생성하여 저장합니다.

# Please check http://redis.io/topics/persistence for more information.
 
appendonly yes   # "yes" 설정 시 AOF 파일을 저장합니다.
 
# The name of the append only file (default: "appendonly.aof")
 
appendfilename "appendonly.aof" # AOF 파일에 대한 이름을 설정합니다.



Appendfsync

# appendfsync always   # 쓰기가 발생할 때마다 AOF에 데이터를 저장합니다.
appendfsync everysec   # 매 초마다 AOF에 데이터를 저장합니다.
# appendfsync no       # fsync()를 실행하지 않습니다.



Auto AOF Re-Write
AOF Re-Write의 크기 설정은 0 ~ 100%까지 설정가능합니다.

AOF 파일 크기가 100% 이상 커지면 자동으로 Re-Write합니다. AOF의 100% 파일 크기 기준은 Redis가 시작했을 때 AOF 파일크기를 기준으로 합니다.

AOF Re-Write Min 크기 설정은 잦은 Re-Write를 방지하기 위해 설정합니다.

auto-aof-rewrite-percentage 100  # AOF 파일 크기가 100% 이상 커지면 Re-Write 합니다.
auto-aof-rewrite-min-size 64mb   # AOF 파일 크기가 64mb 이하면 Re-Write 하지 않습니다.




Redis Persistance - RDB / AOF 우선순위


Redis는 RDB와 AOF 둘다 존재할 경우 Redis.conf 설정에 따라 읽어들이는 우선순위가 다릅니다.

Redis가 데이터를 읽어오는 방법은 Redis가 시작할때 읽어옵니다.


•"Appendonly"의 설정이 Yes일 경우 AOF 파일을 읽어옵니다.

•"Appendonly"의 설정이 No일 경우 RDB 파일을 읽어옵니다.



Redis Persistance - 권고사항


안전한 데이터 보존을 위해선 RDB와 AOF 양쪽 모두 사용하는 것을 권고합니다.

또한 데이터를 보관할 스토리지가 있다면 스케쥴을 통해 주기적으로 데이터보관 스토리지에 데이터를 저장하는 것을 권고합니다.




참고 사이트

 + Redis RDB와 AOF에 대해 자세히 알게 해주셔서 너무나 감사합니다.



'[DB] > Redis' 카테고리의 다른 글

[DB] Redis + HAProxy를 활용한 FailOver 구성  (0) 2017.11.09
[DB] Redis Sentinel 구성  (5) 2017.11.08
[DB] Redis Replication 구성  (0) 2017.11.07
[DB] Redis 설치  (0) 2017.11.06
profile

Ossian Story

@ossians