Persistence?
Persistenc는 영속성이라고 하며, 데이터를 생성한 프로그램의 실행이 종료되더라도 사라지지 않는 특성을 말한다.
Redis는 데이터를 in-memory에 저장하기 때문에 전원이 꺼지면 모든 데이터가 삭제한다. 이러한 문제를 해결하기 위해 메모리에 저장되어 있는 Redis의 데이터를 디스크로 백업하는 기능을 지원하며 이러한 기능에는 AOF와 RDB 방식이 존재한다.
persistence 관련 설정을 확인하는 명령어는 다음과 같다.
redis:6379> info persistence
AOF, Append Only File
AOF는 입력, 수정, 삭제의 명령을 실행할 때마다 파일에 기록되는 방식을 뜻한다. 기록되는 파일은 텍스트 파일 형식이기 때문에 수정이 가능하다. 파일에 계속 추가되는 방식이지만 특정 시점에는 데이터 전체를 다시 쓰는 기능(Rewrite)이 존재한다.
파일에 데이터를 계속 쓴다는 것은 파일의 사이즈가 커진다는 뜻이므로 이를 적절하게 관리를 해줘야 하기 때문이다. 안 그러면 파일 사이즈가 커져서 OS 자체에 부담이 되거나 레디스 서버가 이 파일을 읽어 들일 때 문제가 발생할 수 있다.
그렇다면 파일에 데이터를 다시 쓰게 되면 파일의 사이즈가 작아지게 되는 것인가를 생각해봐야 하는데, Rewrite를 하게 되면 AOF 파일에 이전 기록은 사라지고 마지막 데이터가 기록되기 때문에 작아진다.
장점
실시간 데이터를 저장 가능
- 입력, 수정, 삭제의 명령을 실행할 때마다 LOG 파일에 기록하게 되므로 실시간으로 데이터를 백업할 수 있다.
빠른 데이터 저장 속도
- AOF 방식은 입력, 수정, 삭제의 명령을 실행 기록을 그대로 로그파일 하단에 저장하기 때문에 저장 속도도 빠르고 데이터 손실이 거의 없다.
데이터 복원과 수정
- 로그 파일 하단에 저장하기 기록된 명령을 수정하고 복원할 수 있다.
- Redis 운영 시 실수로 모든 데이터를 삭제한 경우 AOF 파일에 기록된 명령을 수정하고 복원할 수 있다.
단점
로그 파일 크기의 증가함
- 명령 실행 기록을 그대로 로그파일에 기록하게 되므로 로그파일 크기가 굉장히 커질 수 있다.
데이터 복구 속도가 느림
- 명령 실행 기록을 기록하게 되므로 로그파일 크기가 커서 데이터 복원 요소 시간이 늘어나게 된다.
Docker Config
필자는 Docker를 통해 Redis를 사용하고 있기 때문에 local에 myredis.conf를 만들고 이를 docker 컨테이너로 마운트 하는 방식으로 AOF를 사용했다.
sudo docker run -v $(PWD)/redis_conf:/usr/local/etc/redis --name myredis -d -p 6479:6479 redis redis-server /usr/local/etc/redis/redis.conf
AOF, redis.conf
redis.conf 파일에 다음과 같은 설정 옵션들이 존재한다.
# myredis.conf
appendonly yes
appendfilename "my_appendonly.aof"
appendfsync always or everysec or no
- appendonly
- aof 기능을 활성화하는 옵션이다. argument로 yes 혹은 no를 지정할 수 있다.
- appendfilenmae
- 저장할 파일명을 지정할 수 있는 옵션이다. 파일 저장 위치는 환경에 따라 다르니 직접 확인하자
- appendfsync
- AOF가 기록하는 시점을 정의하는 옵션이다.
- always : 명령 실행 시마다 AOF에 기록한다.
- everysec(default 값): 1초마다 AOF에 기록한다.
- no: 기록 시점을 OS가 정한다 (일반적으로 30초)
- AOF가 기록하는 시점을 정의하는 옵션이다.
- auto-aof-rewrite-pecentage : AOF 파일 사이즈가 몇 프로 이상 커지면 rewrite 할 것인지 설정한다.
- 몇 프로는 레디스 서버의 시작 시점에 AOF 파일 사이즈를 기준으로 계산한다.
- auto-aof-rewrite-min-size
- AOF 파일 사이즈가 128mb 이하면 rewrite를 하지 않는다.
- 128mb에 해당하는 수정이 가능하다.
AOF, 설정 관련 명령어
redis:6379> config get aof*
1) "aof-use-rdb-preamble"
2) "yes"
3) "aof-disable-auto-gc"
4) "no"
5) "aof-load-truncated"
6) "yes"
7) "aof_rewrite_cpulist"
8) ""
9) "aof-rewrite-incremental-fsync"
10) "yes"
11) "aof-timestamp-enabled"
12) "no"
redis:6379> config get auto*
1) "auto-aof-rewrite-min-size"
2) "67108864"
3) "auto-aof-rewrite-percentage"
4) "100"
'Server > Redis' 카테고리의 다른 글
[Redis] Redis Lock과 Redis Connection Pool (0) | 2024.02.07 |
---|---|
Redis, Collections - Sorted Set (0) | 2022.12.03 |
Redis, Collections - Hashes (0) | 2022.11.27 |
Redis, Collection - Sets (0) | 2022.11.27 |
Redis, Collection - Lists (0) | 2022.11.27 |