728x90
데이터 관리
- Redis는 데이터가 메모리에 있기 때문에 OS 리부팅이 일어나면 데이터가 모두 유실됨
- 데이터를 영구적으로 저장하고 싶으면 디스크에 데이터를 write 해야 함
- 디스크에 write 하는 방식은 AOF(Append Only File), RDB(Snapshot) 두 가지 존재
- AOF 설정 시 Redis는 AOF 파일을 먼저 읽음
RDB vs AOF 비교
항 목 | RDB | AOF |
특 징 | 1. 특정 시점의 메모리에 있는 데이터 전체를 바이너리 파일로 저장 2. AOF 파일 보다 사이즈가 작으며, 로딩 속도가 AOF보다 빠르다 3. 환경설정 save를 통해 저장 주기를 정할 수 있다 4. 자식 프로세스를 생성하여 디스크 쓰기를 수행할수 있다. 따라서 부모 프로세스에 명령을 처리하는데 영향을 주지 않지만 디스크 I/O가 발생하며 CPU IOwait이 높게 나타난다 |
1. 명령이 실행될 때마다 기록 된다.(조회 명령은 제외) 2. 명령이 실행될 때마다 기록이 되어 데이터 손실이 적다. 3. AOF는 계속 추가하면서 기록되기 때문에 파일 사이즈가 계속 커진다. 4. AOF 파일은 text 파일이므로 수정이 가능하다. |
성능 영향도 | 1. RDB는 fork()를 자주 수행 2. 데이터 크기가 크면 fork() 수행 시 많이 걸릴 수 있으며, CPU 사용률이 높은 경우 서비스 장애 발생할 수있다. |
1. OS 파일 사이즈 제한으로 인해 기록이 중단 될 수 있다. 2. Redis Booting 시간 지연이 발생할 수 있다. |
업무 고려사항 | 1. 데이터 영속성이 중요한 경우는 AOF 설정 2. Client로 부터 받는 명령을 정상 처리하는 것이 중요하면 RDB 설정 3. 일반적으로는 AOF를 기본으로 하고, RDB를 Option으로 사용하는 것을 권고 |
RDB 설정
1. RDB 관련 옵션
옵 션 | 설 명 |
save | 저장 주기를 설정하는 옵션 |
stop-writes-on-bgsave-error | RDB 파일 저장 실패 했을 경우 데이터를 받아 들일지 말지 정하는 옵션 |
rdbcompression | RDB 파일을 저장할 때 LZF 방식으로 압축할지 정하는 옵션 |
rdbchecksum | RDB 파일이 정확히 저장되었는지 확인하는 방법으로 checksum을 파일 끝에 추가하는 옵션 |
dbfilename | RDB 파일명을 지정, 디렉토리는 dir 옵션에 지정하는 곳에 저장됨 |
rdb-save-incremental-fsync | RDB 파일을 쓸 때 disk에 쓰는 fsync를 32mb씩 나누어서 저장 |
2. RDB 성능 관련 옵션
SAVE
- 저장 주기는 시간과 변경된 데이터 개수로 설정
- 설정 예시
$cd {REDIS_HOME}/conf/[port].conf 파일에서 설정
save 60 10000 //60초 안에 만개 이상 데이터가 변경되면 저장 된다.
save 300 10 //300초 안에 10개 이상 데이터가 변경되면 저장 된다.
- 고려사항
데이터 변경이 많이 발생하는 경우 파일 저장 시간을 고려하여 설정
예를 들어, 데이터 크기가 20G이고 저장하는데 2분이 걸리고, 60초에 1만 개 이상 데이터가 변경된다면 Redis 서버는 60초마다 RDB 파일을 저장함. 이전에 시작한 저장이 끝나지 않은 상태에서 다음 저장 이벤트가 발생하여 성능 저하가 될 수 있다.
stop-writes-on-bgsave-error
- 기본 값은 yes이며, 데이터를 받아들이지 않는 설정
- 설정 예시
$cd {REDIS_HOME}/conf/[port].conf 파일에서 설정
stop-writes-on-bgsave-error yes
- 고려사항
모니터링이 잘되어 있고, 서비스가 중요한 경우 no 권고
yes로 설정하는 경우 장애 발생 시점을 파악할 수 있으나 서비스 중단이 발생
rdbcompression
- RDB 파일을 저장할 때 LZF 방식으로 압축할지 정리하는 옵션
- 설정 예시
$cd {REDIS_HOME}/conf/[port].conf 파일에서 설정
rdbcompression yes
- 고려사항
설정 시 디스크 저장 공간 활용 측면에서 유리 하나, 압축 시 CPU를 사용하기 때문에 CPU 사용률이 높은 경우 no를 권고
rdbchecksum
- RDB파일이 정확히 저장되었는지 확인하는 방법으로 checksum을 파일 끝에 추가하는 옵션
- 설정 예시
$cd {REDIS_HOME}/conf/[port].conf 파일에서 설정
rdbchecksum yes
- 고려 사항
설정 시, 파일 정확을 높일 수 있다. 하지만 파일 저장할 때, 로딩할 때 서버 성능 저하가 될 수 있음
rdb-save-incremental-fsync
- RDB 파일을 쓸 때 disk에 쓰는 fsync를 32mb씩 나누어서 함
- Appendfsync가 everysec일 때, 디스크를 나누어서 사용함으로써, 1초마다 발생하는 AOF File 디스크 쓰기에 문제가 없도록 하기 위해 설정
- 설정 예시
$cd {REDIS_HOME}/conf/[port].conf 파일에서 설정
Rdb-save-incremental-fsync yes
AOF 설정
1. AOF 관련 옵션
옵 션 | 설 명 |
appendonly | AOF를 사용하지 여부를 정하는 옵션 |
appendfilename | AOF 파일명을 정하는 옵션 |
appendfsync | AOF 파일에 데이터가 쓰여지는 시점을 정하는 옵션 |
no-appendfsync-on-rewrite | 파일에 대량에 데이터를 쓰는 동안 fsync() 수행 여부를 정하는 옵션 |
auto-aof-rewrite-percentage | AOF파일 크기가 지정한 값 만큼 증가했으면 다시 쓰기를 수행 하는 옵션 |
auto-aof-rewrite-min-size | AOF파일 크기가 설정한 값이상이 되어야 다시 쓰기를 수행하는 옵션 |
aof-load-truncated | AOF파일이 손상된 경우 redis가 로그를 남기고 정상적으로 시작할지, 오류를 남기고 중단할 지 결정하는 옵션 |
aof-rewrite-incremental-fsync | AOF파일을 rewrite할 때 disk에 쓰는 fsync를 32mb씩 나누어서 하는 옵션 |
aof-use-rdb-preamble | AOF파일을 rewrit하면 AOF 파일을 RDB format으로 사용하는 옵션 |
2. AOF 성능 관련 옵션 정리
appendfsync
- 옵 션
옵 션 | 설 명 |
always | redis 명령이 실행될 때 마다 디스크에 쓴다. |
everysec | 데이터를 모아서 1초 마다 디스크에 쓴다. |
no | 디스크 쓰는 시점을 OS에 맡긴다. (리눅스 시스템은 default 30초) |
- 설정 예시
$cd {REDIS_HOME}/conf/[port].conf 파일에서 설정
Appendfsync everysec
- 고려 사항
always는 데이터를 유실할 위험이 적으나, 성능이 떨어지고, everysec는 1초 마다 디스크에 쓰기 때문에 최대 2초이내의 데이터를 유실할 수 있으나 성능과 보존 양 측면에서 적절한 값이다
no-appendfsync-on-rewrite
- default 값은 no이며, no 설정 시 대량 쓰기 동안 fsync()를 수행
- 설정 예시
$cd {REDIS_HOME}/conf/[port].conf 파일에서 설정
no-appendfsync-on-rewrite no
- 고려 사항
no설정 시 서비스 응답시간이 늦어서 문제가 발생하는 경우 yes 옵션 설정 고려
auto-aof-rewrtie-percentage, auto-aof-rewrite-min-size
- AOF파일 rewrite하는 시점 결정
- 설정 예시
$cd {REDIS_HOME}/conf/[port].conf 파일에서 설정
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
- 고려 사항
해당 옵션 없을 시, AOF 파일은 1개 파일에 계속 쌓이게 되고 리눅스 파일 크기 제한에 걸려 기록이 안되거나, Redis 시작 시 AOF파일을 읽어드리는데 오래 걸려 위 옵션 설정 고려 필요
aof-rewrite-incremental-fsync
- default 값은 yes 이며, fsync를 32mb씩 나누어서 사용
- 설정 예시
$cd {REDIS_HOME}/conf/[port].conf 파일에서 설정
aof-rewrite-incremental-fsync yes
- 고려 사항
yes설정 시 대량 디스크 쓰기로 발생할 수 있는 문제를 피할 수 있음
aof-use-rdb-preamble
- AOF 파일 rewrite 하면 RDB Format으로 기록
- 설정 예시
$cd {REDIS_HOME}/conf/[port].conf 파일에서 설정
aof-use-rdb-preamble yes
- 고려 사항
AOF 파일 사이즈를 줄이고, AOF 파일에 쓰기/읽기 시간을 줄여 사용하기 원하는 경우 yes로 설정. Binary로 기록되기 때문에 편집은 불가
RDB, AOF 정보 확인 방법
- 명령어 'redis-cli -h [ip주소] -p [port]' 접속 하여, 명령어 'info persistence'로 확인
- 주요 항목
항 목 | 설 명 |
rdb_last_bgsave_status | 마지막 저장이 성공인지 실패인지 확인 |
rdb_last_bgsave_time_sec | 마지막 저장 소요 시간을 확인 |
rdb_bgsave_in_progress | RDB 파일 백그라운드 저장 진행중이며 1로 표시 |
aof_enabled | AOF 사용 여부 확인 |
aof_last_write_status | AOF 파일 마지막 저장이 성공인지 실패인지 확인 |
aof_rewrite_in_progress | AOF 파일 rewrite가 진행중인지 확인 |
728x90
'DataBase > Redis' 카테고리의 다른 글
Redis Spring 연동 및 사용 (0) | 2023.07.20 |
---|---|
Redis 설정(Security, Client, Memory) (0) | 2023.07.20 |
Redis 설정(GENERAL) (0) | 2023.07.12 |
Redis 설정(NetWork) (0) | 2023.07.12 |
Benchmark (0) | 2023.07.10 |