Redis Enterprise Cloud로 마이그레이션하기 위한 RIOT 라이브 마이그레이션 배포

Last reviewed 2024-01-29 UTC

이 문서에서는 Redis Enterprise Cloud로 마이그레이션하기 위한 RIOT 라이브 마이그레이션을 배포하는 방법을 설명합니다. 데이터베이스 설계자, DevOps 및 SRE팀, 네트워크 관리자는 이 아키텍처를 사용하여 다운타임이 거의 없는 마이그레이션을 팀에 제공할 수 있습니다. 이 문서에서는 사용자가 Google Cloud CLI 및 Compute Engine을 사용하는 데 익숙하다고 가정합니다.

아키텍처

다음 다이어그램은 RIOT 라이브 마이그레이션 서비스를 사용하여 Redis 호환 소스를 Redis Enterprise Cloud로 마이그레이션하는 참조 아키텍처를 보여줍니다.

Redis 호환 소스는 RIOT를 통해 Redis Enterprise Cloud로 마이그레이션됩니다.

아키텍처에 대한 자세한 내용은 Redis Enterprise Cloud로 마이그레이션하기 위한 RIOT 라이브 마이그레이션을 참조하세요.

이 문서의 샘플 배포에서는 소스가 Compute Engine VM의 Redis OSS인 다음 아키텍처를 사용합니다.

Redis OSS는 RIOT 및 VPC 피어링을 통해 Redis Enterprise Cloud로 마이그레이션됩니다.

다이어그램에서는 편의상 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 구성요소를 사용합니다.

시작하기 전에

마이그레이션을 위한 환경을 설정하려면 다음 단계를 완료하세요.

  1. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  2. Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다.

  3. Enable the BigQuery, Pub/Sub, Dataflow, and Compute Engine APIs.

    Enable the APIs

  4. 이 배포를 완료하는 데 필요한 권한을 얻으려면 관리자에게 조직의 결제 관리자(roles/billing.admin) IAM 역할을 부여해 달라고 요청하세요. 역할 부여에 대한 자세한 내용은 액세스 관리를 참조하세요.

    커스텀 역할이나 다른 사전 정의된 역할을 통해 필요한 권한을 얻을 수도 있습니다.

Redis OSS 인스턴스 설정

배포를 시작하려면 Compute Engine VM에 Redis OSS 인스턴스를 설치합니다. 이 인스턴스는 소스 인스턴스 역할을 합니다.

Redis OSS 인스턴스 설치

  1. In the Google Cloud console, activate Cloud Shell.

    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.

  2. 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 서브네트워크의 이름
  3. 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
    
  4. RIOT에 필요한 라이브 마이그레이션에 대한 키스페이스 알림을 사용 설정합니다.

    redis-cli config set notify-keyspace-events KEA
    

Redis OSS 인스턴스가 작동하는지 확인

  1. Cloud Shell에서 Redis CLI를 실행합니다.

    redis-cli
    
  2. 간단한 키-값 쌍을 설정하고 가져옵니다.

    set my_key my_value
    get my_key
    unlink my_key
    

    출력은 다음과 같습니다.

    OK
    "my_value"
    (integer) 1
    

    이제 Redis OSS 인스턴스를 만들고 액세스한 후 작동하는지 확인했습니다.

샘플 데이터 삽입

이 섹션에서는 샘플 데이터를 Redis OSS 인스턴스에 삽입하고 데이터가 성공적으로 삽입되었는지 확인합니다.

  1. Cloud Shell에서 Redis CLI를 실행합니다.

    redis-cli
    
  2. 다음 6개의 키-값 쌍을 초기 데이터 세트로 추가합니다. 각 명령어를 개별적으로 입력하고 출력 OK를 기다린 후 다음 키-값 쌍을 입력합니다.

    set tennis federer
    
    set soccer ronaldo
    
    set basketball curry
    
    set football montana
    
    set golf woods
    
    set swimmer phelps
    
  3. 6개의 키-값 쌍이 성공적으로 추가되었는지 확인합니다.

    SCAN 0
    

    출력은 다음과 같습니다.

    "swimmer"
    "soccer"
    "football"
    "golf"
    "tennis"
    "basketball"
    

