이 문서에서는 Redis Enterprise Cloud로 마이그레이션하기 위한 RIOT 라이브 마이그레이션을 배포하는 방법을 설명합니다. 데이터베이스 설계자, DevOps 및 SRE팀, 네트워크 관리자는 이 아키텍처를 사용하여 다운타임이 거의 없는 마이그레이션을 팀에 제공할 수 있습니다. 이 문서에서는 사용자가 Google Cloud CLI 및 Compute Engine을 사용하는 데 익숙하다고 가정합니다.
아키텍처
다음 다이어그램은 RIOT 라이브 마이그레이션 서비스를 사용하여 Redis 호환 소스를 Redis Enterprise Cloud로 마이그레이션하는 참조 아키텍처를 보여줍니다.
아키텍처에 관한 자세한 내용은 Redis Enterprise Cloud로 마이그레이션하기 위한 RIOT 라이브 마이그레이션을 참고하세요.
이 문서의 샘플 배포는 소스가 Compute Engine VM의 Redis OSS인 다음 아키텍처를 사용합니다.
다이어그램에서는 편의상 Redis OSS 인스턴스와 RIOT가 단일 Compute Engine VM으로 통합되었습니다. 프로덕션 환경에서는 더 나은 성능을 보장하기 위해 RIOT를 항상 자체 VM에서 실행하는 것이 좋습니다.
샘플 배포 아키텍처에는 다음 구성요소가 포함됩니다.
- 소스: Compute Engine VM에서 실행되는 Redis OSS 인스턴스입니다.
- 대상: Redis 관리형 VPC에서 실행되는 Redis Enterprise Cloud입니다.
- 마이그레이션 서비스: Redis OSS와 동일한 Compute Engine VM에서 실행되는 RIOT입니다.
- 네트워크 설정: 관리형 VPC와 Redis 관리형 VPC 간의 VPC 피어링입니다.
RIOT 마이그레이션 도구는 다운타임이 거의 없습니다. Redis OSS(소스)에서 Redis Enterprise Cloud(대상)로 마이그레이션하는 동안 애플리케이션은 영향이나 서비스 중단 없이 Redis OSS에 계속 액세스할 수 있습니다. 마이그레이션 프로세스 중에 Redis OSS에서 데이터를 처음 로드한 후 RIOT 라이브 마이그레이션은 발생하는 변경사항을 Redis OSS에서 계속 마이그레이션합니다.
목표
- 데이터를 만들고 로드하여 Redis OSS 소스를 설정합니다.
- Redis Enterprise Cloud에서 마이그레이션 대상 클러스터를 설정합니다.
- RIOT 라이브 마이그레이션을 사용하여 Redis OSS에서 Redis Enterprise Cloud로 데이터를 마이그레이션합니다.
- 테스트, 컷오버, 대체 전략을 이해합니다.
비용
이 아키텍처 배포에서는 비용이 청구될 수 있는 다음과 같은 Google Cloud 구성요소를 사용합니다.
- Redis OSS 및 RIOT 인스턴스를 실행하는 데 드는 Compute Engine 비용
- Google Cloud Marketplace를 통해 조달되는 Redis Enterprise Cloud 비용
- 영역과 리전 간의 데이터 마이그레이션 트래픽으로 인해 발생하는 네트워크 요금
시작하기 전에
마이그레이션을 위한 환경을 설정하려면 다음 단계를 완료하세요.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the BigQuery, Pub/Sub, Dataflow, and Compute Engine APIs.
이 배포를 완료하는 데 필요한 권한을 얻으려면 관리자에게 조직에 결제 관리자(
roles/billing.admin
) IAM 역할을 부여해 달라고 요청하세요. 역할 부여에 대한 자세한 내용은 액세스 관리를 참조하세요.
Redis OSS 인스턴스 설정
배포를 시작하려면 Compute Engine VM에 Redis OSS 인스턴스를 설치합니다. 이 인스턴스는 소스 인스턴스 역할을 합니다.
Redis OSS 인스턴스 설치
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
Cloud Shell에서 Ubuntu VM을 만듭니다.
gcloud compute instances create redis-oss-riot-vm \ --image-family=ubuntu-2004-lts \ --image-project=ubuntu-os-cloud \ --zone=us-central1-a \ --machine-type=e2-medium \ --network=VPC_NETWORK_NAME \ --subnet=VPC_SUBNETWORK_NAME \ --metadata=startup-script='#! /bin/bash apt-get update -y apt-get install redis-tools -y snap install redis'
다음을 바꿉니다.
VPC_NETWORK_NAME
: VPC 네트워크의 이름VPC_SUBNETWORK_NAME
: VPC 서브네트워크의 이름
SSH 연결을 사용하여 Redis OSS 인스턴스를 실행하는 Compute Engine 인스턴스에 로그인합니다.
PROJECT_ID=$(gcloud info --format='value(config.project)') gcloud compute ssh redis-oss-riot-vm --project $PROJECT_ID --zone us-central1-a
RIOT에 필요한 라이브 마이그레이션에 대한 키스페이스 알림을 사용 설정합니다.
redis-cli config set notify-keyspace-events KEA
Redis OSS 인스턴스가 작동하는지 확인
Cloud Shell에서 Redis CLI를 실행합니다.
redis-cli
간단한 키-값 쌍을 설정하고 가져옵니다.
set my_key my_value get my_key unlink my_key
출력은 다음과 같습니다.
OK "my_value" (integer) 1
이제 Redis OSS 인스턴스를 만들고 액세스한 후 작동하는지 확인했습니다.
샘플 데이터 삽입
이 섹션에서는 샘플 데이터를 Redis OSS 인스턴스에 삽입하고 데이터가 성공적으로 삽입되었는지 확인합니다.
Cloud Shell에서 Redis CLI를 실행합니다.
redis-cli
다음 6개의 키-값 쌍을 초기 데이터 세트로 추가합니다. 각 명령어를 개별적으로 입력하고 출력
OK
를 기다린 후 다음 키-값 쌍을 입력합니다.set tennis federer
set soccer ronaldo
set basketball curry
set football montana
set golf woods
set swimmer phelps
키-값 쌍 6개가 추가되었는지 확인합니다.
SCAN 0
출력은 다음과 같습니다.
"swimmer" "soccer" "football" "golf" "tennis" "basketball"
RIOT 마이그레이션을 설정하고 시작하면 데이터가 대상 Redis Enterprise Cloud 인스턴스로 마이그레이션됩니다.
Redis OSS 인스턴스 VM에 RIOT 설치
RIOT를 실행하려면 Compute Engine VM의 크기가 적절한지 확인해야 합니다. 일반적으로 전송할 데이터 양과 업데이트 빈도에 따라 VM 크기를 8개 이상의 VCPU로 설정하는 것이 좋습니다. 자세한 내용은 머신 계열 리소스 및 비교 가이드를 참조하세요.
Cloud Shell에서 SSH 연결을 사용하여 Redis OSS 인스턴스를 실행하는 Compute Engine 인스턴스에 로그인합니다.
PROJECT_ID=$(gcloud info --format='value(config.project)') gcloud compute ssh redis-oss-riot-vm --project $PROJECT_ID --zone us-central1-a
RIOT용 JDK를 설치합니다.
sudo apt install default-jre -y
RIOT를 다운로드하고 설치합니다.
sudo apt-get install unzip wget https://github.com/redis-developer/riot/releases/download/v2.19.0/riot-redis-2.19.0.zip unzip riot-redis-2.19.0.zip
RIOT가 올바르게 설치되었는지 확인합니다.
./riot-redis-2.19.0/bin/riot-redis -V
출력은 다음과 비슷하며, RIOT 로고와 버전 번호가 표시됩니다.
이제 Redis OSS 인스턴스에 RIOT 마이그레이션 도구를 설치하고 작동하는지 확인했습니다.
Redis Enterprise Cloud 인스턴스 만들기
Redis Enterprise Cloud는 Cloud Marketplace를 통해 제공됩니다. Redis Enterprise 클러스터를 대상 Redis Enterprise 인스턴스로 설정하지 않았다면 이 섹션의 단계를 따르세요. Redis Enterprise 클러스터를 대상 데이터베이스로 이미 설정한 경우 이 섹션을 건너뛰고 RIOT 라이브 마이그레이션 시작으로 진행할 수 있습니다.
Cloud Marketplace에서 Redis Enterprise Cloud 가변형 - 사용한 만큼만 지불로 이동합니다.
Marketplace의 Redis Enterprise로 이동
자세한 내용은 Redis 문서 Cloud Marketplace에서 가변형 구독의 안내를 참조하세요.
Redis Enterprise Cloud Flexible를 구독할 때 제공한 Redis 계정 정보를 사용하여 Redis 콘솔에 로그인합니다.
Redis 문서 Create a Flexible subscription(가변형 구독 만들기)의 안내에 따라 가변형 구독을 만듭니다. 클라우드 공급업체로 Google Cloud를 선택하고 모든 기본 설정으로 데이터베이스를 만듭니다.
Redis 문서 Enable VPC peering(VPC 피어링 사용 설정)의 안내에 따라 Google 가상 프라이빗 클라우드와 Redis 관리형 VPC 간에 VPC 피어링을 만듭니다.
Redis 콘솔에서 Subscription(구독)으로 이동한 후 Redis Enterprise 데이터베이스 연결 문자열을 찾습니다.
다음 형식의 Private endpoint IP and Port(비공개 엔드포인트 IP 및 포트)를 기록해 둡니다.
ENDPOINT_IP:ENDPOINT_PORT
여기서 값은 다음을 나타냅니다.
ENDPOINT_IP
: Redis Enterprise 데이터베이스의 비공개 엔드포인트 IP 주소.ENDPOINT_PORT
: Redis Enterprise 데이터베이스의 비공개 엔드포인트 포트 번호.
데이터베이스 비밀번호를 기록해 둡니다.
RIOT 라이브 마이그레이션 시작
Redis OSS(소스)에서 Redis Enterprise Cloud(대상) 인스턴스로 데이터를 마이그레이션하려면 다음을 수행합니다.
Cloud Shell에서 SSH 연결을 사용하여 Redis OSS 인스턴스를 실행하는 Compute Engine 인스턴스에 로그인합니다.
PROJECT_ID=$(gcloud info --format='value(config.project)') gcloud compute ssh redis-oss-riot-vm --project $PROJECT_ID --zone us-central1-a
소스와 대상 간에 실시간 마이그레이션을 시작합니다. Redis OSS 인스턴스가 Redis 7.2를 사용하는 경우 유형 기반 복제를 사용해야 합니다.
--type
옵션 사용에 대한 자세한 내용은 Redis 문서 Type-based replication(유형 기반 복제)을 참조하세요../riot-redis-2.19.0/bin/riot-redis -u redis://localhost:6379 replicate \ -u redis://ENDPOINT_IP:ENDPOINT_PORT \ -a REDIS_ENTERPRISE_DB_PASSWORD \ --mode live
다음을 이전 섹션에서 기록한 값으로 바꿉니다.
ENDPOINT_IP
: Redis Enterprise 클러스터 데이터베이스의 비공개 엔드포인트 IP 주소.ENDPOINT_PORT
: Redis Enterprise 클러스터 데이터베이스의 비공개 엔드포인트 포트 번호REDIS_ENTERPRISE_DB_PASSWORD
: Redis Enterprise 클러스터 데이터베이스의 비밀번호
출력은 다음과 비슷합니다.
Listening ? % ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━0/? (0:00:00 / ?) ?/s\ Scanning 100% ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6/6 (0:00:00 / 0:00:00) ?/s
데이터베이스 마이그레이션 확인
데이터베이스 마이그레이션이 성공했는지 확인하려면 데이터베이스 마이그레이션 확인 전략을 설계하고 구현하는 것이 중요합니다. 구체적인 사용 사례에 따라 사용하는 확인 전략이 다르지만 모든 마이그레이션에 대해 다음 확인을 수행하는 것이 좋습니다.
- 완료 확인: 초기 키-값 쌍이 Redis OSS에서 Redis Enterprise로 성공적으로 마이그레이션되었는지 확인합니다(초기 로드).
- 동적 확인: 소스의 변경사항이 대상 인스턴스로 전송되고 있는지 확인합니다(진행 중인 마이그레이션).
초기 로드
Cloud Shell에서 SSH 연결을 사용하여 Redis OSS 인스턴스를 실행하는 Compute Engine 인스턴스에 로그인합니다.
PROJECT_ID=$(gcloud info --format='value(config.project)') $ gcloud compute ssh redis-oss-riot-vm --project $PROJECT_ID --zone us-central1-a
Redis CLI를 실행합니다.
redis-cli -u redis://ENDPOINT_IP:ENDPOINT_PORT \ -a REDIS_ENTERPRISE_DB_PASSWORD
6개의 키-값 쌍이 Redis OSS에서 Redis Enterprise 인스턴스로 성공적으로 마이그레이션되었는지 확인합니다.
SCAN 0
출력은 다음과 같습니다.
"swimmer" "soccer" "football" "golf" "tennis" "basketball"
테니스 키의 값을 가져옵니다.
get tennis
출력은 다음과 같습니다.
[return federer]
Redis CLI를 종료합니다.
exit
진행 중인 마이그레이션
소스 Redis OSS에서 진행 중인 변경사항이 대상 Redis Enterprise 인스턴스에 반영되는지 확인합니다.
- Cloud Shell에서 SSH 연결을 사용하여 Redis OSS VM에 로그인합니다.
Redis CLI를 실행합니다.
redis-cli
새 키-값 쌍을 추가합니다.
새
runner bolt
쌍을 추가합니다.set runner bolt
새
tennis alcaraz
쌍을 삽입/업데이트(upsert)합니다.set tennis alcaraz
각 명령어의 출력은 다음과 같습니다.
OK
Redis Enterprise 인스턴스에서 새 키-값 쌍이 추가된 것을 확인합니다.
get runner
출력은 다음과 같습니다.
[return bolt]
모든 키-값 쌍이 있는지 확인하려면 키 수를 확인합니다.
redis-cli info keyspace and redis-cli -u <REMOTE> info keyspace
출력은 다음과 같습니다.
# Keyspace db0:keys=7,expires=0,avg_ttl=0
이제 RIOT 라이브 마이그레이션이 소스 Redis OSS 인스턴스의 모든 키-값 쌍과 진행 중인 소스 변경사항을 자동으로 마이그레이션했음을 확인했습니다.
소스에서 대상으로 컷오버
데이터베이스 마이그레이션을 확인한 후 소스 Redis OSS 인스턴스에서 대상 Redis Enterprise 인스턴스로 컷오버를 수행할 수 있습니다.
- Redis 액세스 제어 목록(ACL)을 사용하여 소스 Redis OSS 인스턴스에 대한 클라이언트 쓰기 액세스를 정지합니다.
- 대체 전략을 위해 소스 데이터베이스를 보존해야 하는 경우가 아니라면 VM 인스턴스를 삭제하여 소스 Redis OSS를 지원 중단합니다.
- 클라이언트를 Redis Enterprise 데이터베이스 인스턴스와 동일한 리전으로 이전합니다. 자세한 내용은 클라이언트 호스트의 문서를 참고하세요.
- Redis 콘솔에서 Redis Enterprise 데이터베이스 인스턴스의 비공개 엔드포인트를 찾아 클라이언트의 Redis 연결을 비공개 엔드포인트로 업데이트합니다. 자세한 내용은 Redis 문서의 데이터베이스 보기 및 수정을 참고하세요.
- Cloud Shell에서 Ctrl+C를 눌러 RIOT 프로세스를 중지합니다.
대체 전략 준비
컷오버가 완료되면 대상 Redis Enterprise 인스턴스가 기록 시스템이 되고, 소스 Redis OSS 인스턴스는 최신 상태가 아니게 되므로 결국 삭제됩니다. 그러나 새 대상 Redis Enterprise 인스턴스에 심각한 오류가 발생할 경우 소스 Redis OSS 인스턴스로 돌아가야 할 수 있습니다.
이러한 오류로부터 대체하기 위해 원본 소스 Redis OSS 인스턴스를 대상 데이터베이스 변경사항에 따라 최신 상태로 유지해야 할 수 있습니다. 새 대상 인스턴스가 안정적이라는 확신이 들면 소스 인스턴스를 종료해도 됩니다.
삭제
다음 섹션에서는 이 배포에서 사용한 Google Cloud 프로젝트와 Redis 리소스에 향후 요금이 청구되지 않도록 방지하는 방법을 설명합니다.
프로젝트 삭제
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Redis Enterprise 데이터베이스 삭제
Redis Enterprise 데이터베이스를 삭제하려면 Redis 문서의 Delete Database(데이터베이스 삭제)를 참고하세요.
다음 단계
- Redis Enterprise Cloud로의 마이그레이션 범위 정의 방법에 대해 알아보세요.
- Google Cloud 데이터 마이그레이션 콘텐츠를 읽어보세요.
- 더 자세한 문서와 권장사항은 RIOT 문서를 참조하세요.
- 그 밖의 참조 아키텍처, 다이어그램, 튜토리얼, 권장사항을 알아보려면 클라우드 아키텍처 센터를 확인하세요.
참여자
저자:
- Saurabh Kumar | ISV 파트너 엔지니어
- 길버트 라우 | Redis 수석 클라우드 설계자
기타 참여자: