Data Backup(데이터 백업)
레디스는 모든 데이터를 기본적으로 메모리에서 관리하므로, 서버의 장애로 인해 레디스 인스턴스가 재시작될 경우 데이터가 손실될 가능성이 있다. 복제 구조를 사용하면 문제를 회피할 수 있다고 느낄 수 있지만, 복제와 백업은 애초에 서로 다른 목적을 가지고 있어 백업도 별도로 수행해야 한다.(복제는 데이터의 가용성을 보장하기 위한 목적)
데이터 백업을 사용하기 위해선 인스턴스의 maxmemory
값은 실제 서버 메모리보다 여유를 갖고 설정하는 것이 좋다.
데이터 백업 방식에는 크게 AOF와 RDB가 있으며, 장단점이 각각 존재하기 때문에 데이터의 안정성을 위해선 한 가지 방법이 아닌 두 가지 백업 방식을 동시에 사용하는 것을 권장한다.
RDB(Redis DataBase)
RDB는 일정 시점에 메모리에 저장된 데이터 전체를 스냅샷으로 저장하는 방식으로, 바이너리 형태의 파일로 저장된다. 일정 시간 단위로 스냅샷을 저장하기 때문에, 마지막 스냅샷 지점과 재시작 시점 사이의 데이터 손실이 발생할 수 있다.
파일 생성 방법
특정 조건에 자동으로 생성:
save
명령어의 옵션을 사용해 일정한 기간 + 변경된 키의 개수를 기준이 만족되면 RDB 파일을 생성수동으로 생성:
bgsave
명령어를 사용해 RDB 파일을 생성(복제 사용하는 경우) 자동으로 생성: 복제본에서
replicaof
커맨드를 이용해 복제를 요청하면 복제본에서 자동으로 RDB 파일을 생성
AOF(Append Only File)
AOF는 명령어를 로그 형태로 저장하는 방식으로, 인스턴스에서 수행된 모든 쓰기 작업을 기록한다.(설정 파일에서 appendonly yes
로 설정 가능)
저장되는 명령어는 레디스 프로토콜 형식으로 저장되며, BRPOP
같이 블로킹 기능 명령어는 RPOP
으로 변환되어 저장된다.
AOF 파일 재구성 방법
AOF 파일은 기본적으로 명령어를 순차적으로 저장하기 때문에, 시간이 지날수록 파일의 크기가 커지게 된다. 때문에 주기적으로 압축시키는 재구성 작업이 필요하며, 해당 주기는 RDB에서와 마찬가지로 특정 조건에 자동으로 생성하거나 수동으로 생성할 수 있다.
재구성은 AOF 파일을 사용하는 것이 아니라, 레디스 메모리에 있는 데이터를 읽어와서 새로운 파일로 저장하는 형태로 동작한다.
데이터 복원
레디스에서 데이터를 복원할 수 있는 시점은 서버가 재시작될 때 뿐이며, 레디스 인스턴스의 실행 도중엔 데이터 파일을 읽어올 방법이 없다. 레디스 서버는 재시작될 때 AOF 파일이나 RDB 파일의 존재를 확인한 뒤, 파일을 로드하여 데이터를 복원한다.(AOF 파일이 더 내구성이 보장된다고 판단하기 때문에 AOF 우선 순위가 높음)
참고자료
Last updated
Was this helpful?