Database/Redis

[Redis] RDB 방식의 백업

꽁담 2020. 3. 5. 18:07

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)