본문으로 바로가기

Redis Persistence

category DB, ORM/🟥 Redis 2020. 12. 29. 06:59

redis.io/topics/persistence

 

Redis Persistence – Redis

This page provides a technical description of Redis persistence, it is a suggested read for all Redis users. For a wider overview of Redis persistence and the durability guarantees it provides you may also want to read Redis persistence demystified. *Redis

redis.io

 

redis는 데이터를 디스크에 저장하지 않고 메모리에 저장합니다. redis와 비슷한 memcached의 경우 메모리에만 데이터를 저장하기 때문에 전원이 꺼지면 데이터가 없어지지만, redis는 데이터를 디스크에 저장된 데이터를 다시 읽어 메모리에 올려 데이터를 유지할 수 있습니다.

 

공식문서에 따르면 data persistence를 유지하는 방법은 RDB(snapshot), AOF(Append On File) 2가지입니다.

  • The RDB persistence performs point-in-time snapshots of your dataset at specified intervals.
  • The AOF persistence logs every write operation received by the server, that will be played again at server startup, reconstructing the original dataset.

 

1. snapshotting(RDB) 방식

 

순간적으로 메모리에 있는 내용을 디스크에 옮기는 방식입니다. 

SAVE와 BGSAVE 두 가지 방식이 있습니다.

 

SAVE는 순간적으로 redis의 동작을 정지시키고 그 snapshot를 디스크에 저장합니다.(blocking 방식) 

 

BGSAVE는 별도의 프로세스를 띄운 후, 명령어 수행 당시의 snapshot을 disk에 저장하고 redis는 동작을 멈추지 않습니다.(non-blocking 방식)

 

메모리의 snapshot을 그대로 저장하기 때문에 서버를 재구동시할 때 snapshot을 다시 읽으면 되므로 속도가 빠른 장점이 있습니다.  그러나, snapshot을 추출하는데 시간이 오래걸리고 도중에 서버가 꺼지면 이후의 데이터를 모두 사라진다는 단점이 있습니다. 

 

save 60 1000

snapshot을 찍은 결과물은 /var/lib/redis에 저장됨

 

 

 

2. AOF 방식

 

AOF방식은 redis의 write/update 연산을 log파일에 기록합니다. 서버가 재시작될 때, log에 기록된 write/update 연산을 재 실행하여 데이터를 복구합니다. 

 

log 파일에 대해서만 append하기 때문에 log write 속도가 빠르고 어떤 시점에 서버가 다운되더라도 데이터가 사라지지 않는 장점이 있습니다. 그러나, 모든 write/update 연산을 log파일에 남기기 때문에 log데이터 양이 굉장히 크고, 복구 시 저장된 모든 write/update연산을 다시 실행하기 때문에 재시작 속도가 느린 단점이 있습니다. 

 

/etc/redis/redis.conf => appendonly true로 설정

appendonly yes

 

 AOF파일의 경우 KEY들에 대한 변동 사항을 모두 기록하기 때문에 매우 커질수 있습니다. 레디스는 rewrite 기능을 제공합니다. conf파일 설정을 통해서 자동으로 AOF파일을 rewrite 되도록 설정할 수 있습니다.

https://jungwoong.tistory.com/87

 

자동 rewrite 설정 

설정값 기  능
auto-aof-rewrite-min-size 최소한 설정된 값이상으로 커져야지 자동 rewrite를 수행합니다.
auto-aof-rewrite-percentage 레디스는 가장 마지막에 rewrite를 수행한 AOF파일의 크기를 저장하고 
그 크기를 현재의 AOF파일 크기와 비교해서 auto-aof-rewrite-percentage로 
지정된 percentage 만큼 증가하면 자동으로 rewrite를 수행합니다. 

 예제의 그림파일에서는 자동 AOF파일의 크기가 최소한 64MB 이상일 때만 수행됩니다. 

 rewrite가 수행되었다면 이전의 파일보다 100% 증가 한 경우 rewrite가 수행됩니다.(이때도 최소 크기보다 크다면)

 auto-aof-rewrite-percentage을 0으로 지정하면 자동 다시 쓰기가 비활성화 됩니다. 

 

 

결론

 

이 두 방식들의 서로의 장점을 이용하고 단점을 상쇄하기 위해 두 방식을 혼용해서 사용한다고 합니다. 

주기적으로 snapshot으로 백업하고, 다음 snapshot까지의 저장을 AOF방식으로 수행하는 방식으로 혼용합니다. 

두 방식을 혼용함으로써 서버를 재구동할 때 백업된 snapshot을 불러오고 비교적 적은 양의 AOF로그만 재실행해주면 되기 때문에 시간을 절약하고 데이터를 유지할 수 있습니다.

 

 


darren, dev blog
블로그 이미지 DarrenKwonDev 님의 블로그
VISITOR 오늘 / 전체