현재 사용되는 대부분의 데이터베이스 마이그레이션 도구는 오프라인 방식으로 동작하며, 절차가 복잡하고 수동 작업에 의존하는 경우가 많습니다.
예를 들어 Amazon ElastiCache에서 Redis Enterprise Cloud로 데이터를 옮기려면, 일반적으로 ElastiCache 데이터를 Amazon S3 버킷에 백업한 뒤 Redis Enterprise Cloud UI를 통해 가져오는 과정을 거칩니다. 이 방식은 불가피한 다운타임을 유발할 수 있고 데이터 손실 위험도 존재합니다. 또 다른 방법으로는 소스 Redis 서버의 특정 시점 스냅샷을 생성해 대상 서버에 적용함으로써 양쪽 서버를 동기화하는 기법이 있지만, 마이그레이션 전략을 구현하려면 수십 개의 스크립트를 지속적으로 관리해야 하는 부담이 따릅니다.
이러한 문제를 해결하기 위해 Redis는 완전히 새로운 접근 방식을 제시했습니다.
RIOT 소개
RIOT은 Redis 솔루션 아키텍트인 Julien Ruaux가 개발한 오픈소스 온라인 마이그레이션 도구입니다. RIOT은 프로듀서/컨슈머(producer/consumer) 방식의 클라이언트 측 복제를 구현합니다. 프로듀서는 ElastiCache에 연결된 키(key) 리더와 값(value) 리더의 조합으로 구성됩니다. 키 리더 컴포넌트는 SCAN과 키스페이스 알림(keyspace notifications)을 활용해 복제 대상 키를 식별하고, 각 키에 대해 값 리더가 DUMP 명령을 수행한 결과(키+바이트)를 컨슈머(라이터)에 전달합니다. 컨슈머는 Redis Enterprise 연결을 통해 RESTORE 명령을 실행합니다.

이 글에서는 ElastiCache에서 Redis Enterprise Cloud로 데이터베이스를 끊김 없이 온라인 마이그레이션하는 방법을 소개합니다.
함께 읽으면 좋은 글: DBaaS 제공자 선택 시 고려해야 할 6가지 핵심 기능, AWS에서 성숙한 엔터프라이즈 고객의 요구를 충족하는 Redis Enterprise Cloud
사전 준비물
마이그레이션 도구를 사용하려면 다음 리소스가 필요합니다.
- Redis Enterprise Cloud 구독
- Amazon ElastiCache (단일 마스터 EC의 경우 프라이머리 엔드포인트, 클러스터형 EC의 경우 구성 엔드포인트 사용 — 자세한 내용은 ElastiCache 문서의 '연결 엔드포인트 찾기' 참조)
- Linux 기반 Amazon EC2 인스턴스
Amazon EC2 인스턴스 설정
새 EC2 인스턴스를 생성하거나 기존 인스턴스를 활용할 수 있습니다. 이 예제에서는 AWS(Amazon Web Services)에 새 인스턴스를 생성하는 과정부터 살펴보겠습니다. 가장 일반적인 시나리오는 동일한 Amazon VPC(Virtual Private Cloud) 내의 EC2 인스턴스에서 ElastiCache 클러스터에 접근하는 것입니다. 여기서는 Ubuntu 16.04 LTS를 사용했지만, 원하시는 Ubuntu 또는 Debian 배포판을 자유롭게 선택하셔도 됩니다.
아래와 같이 SSH를 사용해 로컬 컴퓨터에서 새 EC2 인스턴스에 접속합니다.
ssh -i “public key” <AWS EC2 Instance>
다음 명령을 실행해 새 인스턴스에 redis-cli 도구를 설치합니다.
$ sudo apt update
# sudo apt install -y redis-tools
redis-cli로 ElastiCache 데이터베이스 연결 확인
문법:
$ redis-cli -h <Elasticache Primary Endpoint> -p 6379
실행 예:
$ sudo redis-cli -h <elasticache primary endpoint> -p 6379
위 명령이 정상적으로 실행되어 원격 Redis 데이터베이스에 성공적으로 연결되는지 확인하세요.
RIOT 마이그레이션 도구 사용하기