RIOT 마이그레이션을 설정하고 시작하면 데이터가 대상 Redis Enterprise Cloud 인스턴스로 마이그레이션됩니다.

Redis OSS 인스턴스 VM에 RIOT 설치

RIOT를 실행하려면 Compute Engine VM의 크기가 적절한지 확인해야 합니다. 일반적으로 전송할 데이터 양과 업데이트 빈도에 따라 VM 크기를 8개 이상의 VCPU로 설정하는 것이 좋습니다. 자세한 내용은 머신 계열 리소스 및 비교 가이드를 참조하세요.

  1. 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
    
  2. RIOT용 JDK를 설치합니다.

    sudo apt install default-jre -y
    
  3. 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
    
  4. RIOT가 올바르게 설치되었는지 확인합니다.

    ./riot-redis-2.19.0/bin/riot-redis -V
    

    출력은 다음과 비슷하며, RIOT 로고와 버전 번호가 표시됩니다.

    RIOT 로고 및 버전 번호.

이제 Redis OSS 인스턴스에 RIOT 마이그레이션 도구를 설치하고 작동하는지 확인했습니다.

Redis Enterprise Cloud 인스턴스 만들기

Redis Enterprise Cloud는 Cloud Marketplace를 통해 제공됩니다. Redis Enterprise 클러스터를 대상 Redis Enterprise 인스턴스로 설정하지 않았다면 이 섹션의 단계를 따르세요. Redis Enterprise 클러스터를 대상 데이터베이스로 이미 설정한 경우 이 섹션을 건너뛰고 RIOT 라이브 마이그레이션 시작으로 진행할 수 있습니다.

  1. Cloud Marketplace에서 Redis Enterprise Cloud 가변형 - 사용한 만큼만 지불로 이동합니다.

    Marketplace의 Redis Enterprise로 이동

    자세한 내용은 Redis 문서 Cloud Marketplace에서 가변형 구독의 안내를 참조하세요.

  2. Redis Enterprise Cloud 가변형을 구독할 때 제공한 Redis 계정 정보를 사용하여 Redis 콘솔에 로그인합니다.

  3. Redis 문서 Create a Flexible subscription(가변형 구독 만들기)의 안내에 따라 가변형 구독을 만듭니다. Google Cloud를 클라우드 공급업체로 선택하고 모든 기본 설정을 사용하여 데이터베이스를 만듭니다.

  4. Redis 문서 Enable VPC peering(VPC 피어링 사용 설정)의 안내에 따라 Google 가상 프라이빗 클라우드와 Redis 관리형 VPC 간에 VPC 피어링을 만듭니다.

  5. Redis 콘솔에서 Subscription(구독)으로 이동한 후 Redis Enterprise 데이터베이스 연결 문자열을 찾습니다.

    1. 다음 형식의 Private endpoint IP and Port(비공개 엔드포인트 IP 및 포트)를 기록해 둡니다.

      ENDPOINT_IP:ENDPOINT_PORT
      

      여기서 값은 다음을 나타냅니다.

      • ENDPOINT_IP: Redis Enterprise 데이터베이스의 비공개 엔드포인트 IP 주소.
      • ENDPOINT_PORT: Redis Enterprise 데이터베이스의 비공개 엔드포인트 포트 번호.
    2. 데이터베이스 비밀번호를 기록해 둡니다.

RIOT 라이브 마이그레이션 시작

Redis OSS(소스)에서 Redis Enterprise Cloud(대상) 인스턴스로 데이터를 마이그레이션하려면 다음을 수행합니다.

  1. 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
    
  2. 소스와 대상 간에 라이브 마이그레이션을 시작합니다. 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로 성공적으로 마이그레이션되었는지 확인합니다(초기 로드).
  • 동적 확인: 소스의 변경사항이 대상 인스턴스로 전송되고 있는지 확인합니다(진행 중인 마이그레이션).

