Redis RDB 백업 개념
Redis 는 백업을 위해 RDB 방식과 AOF 방식을 지원합니다.
이 중 RDB 방식에 대해 다뤄보겠습니다.
RDB 방식
RDB는 특정 시점의 메모리에 있는 데이터 전체를 바이너리 파일로 저장하는 방식입니다.
바이너리 파일로 저장되기 때문에 사람이 읽을 수 없습니다.
AOF 파일보다 사이즈가 작아 레디스 시작시 AOF 파일보다 빨리 로드할 수 있습니다.
RDB 파일
기본값으로 dump.rdb 파일에 기록됩니다.
RDB 저장시점
redis.conf 파일에서 save 파라미터로 저장 시점을 정할 수 있습니다.
RDB 를 저장하지 않기 위해서는 save 명령어를 주석처리 하면 됩니다.
RDB 저장 방법
SAVE 혹은 BGSAVE 명령어로 RDB 를 저장합니다.
SAVE 명령 시 레디스에서는 클라이언트 요청을 받지 못합니다.
BGSAVE 명령 시 자식 프로세스에서 백그라운드로 수행하기 때문에 클라이언트 요청을 처리할 수 있습니다.
RDB 관련 redis.conf 파라미터
redis.conf 파일에서 RDB 관련 파라미터를 설정할 수 있습니다.
save [ time ], [ count ]
RDB 저장 시점을 지정할 수 있습니다.
time 동안 count 만큼의 key 변경이 발생하면 rdb 파일로 저장됩니다.
save 조건은 여러 개를 지정할 수 있으며, 지정한 조건 중 하나라도 만족하면 저장됩니다.
dbfilename [ filename ]
RDB 파일명을 지정합니다.
파일경로는 지정할 수 없으며 working directory 파라미터 값으로 결정됩니다.
stop-writes-on-bgsave-error [ yes | no ]
yes 일 때, RDB 파일을 작성하다 실패하면 이후 모든 쓰기 요청을 막습니다.
no 일 때 RDB 파일을 작성하다 실패해도 레디스는 모든 동작을 정상적으로 처리합니다.
이 파라미터는 SAVE 명령시에만 적용되며, BGSAVE 에서는 적용되지 않습니다.
rdbcompression [ yes | no ]
RDB 파일을 작성할 때 압축 여부를 결정합니다. 압축 알고리즘은 LZF 입니다.
rdbchecksum [ yes | no ]
RDB 파일 끝에 Checksum 값 기록 여부를 설정합니다.
rdb-save-incremental-fsync [ yes | no ]
RDB 파일을 쓸 때 fsync 를 32mb 씩 나누어서 진행합니다.
이 부분은 AOF 방식을 병행하여 사용할 때 디스크를 나누어 사용함으로 써, 1초마다 발생하는 AOF File 디스크 쓰기가
문제가 없도록 하기 위해서 입니다.
RDB SAVE 저장 동작 순서
1. 메인프로세스에서 메모리에 있는 데이터를 새 RDB temp 파일에 작성합니다.
2. 작성이 완료되면 기존 파일을 지우고 새 파일로 교체합니다.
RDB BGSAVE 저장 동작 순서
1. 자식프로세스를 포크합니다.
2. 자식 프로세스는 데이터를 새 RDB temp 파일에 작성합니다.
3. 작성이 완료되면 기존 파일을 지우고 이름을 변경합니다.
RDB SAVE 혹은 BGSAVE 시 로그
SAVE 혹은 BGSAVE 를 하면 로그파일에 아래와 같은 내용이 기록됩니다.
예) BGSAVE 명령어
1 2 | 127.0.0.1:6379> BGSAVE Background saving started | cs |
SAVE 시 로그
1 | 4085:M 05 Mar 2020 18:05:49.904 * DB saved on disk | cs |
Line 1 : RDB 파일이 디스크에 저장되었습니다.
BGSAVE 시 로그
1 2 3 4 | 4085:M 05 Mar 2020 17:57:38.615 * Background saving started by pid 4091 4091:C 05 Mar 2020 17:57:38.626 * DB saved on disk 4091:C 05 Mar 2020 17:57:38.626 * RDB: 0 MB of memory used by copy-on-write 4085:M 05 Mar 2020 17:57:38.714 * Background saving terminated with success | cs |
Line 1 : RDB 를 작성할 4091 자식프로세스가 생성되었습니다.
Line 2 : RDB temp 파일을 작성 완료하였습니다.
Line 3 : Copy On write 에서 사용된 메모리가 RDB 파일에 반영되었습니다.
Line 4 : RDB 작성이 성공적으로 완료되었습니다.
RDB 관련 Redis persistence 파라미터
info persistence 명령어로 rdb 관련값을 확인할 수 있습니다.
1 2 3 4 5 6 7 8 | 127.0.0.1:6379> info persistence rdb_changes_since_last_save:0 rdb_bgsave_in_progress:0 rdb_last_save_time:1583398658 rdb_last_bgsave_status:ok rdb_last_bgsave_time_sec:0 rdb_current_bgsave_time_sec:-1 rdb_last_cow_size:237568 | cs |
rdb_changes_since_last_save
마지막 저장 후 변경된 키 수
rdb_bgsave_in_progress
현재 RDB 가 진행중임을 나타냅니다.
rdb_last_save_time
지난번 RDB 파일 저장 시간을 나타냅니다.
rdb_last_bgsave_status
RDB 파일 저장 성공 여부를 나타냅니다.
rdb_last_bgsave_time_sec
RDB 파일 저장에 걸린 시간을 나타냅니다.
rdb_current_bgsave_time_sec
RDB 파일 저장 후 현재까지 경과된 시간을 나타냅니다.
rdb_last_cow_size
RDB 작업 시 복사 할당 크기를 나타냅니다. (byte)
'Database > Redis' 카테고리의 다른 글
[Redis] Replication 전체 동기화, 부분 동기화 방식 (0) | 2020.03.11 |
---|---|
[Redis] 복제 Replication 이중화 방법, 위험성, 이중화정보 확인 방법 (0) | 2020.03.08 |
[Redis] AOF 파일의 저장 방식 (0) | 2020.03.05 |
[Redis] AOF 방식의 백업 (0) | 2020.03.04 |
[Redis] redis.conf 의 파라미터 의미 파악하기 (0) | 2020.03.02 |