Redis는 아무 설정을 하지 않으면 RDB 방식을 따라 데이터가 디스크로 백업된다.
레디스의 데이터 백업 방식에 대한 내용은 아래 포스팅을 참고해주세요.
https://onfonf.tistory.com/108
그러면 AOF(Append Only File) 방식으로 데이터를 백업하려면 어떻게 해야할까?
이 글은 Dockerfile을 만들어서 AOF 방식으로 데이터를 백업하는 redis 컨테이너를 띄우는 과정을 담은 포스팅이다.
Dockerfile, docker-compose.yml 파일 작성
우선 chatgpt를 이용해서 Dockerfile과 이를 편하게 실행하기 위해 docker-compose.yml 파일을 작성해봤다.
Dockerfile
# Base image
FROM redis:latest
# Copy custom Redis configuration
COPY redis.conf /usr/local/etc/redis/redis.conf
# Command to run Redis with the custom configuration
CMD ["redis-server", "/usr/local/etc/redis/redis.conf"]
AOF를 설정해주기 위한 redis.conf는 아래와 같다.
redis.conf
appendonly yes
appendfsync everysec
docker-compose.yml
version: '3.9'
services:
redis:
build:
context: .
dockerfile: Dockerfile
ports:
- "6379:6379"
volumes:
- redis-data:/data # Persistent data storage
restart: always
volumes:
redis-data:
Dockerfile을 빌드해서 컨테이너로 실행하고, redis의 볼륨을 컨테이너 내부의 /data로 잡아주는 yml 파일이다.
container 실행
위와 같이 Dockerfile, docker-compose.yml, redis.conf 세 파일을 같은 경로에 넣어주고 docker-compose up -d 명령어로 컨테이너를 실행해주었다.
컨테이너 내부로 접속
Docker Redis의 공식 이미지는 기본적으로 /data 디렉토리를 데이터 디렉토리로 사용한다고 한다.
컨테이너 내부로 접속하면 경로도 기본적으로 /data 경로로 이동되어 있다.
그 안에는 "appendonlydir"라는 디렉토리가 생성돼있었다.
그리고 그 안에는
- appendonly.aof.1.base.rdb
- appendonly.aof.1.incr.aof
- appendonly.aof.manifest
이렇게 3개의 파일이 생성돼있었는데, 로그는 appendonly.aof.1.incr.aof 파일에 적히는 것 같다..
그런데 원래는 aof 설정을 하면 /data 디렉토리에 appendonly.aof 이렇게 하나의 로그파일이 생길 것이라고 생각했는데 왜 이런 구조로 생겼는지는 모르겠다...
고 생각했는데 공식 문서에 그 정답이 있었다.
Redis 7.0.0 버전부터는 AOF 파일이 한 디렉토리에 안에 여러 파일로 분할되어 저장되는 것 같다.
이 파일들을 다른 곳에 백업해두면 나중에 재해복구가 가능한데, 이때는 AOF 재작성을 비활성화 해야한다는 것도 알게되었다.
디스크에 제대로 저장되는지 확인
테스트를 위해서 "test:1"이라는 키값으로 데이터를 하나 저장한 뒤
컨테이너를 restart 시켜봤다.
컨테이너를 restart 시켜도 값이 제대로 남아 있는 것을 확인할 수 있었다.
이번엔 "test:2"라는 키값을 하나 더 추가하고, rm -f 명령어로 컨테이너를 강제로 지운 뒤 다시 실행시켜봤다.
실행 후에 appendonly.aof.1.incr.aof 파일을 확인하면 set 명령어에 대한 로그도 잘 적혀있고,
값도 유실되지 않은 것을 확인할 수 있었다.
AOF 방식으로 백업하는 Redis Container를 실행해보았는데, 레디스가 갑자기 종료되는 상황을 대비해서 이전 자료를 백업하려면 이 파일을 어디가 백업하는 쉘 스크립트를 짜야되지 않나..? 싶다,,,
Reference
https://redis.io/docs/latest/operate/oss_and_stack/management/persistence/
'프로젝트 기록 > 기타' 카테고리의 다른 글
Linux에서 AWS-CLI 설정하기 (1) | 2024.12.12 |
---|---|
Linux 크론(Cron)과 크론탭(Crontab) (0) | 2024.12.12 |
[Docker] Docker Container 안의 파일을 로컬로 이동하기 (0) | 2024.11.20 |
일급 컬렉션(First Class Collection)에 대해 (1) | 2024.10.09 |