초기 로드

  1. 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
    
  2. Redis CLI를 실행합니다.

    redis-cli -u redis://ENDPOINT_IP:ENDPOINT_PORT \
    -a REDIS_ENTERPRISE_DB_PASSWORD
    
  3. 6개의 키-값 쌍이 Redis OSS에서 Redis Enterprise 인스턴스로 성공적으로 마이그레이션되었는지 확인합니다.

    SCAN 0
    

    출력은 다음과 같습니다.

    "swimmer"
    "soccer"
    "football"
    "golf"
    "tennis"
    "basketball"
    
  4. 테니스 키의 값을 가져옵니다.

    get tennis
    

    출력은 다음과 같습니다.

    [return federer]
    
  5. Redis CLI를 종료합니다.

    exit
    

진행 중인 마이그레이션

소스 Redis OSS에서 진행 중인 변경사항이 대상 Redis Enterprise 인스턴스에 반영되는지 확인합니다.

  1. Cloud Shell에서 SSH 연결을 사용하여 Redis OSS VM에 로그인합니다.
  2. Redis CLI를 실행합니다.

    redis-cli
    
  3. 새 키-값 쌍을 추가합니다.

    1. runner bolt 쌍을 추가합니다.

      set runner bolt
      
    2. tennis alcaraz 쌍을 삽입/업데이트(upsert)합니다.

      set tennis alcaraz
      

    각 명령어의 출력은 다음과 같습니다.

    OK
    
  4. Redis Enterprise 인스턴스에서 새 키-값 쌍이 추가된 것을 확인합니다.

    get runner
    

    출력은 다음과 같습니다.

    [return bolt]
    
  5. 모든 키-값 쌍이 있는지 확인하려면 키 수를 확인합니다.

    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 인스턴스로 컷오버를 수행할 수 있습니다.

  1. Redis 액세스 제어 목록(ACL)을 사용하여 소스 Redis OSS 인스턴스에 대한 클라이언트 쓰기 액세스를 정지합니다.
  2. 대체 전략을 위해 소스 데이터베이스를 보존해야 하는 경우가 아니라면 VM 인스턴스를 삭제하여 소스 Redis OSS를 사용 중단합니다.
  3. Redis Enterprise 데이터베이스 인스턴스와 동일한 리전으로 클라이언트를 마이그레이션합니다. 자세한 내용은 클라이언트 호스트의 문서를 참고하세요.
  4. Redis 콘솔에서 Redis Enterprise 데이터베이스 인스턴스의 비공개 엔드포인트를 찾아 클라이언트의 Redis 연결을 비공개 엔드포인트로 업데이트합니다. 자세한 내용은 Redis 문서의 데이터베이스 보기 및 수정을 참조하세요.
  5. Cloud Shell에서 Ctrl+C를 눌러 RIOT 프로세스를 중지합니다.

대체 전략 준비

컷오버가 완료되면 대상 Redis Enterprise 인스턴스가 기록 시스템이 되고, 소스 Redis OSS 인스턴스는 최신 상태가 아니게 되므로 결국 삭제됩니다. 그러나 새 대상 Redis Enterprise 인스턴스에 심각한 오류가 발생할 경우 소스 Redis OSS 인스턴스로 돌아가야 할 수 있습니다.

이러한 오류로부터 대체하기 위해 원본 소스 Redis OSS 인스턴스를 대상 데이터베이스 변경사항에 따라 최신 상태로 유지해야 할 수 있습니다. 새 대상 인스턴스가 안정적이라는 확신이 들면 소스 인스턴스를 종료해도 됩니다.

삭제

다음 섹션에서는 이 배포에서 사용한 Google Cloud 프로젝트와 Redis 리소스에 향후 요금이 청구되지 않도록 방지하는 방법을 설명합니다.

프로젝트 삭제

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

Redis Enterprise 데이터베이스 삭제

Redis Enterprise 데이터베이스를 삭제하려면 Redis 문서의 Delete Database(데이터베이스 삭제)를 참고하세요.

다음 단계

참여자

저자:

기타 참여자: