Amazon ElastiCacheからRedis Enterprise Cloudへ、RIOTによるダウンタイムなしのオンラインデータベース移行
現在利用できるデータベース移行ツールの多くはオフライン型であり、操作が複雑で手動での介入を必要とするものが少なくありません。
例えば、Amazon ElastiCacheからRedis Enterprise Cloudへデータを移行したい場合、一般的な手順は、まずElastiCacheのデータをAmazon S3バケットにバックアップし、その後Redis Enterprise CloudのUIを使ってデータをインポートするという流れになります。しかし、この方法では長時間のサービス停止(ダウンタイム)が発生し、データ損失のリスクも伴います。その他の手法としては、ソース側のRedisサーバーの特定時点スナップショットを作成し、その変更内容を宛先サーバーに適用して両サーバーを同期させる方法があります。一見すると有効なアプローチに思えますが、移行戦略を実装するために数十個ものスクリプトを管理しなければならず、運用負荷が非常に大きくなるのが実情です。
そこで私たちは、まったく異なるアプローチを考案しました。
RIOTのご紹介
RIOTは、RedisのソリューションアーキテクトであるJulien Ruaux氏が開発したオープンソースのオンライン移行ツールです。RIOTはプロデューサ/コンシューマ方式を採用したクライアントサイドレプリケーションを実装しています。プロデューサは、ElastiCacheへの接続を持つキーリーダーとバリューリーダーの組み合わせで構成されます。キーリーダーコンポーネントは、SCANとキースペース通知を使用してレプリケート対象のキーを識別します。各キーに対して、バリューリーダーコンポーネントがDUMPを実行し、その結果得られたキー+バイト列をコンシューマ(ライター)に渡します。コンシューマはRedis Enterprise接続上でRESTOREを実行します。
本記事では、ElastiCacheからRedis Enterprise Cloudへのシームレスなオンラインデータベース移行の手順をご紹介します。
あわせて読みたい:「DBaaSプロバイダー選定時に検討すべき6つの重要機能」および「成熟しつつあるエンタープライズ顧客のAWS上のニーズにRedis Enterprise Cloudが応える方法」
前提条件
移行ツールを使用するには、以下のリソースが必要です。
- Redis Enterprise Cloudのサブスクリプション
- Amazon ElastiCache(シングルマスター構成の場合はプライマリエンドポイント、クラスタ構成の場合は設定エンドポイント。詳細については、ElastiCacheドキュメントの「接続エンドポイントの検索」を参照してください)
- LinuxベースのAmazon EC2インスタンス
Amazon EC2インスタンスのセットアップ
新しいEC2インスタンスを作成してもよいですし、既存のインスタンスを活用することも可能です。ここでは、まずAWS(Amazon Web Services)上にインスタンスを作成する例を紹介します。最も一般的なシナリオは、同じAmazon VPC(Virtual Private Cloud)内のAmazon EC2インスタンスからElastiCacheクラスターにアクセスするケースです。このセットアップではUbuntu 16.04 LTSを使用しましたが、お好みのUbuntuやDebianディストリビューションを選択しても問題ありません。
以下のコマンドで、SSHを使って自分のコンピュータから新しいEC2インスタンスに接続します。
ssh -i “公開鍵” <AWS EC2インスタンス>
次に、以下のコマンドを実行して、この新しいインスタンスにredis-cliツールをインストールします。
$ sudo apt update # sudo apt install -y redis-tools
redis-cliでElastiCacheデータベースへの接続性を確認する
構文:
$ redis-cli -h <ElastiCache プライマリエンドポイント> -p 6379
コマンド:
$ sudo redis-cli -h <elasticache プライマリエンドポイント> -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接続オプション -r, --redis=<uri> Redis接続文字列(デフォルト: redis://localhost:6379) -c, --cluster Redis Clusterに接続 -m, --metrics メトリクスを表示 -p, --pool=<int> 最大プール接続数(デフォルト: 8) コマンド: 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://<ソースElastiCacheエンドポイント>:6379 replicate -r redis://password@<Redis Enterprise Cloudエンドポイント>:ポート番号 --live
ElastiCacheには「クラスタ構成」と「非クラスタ構成」の2つの設定方法があります。下の表では、1行目に非クラスタ構成の場合に実行すべきコマンドを、2行目に特定のデータベース名前空間を持つクラスタ構成の場合のコマンドを示しています。
ご覧のとおり、クラスタ構成のElastiCacheを扱う場合は、ソースのElastiCacheエンドポイントを指定する前に--clusterオプションを渡す必要があります。
重要な注意点
- 本番環境で使用する前に、必ず移行のユーザー受け入れテスト(UAT)を実施してください。
- 移行が完了したら、アプリケーショントラフィックがRedis Enterpriseエンドポイントに正しく切り替わっていることを確認してください。
- データ損失の可能性を最小限に抑えるため、トラフィックが少ない時間帯に移行作業を実施してください。
まとめ
Amazon ElastiCacheからRedis Enterprise Cloudへ、ダウンタイムなしでデータを移行できるシンプルで使いやすいライブ移行ツールをお探しなら、RIOTは有力な選択肢となるでしょう。
参考資料:
- RIOT – Redis input/output tools
-
Amazon S3を活用したOracle Databaseのバックアップ方法
本記事では、Amazon Simple Storage Service(S3)をOracle® Databaseのバックアップストレージとして活用する方法を解説します。Amazon Web Services(AWS)は、クラウド上でのデータベースバックアップを可能にするためOracleと提携した最初のクラウドベンダーであり、S3はAWSの中核を担うストレージサービスです。 はじめに S3はシンプルなWebサービスインターフェースを備えており、アプリケーションはインターネット上のどこからでも、任意の量のデータを保存・取得できます。S3は高い拡張性・信頼性・処理速度と低コストを兼ね備えたデータスト
-
Redis MOVEコマンドの使い方 – キーを別のデータベースへ移動する方法
このチュートリアルでは、Redisデータストア上でキーをあるデータベースから別のデータベースへ移動する方法を解説します。キーの移動には、redis-cliで使用できるMOVEコマンドを利用します。 MOVEコマンドは、現在選択されているデータベース(ソース)から指定したキーを削除し、そのキーを移動先(デスティネーション)のデータベースに挿入するために使用されます。なお、以下の場合は操作が実行されず、戻り値として0が返されます。 指定したキーがソースデータベースに存在しない場合 同じ名前のキーがすでに移動先のデータベースに存在する場合 構文 Redis MOVEコマンドの基本構文は以下のとお