このドキュメントでは、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 に引き続きアクセスできます。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 の費用。
- ゾーン間、リージョン間のデータ移行トラフィックから発生するネットワーク料金。
始める前に
移行の環境を設定するには、次の手順を行います。
-
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 インスタンスを設定する
デプロイを開始するには、Redis OSS インスタンスを Compute Engine VM にインストールします。このインスタンスは移行元インスタンスとして機能します。
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
シンプルな Key-Value ペアを設定して取得します。
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 つの Key-Value ペアを初期データセットとして追加します。各コマンドは一つずつ入力し、
OK
が出力されるまで待ってから、次の Key-Value ペアを入力します。set tennis federer
set soccer ronaldo
set basketball curry
set football montana
set golf woods
set swimmer phelps
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 以上に設定することをおすすめします。詳細については、マシン ファミリーのリソースと比較ガイドをご覧ください。
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 Flexible - Pay as You Go] に移動します。
Marketplace の Redis Enterprise に移動
詳細については、Redis ドキュメントの Cloud Marketplace でのフレキシブル サブスクリプションの手順をご覧ください。
Redis Enterprise Cloud Flexible の登録時に指定した Redis アカウント情報を使用して、Redis コンソールにログインします。
Redis ドキュメントのフレキシブル サブスクリプションの作成の手順に沿って、フレキシブル サブスクリプションを作成します。クラウド ベンダーとして Google Cloud を選択し、すべてデフォルト設定のままでデータベースを作成します。
Redis ドキュメントの VPC ピアリングを有効にするの手順に沿って、Google Virtual Private Cloud と Redis マネージド VPC の間に VPC ピアリングを作成します。
Redis コンソールで [サブスクリプション] に移動し、Redis Enterprise データベース接続文字列を見つけます。
次の形式で表示されるプライベート エンドポイントの 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 ドキュメントのタイプベースのレプリケーションをご覧ください。./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 に正常に移行されたことを確認します(初期読み込み)。
- 動的チェック: ソースの変更がターゲット インスタンスに転送されていることを確認します(進行中の移行)。
初期読み込み
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 つの Key-Value ペアが Redis OSS から Redis Enterprise インスタンスに正常に移行されたことを確認します。
SCAN 0
次のような出力が表示されます。
"swimmer" "soccer" "football" "golf" "tennis" "basketball"
tennis キーの値を取得します。
get tennis
次のような出力が表示されます。
[return federer]
Redis CLI を終了します。
exit
進行中の移行
ソースの Redis OSS に対して実行されている変更が、ターゲットの Redis Enterprise インスタンスに反映されていることを確認します。
- Cloud Shell で、SSH 接続を使用して Redis OSS VM にログインします。
Redis CLI を起動します。
redis-cli
新しい Key-Value ペアを追加します。
新しい
runner bolt
ペアを追加します。set runner bolt
新しい
tennis alcaraz
ペアを upsert します。set tennis alcaraz
これらの各コマンドに対し、次のような出力が表示されます。
OK
Redis Enterprise インスタンスで、新しい Key-Value ペアが追加されていることを確認します。
get runner
次のような出力が表示されます。
[return bolt]
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 インスタンスへ、カットオーバーを実行できます。
- Redis アクセス制御リストを使用して、ソース 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 ドキュメントのデータベースを削除するをご覧ください。
次のステップ
- Redis Enterprise Cloud への移行のスコープを定義する方法を学習する。
- Google Cloud のデータ移行に関するコンテンツを読む。
- RIOT の各種ドキュメントで、詳細なドキュメントとベスト プラクティスを確認する。
- Cloud アーキテクチャ センターで、リファレンス アーキテクチャ、図、ベスト プラクティスを確認する。
寄稿者
著者:
- ISV パートナー エンジニア | Saurabh Kumar
- Redis、プリンシパル クラウド アーキテクト | Gilbert Lau
その他の関係者:
- データ マネジメント担当カスタマー エンジニア | Chris Mague
- デベロッパー アドボカシー マネージャー | Gabe Weiss
- クラウド ソリューション アーキテクト | Marco Ferrari