RIOT ライブ マイグレーションをデプロイして Redis Enterprise Cloud に移行する

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 に引き続きアクセスできます。RIOT ライブ マイグレーションによる移行プロセスの間、Redis OSS からデータが最初に読み込まれた後も、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 の費用。
  • ゾーン間、リージョン間のデータ移行トラフィックから発生するネットワーク料金

始める前に

移行の環境を設定するには、次の手順を行います。

  1. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  2. Google Cloud プロジェクトで課金が有効になっていることを確認します

  3. BigQuery, Pub/Sub, Dataflow, and Compute Engine API を有効にします。

    API を有効にする

  4. このデプロイを完了するために必要な権限を取得するには、管理者に依頼して、組織での請求管理者(roles/billing.admin)の IAM ロールを付与してもらいます。ロールの付与の詳細については、アクセス権の管理をご覧ください。

    必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。

Redis OSS インスタンスを設定する

デプロイを開始するには、Redis OSS インスタンスを Compute Engine VM にインストールします。このインスタンスは移行元インスタンスとして機能します。

Redis OSS インスタンスをインストールする

  1. Google Cloud コンソールで、「Cloud Shell をアクティブにする」をクリックします。

    Cloud Shell をアクティブにする

    Google Cloud コンソールの下部で Cloud Shell セッションが開始し、コマンドライン プロンプトが表示されます。Cloud Shell はシェル環境です。Google Cloud CLI がすでにインストールされており、現在のプロジェクトの値もすでに設定されています。セッションが初期化されるまで数秒かかることがあります。

  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. シンプルな Key-Value ペアを設定して取得します。

    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 つの Key-Value ペアを初期データセットとして追加します。各コマンドは一つずつ入力し、OK が出力されるまで待ってから、次の Key-Value ペアを入力します。

    set tennis federer
    
    set soccer ronaldo
    
    set basketball curry
    
    set football montana
    
    set golf woods
    
    set swimmer phelps
    
  3. 6 つの Key-Value ペアが正常に追加されたことを確認します。

    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 Flexible - Pay as You Go] に移動します。

    Marketplace の Redis Enterprise に移動

    詳細については、Redis ドキュメントの Cloud Marketplace でのフレキシブル サブスクリプションの手順をご覧ください。

  2. Redis Enterprise Cloud Flexible の登録時に指定した Redis アカウント情報を使用して、Redis コンソールにログインします。

  3. Redis ドキュメントのフレキシブル サブスクリプションの作成の手順に沿って、フレキシブル サブスクリプションを作成します。クラウド ベンダーとして Google Cloud を選択し、すべてデフォルト設定のままでデータベースを作成します。

  4. Redis ドキュメントの VPC ピアリングを有効にするの手順に沿って、Google Virtual Private Cloud と Redis マネージド VPC の間に VPC ピアリングを作成します。

  5. Redis コンソールで [サブスクリプション] に移動し、Redis Enterprise データベース接続文字列を見つけます。

    1. 次の形式で表示されるプライベート エンドポイントの 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 ドキュメントのタイプベースのレプリケーションをご覧ください。

    ./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
    

データベースの移行を確認する

データベースの移行が成功したかどうかを確認するデータベース移行検証戦略を設計、実装することは重要です。使用する検証戦略は、個々のユースケースによって異なりますが、すべての移行において次のチェックを行うことをおすすめします。

  • 完全性チェック: 最初の Key-Value ペアが 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 つの Key-Value ペアが Redis OSS から Redis Enterprise インスタンスに正常に移行されたことを確認します。

    SCAN 0
    

    次のような出力が表示されます。

    "swimmer"
    "soccer"
    "football"
    "golf"
    "tennis"
    "basketball"
    
  4. tennis キーの値を取得します。

    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. 新しい Key-Value ペアを追加します。

    1. 新しい runner bolt ペアを追加します。

      set runner bolt
      
    2. 新しい tennis alcaraz ペアを upsert します。

      set tennis alcaraz
      

    これらの各コマンドに対し、次のような出力が表示されます。

    OK
    
  4. Redis Enterprise インスタンスで、新しい Key-Value ペアが追加されていることを確認します。

    get runner
    

    次のような出力が表示されます。

    [return bolt]
    
  5. Key-Value ペアがすべて存在することを確認するため、キー数を確認します。

    redis-cli info keyspace and redis-cli -u <REMOTE> info keyspace
    

    次のような出力が表示されます。

    # Keyspace
    db0:keys=7,expires=0,avg_ttl=0
    

これで、RIOT ライブ マイグレーションにより、ソース Redis OSS インスタンスからのすべての Key-Value ペアと、ソースに対して実行されているすべての変更が、自動的に移行されたことを確認できました。

ソースからターゲットにカットオーバーする

データベースの移行を確認したら、ソースの Redis OSS インスタンスからターゲットの Redis Enterprise インスタンスへ、カットオーバーを実行できます。

  1. Redis アクセス制御リストを使用して、ソース 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 ドキュメントのデータベースを削除するをご覧ください。

次のステップ

寄稿者

著者:

  • ISV パートナー エンジニア | Saurabh Kumar
  • Redis、プリンシパル クラウド アーキテクト | Gilbert Lau

その他の関係者:

  • データ マネジメント担当カスタマー エンジニア | Chris Mague
  • デベロッパー アドボカシー マネージャー | Gabe Weiss
  • クラウド ソリューション アーキテクト | Marco Ferrari