아래 명령을 실행해 마이그레이션 도구를 설정합니다.
사전 요구 사항:
Java 설치 — OpenJDK 11 이상을 권장합니다.
sudo add-apt-repository ppa:openjdk-r/ppa && sudo apt-get update -q && sudo apt install -y openjdk-11-jdk
RIOT 설치
패키지의 압축을 해제하고 RIOT 바이너리가 올바른 위치에 있는지 확인합니다.
wget https://github.com/Redislabs-Solution-Architects/riot/releases/download/v2.0.8/riot-redis-2.0.8.zip
unzip riot-redis-2.0.8.zip
cd riot-redis-2.0.8/bin/
다음 명령으로 RIOT 버전을 확인할 수 있습니다.
./riot-redis --version
RIOT version "2.0.8"
bin/riot-redis --help
Usage: riot-redis [OPTIONS] [COMMAND]
-q, --quiet 오류만 기록
-d, --debug 디버그 모드로 기록 (일반 스택트레이스 포함)
-i, --info 로그 레벨을 info로 설정
-h, --help 도움말 표시 후 종료
-V, --version 버전 정보 출력 후 종료
Redis connection options
-r, --redis=<uri> Redis 연결 문자열 (기본값: redis://localhost:6379)
-c, --cluster Redis Cluster에 연결
-m, --metrics 메트릭 표시
-p, --pool=<int> 최대 풀 연결 수 (기본값: 8)
Commands:
replicate, r 소스 Redis 데이터베이스를 대상 Redis 데이터베이스로 복제
info, i INFO 명령 출력 표시
latency, l 지연 시간 통계 계산
ping, p PING 명령 실행
Java와 RIOT 설치가 완료되면 아래 명령으로 마이그레이션을 시작할 준비가 된 것입니다. 이 명령은 소스(ElastiCache)에서 대상(Redis Enterprise Cloud)으로 데이터를 직접 복제합니다.
이제 아래 명령을 실행해 ElastiCache에서 Redis Enterprise Cloud로 데이터를 복제해 보겠습니다.
sudo ./riot-redis -r redis://<source Elasticache endpoint>:6379 replicate -r redis://password@<Redis Enterprise Cloud endpoint>:port --live
ElastiCache는 클러스터형(clustered)과 비클러스터형(non-clustered) 두 가지 방식으로 구성할 수 있습니다. 아래 표에서 첫 번째 행은 비클러스터형 시나리오에 사용할 명령을, 두 번째 행은 특정 데이터베이스 네임스페이스가 있는 클러스터형 시나리오의 명령을 보여줍니다.

보시다시피 클러스터형 ElastiCache를 사용하는 경우에는 소스 ElastiCache 엔드포인트를 지정하기 전에 반드시 –cluster 옵션을 함께 전달해야 합니다.
주요 참고 사항
- 프로덕션 환경에 적용하기 전에 반드시 마이그레이션에 대한 사용자 수용 테스트(UAT)를 수행하세요.
- 마이그레이션이 완료되면 애플리케이션 트래픽이 Redis Enterprise 엔드포인트로 정상적으로 전환되었는지 확인하세요.
- 데이터 손실 가능성을 최소화하기 위해 트래픽이 적은 시간대에 마이그레이션을 진행하는 것이 좋습니다.
결론
Amazon ElastiCache에서 Redis Enterprise Cloud로 다운타임 없이 데이터를 이전할 수 있는 간편하고 사용하기 쉬운 실시간(live) 마이그레이션 도구를 찾고 있다면, RIOT이 훌륭한 선택지가 될 것입니다.
참고 자료
- RIOT – Redis input/output tools