データのインポートとエクスポートについて

このページでは、Memorystore for Redis でのインポートとエクスポートの仕組みについて説明します。

インポートおよびエクスポート機能は、Redis のネイティブ RDB スナップショット機能を使用して、Memorystore for Redis インスタンスにデータをインポートまたはエクスポートします。ネイティブ RDB 形式を使用すると、ロックインが回避され、Google Cloud 内または Google Cloud 外で簡単にデータを移動できます。インポートとエクスポートでは、Cloud Storage バケットを使用して RDB ファイルを保存します。

エクスポート中の Memorystore for Redis インスタンスの動作は、オープンソースの Redis での BGSAVE コマンドとよく似ています。Memorystore for Redis は、RDB ファイルをインスタンスのデータ ディレクトリにコピーすることによって、インポートします。

RDB ファイルのインポートとエクスポートの手順については、Redis インスタンスへのデータのインポートRedis インスタンスからのデータのエクスポートをご覧ください。

機能の動作をインポートする

  • 最適なパフォーマンスを得るには、Redis インスタンスと同じリージョンにある Cloud Storage バケットからインポートする必要があります。

  • インポート オペレーション中は Redis インスタンスを使用できません。インポート オペレーションが終了すると、インスタンスが使用可能になります。

  • インポートが成功すると、インスタンス内の既存データは RDB ファイルのデータで上書きされます。

  • なんらかの理由でインポートが失敗すると、インスタンスはオンラインになりますが、データが完全にフラッシュされる可能性があります。同じ RDB ファイルを使用してインポートを再試行することも、別の RDB ファイルを使用してデータを復元することもできます。

  • Memorystore for Redis インスタンスは、同じ Redis バージョンからと、以前の Redis バージョンからの RDB ファイルをインポートできますが、新しいバージョンからの RDB ファイルはインポートできません。

  • インポート オペレーションはキャンセルできますが、キャンセルすると完全にフラッシュされたキャッシュでインスタンスが復元されることに注意する必要があります。これは基本階層とスタンダード ティアの両方のインスタンスに当てはまります。

  • インスタンスは、古いバージョンの Redis からのみバックアップをインポートできます。Redis 5.0 を実行しているインスタンスは、Redis 4.0 からエクスポートされた RDB をインポートできますが、Redis 4.0 を実行しているインスタンスは、Redis 5.0 からの RDB をインポートできません。

機能の動作をエクスポートする

  • エクスポート オペレーション中に Redis インスタンスのデータを読み書きできます。ただし、インスタンスのスケーリング、更新、構成などの管理オペレーションは実行できません。

  • エクスポート中には、インスタンスのレイテンシが増加することがあります。

  • 最適なパフォーマンスを得るには、Redis インスタンスと同じリージョンに位置する Cloud Storage バケットに RDB バックアップをエクスポートする必要があります。

  • エクスポート中に、選択した Cloud Storage バケットに RDB ファイルが保存されます。

  • エクスポート操作はいつでもキャンセルできます。キャンセルはインスタンスのデータや可用性に影響しません。

    • エクスポートをキャンセルすると、Cloud Storage バケットに書き込まれている RDB ファイルが削除され、BGSAVE プロセスで使用されたメモリが解放されます。
  • Google Cloud コンソールの使用時には、追加の権限なしで、エクスポートで同じ名前の既存のファイルを上書きできます。gcloud を使用して既存のファイルの上にエクスポートするには、ユーザー アカウントに storage.objects.delete 権限が必要です。

書き込み負荷が高い状態でのエクスポート

書き込み負荷が高い期間にエクスポートを実行すると、インスタンスのメモリ使用量が最大 2 倍になり、エクスポート オペレーションが失敗する原因になります。書き込みが少ない期間にエクスポート オペレーションを実行する必要があります。インスタンスに保存されている Redis データの量をモニタリングするには、Cloud Monitoring で、メモリ使用量をモニタリングするダッシュボードを作成して、インスタンスのメモリ使用量の指標をモニタリングします。

Memorystore for Redis のエクスポートでは、Redis の BGSAVE 機能を使用してインスタンス内のデータのスナップショットを作成します。BGSAVE を実行すると、Redis は新しい子プロセスをフォークして、スナップショットを作成します。Redis はこのプロセス中に copy-on-write を使用します。

つまり、最初のフォークでは最小限の追加メモリが割り当てられますが、Redis サーバーの書き込みトラフィックによって変更されたページは重複します。したがって、書き込みが頻繁に発生する期間では、最悪の場合、Redis のメモリ フットプリントが 2 倍になり、エクスポート オペレーションが失敗する原因になります。

BGSAVE オペレーション中のエクスポート

BGSAVE オペレーションの実行中はエクスポートできません。スタンダード ティアの Memorystore for Redis インスタンスでは、プライマリとレプリカの同期を維持するために、完全な再同期オペレーション(完全同期)が実行されることがあります。完全な再同期では、BGSAVE コマンドを使用します。これにより、Memorystore はエクスポートを実行できなくなります。

BGSAVE オペレーションが進行中かどうかを確認するには、Metrics Explorer で redis.googleapis.com/persistence/rdb/bgsave_in_progress API エンドポイントを表示します。

Metrics Explorer を使用してモニタリング対象リソースの指標を表示するには、次の操作を行います。

  1. Google Cloud コンソールで、[Metrics Explorer] ページに移動します。

    Metrics Explorer に移動

    検索バーを使用してこのページを検索する場合は、小見出しが [Monitoring] である結果を選択します。

  2. [指標] 要素で [指標を選択] メニューを開き、リソースタイプと指標タイプを選択します。たとえば、仮想マシンの CPU 使用率をグラフ化する手順は次のとおりです。
    1. (省略可)メニューのオプションを減らすには、[フィルタバー] に指標名の一部を入力します。この例では、「utilization」と入力します。
    2. [Active resources] メニューで、[VM instance] を選択します。
    3. [Active metric categories] メニューで、[Instance] を選択します。
    4. [有効な指標] メニューで [CPU 使用率] を選択し、[適用] をクリックします。
  3. 表示される時系列をフィルタするには、[フィルタ] 要素を使用します。

  4. 時系列を結合するには、[集計] 要素のメニューを使用します。たとえば、ゾーンに基づいて VM の CPU 使用率を表示するには、最初のメニューを [平均] に設定し、2 番目のメニューを [ゾーン] に設定します。

    [集計] 要素の最初のメニューが [未集計] に設定されている場合は、すべての時系列が表示されます。[集計] 要素のデフォルト設定は、選択した指標タイプによって決まります。

上記の方法以外では、独自のコマンドライン API ツールを使用することも可能です。

インポートとエクスポートに必要な権限

RDB ファイルをインポートまたはエクスポートするには、ユーザーは十分な IAM 権限を構成する必要があります。最も簡単な権限の設定は、ユーザー アカウントにCloud Memorystore Redis 管理者ストレージ管理者の IAM ロールを適用することです。ただし、そのリソースへアクセスすべきではないユーザー アカウントに対しても作成、編集、削除する権限を与えてしまう可能性があります。最小限の権限の設定手順については、インポートとエクスポートのための限定的な権限の付与をご覧ください。

インポートとエクスポートにかかる時間

インポートまたはエクスポートにかかる時間は、インスタンスのサイズとインスタンス内のデータセットのサイズによって異なります。このサイズに応じて、インポートとエクスポートに数分から数時間ほどかかることがあります。

たとえば、10 GB のインスタンスを 8 GB の使用済みメモリでインポートまたはエクスポートすると、オペレーションに 5 分かかることがあります。100 GB の使用済みメモリで 120 GB のインスタンスをインポートまたはエクスポートすると、オペレーションに 1 時間かかることがあります。

インポートまたはエクスポートの停止

インポートまたはエクスポートを停止するには、次のページをご覧ください。

オペレーションの進行状況のモニタリング

インポートとエクスポートの実行中は、完了までの推定時間を確認できません。オペレーションが進行中かどうかについては、インスタンスの詳細ページで確認できます。インスタンスの詳細ページを表示するには、Memorystore for Redis のインスタンスの一覧ページでインスタンス ID をクリックします。

次のコマンドを実行して、インポート オペレーションの進行状況をモニタリングすることもできます。

gcloud redis instances describe [INSTANCE_ID] --region=[REGION]

ここで

  • [INSTANCE_ID] は、Memorystore for Redis インスタンスの ID です。
  • [REGION] は、インスタンスが存在するリージョンです。

このコマンドは、説明フィールドの 1 つとして state: IMPORTING または state: READY を出力します。

サポートされていない Cloud Storage バケット

リクエスト元による支払いの Cloud Storage バケットは、Memorystore のインポートとエクスポートではサポートされていません。

Cloud Storage バケットの保護

Cloud Storage バケットには、その中の Redis RDB バックアップへの不正アクセスを防ぐために、適切な制限が設定されていることを確認する必要があります。Cloud Storage バケットを保護する方法については、Cloud Storage のアクセス制御オプションをご覧ください。

エクスポートの実行に十分なメモリを確保する

エクスポートによってメモリ不足が発生しないようにするには、エクスポート処理中のインスタンスに 50% の空きメモリが必要です。書き込み負荷によっては、この空き容量が常に必要とは限りませんが、50% の空きメモリがあれば、多くのページがエクスポート処理中になったとしても、コピー オン ライト オーバーヘッドに対応できる十分な空き容量を確保できます。

インスタンスの現在のメモリ使用量を把握するには、メモリ使用量がカスタマイズ可能なしきい値に達したときに通知するように、アラートを設定します。また、Cloud Monitoring を使用してメモリ モニタリング ダッシュボードを設定する必要があります。これらの指標により、インスタンスのメモリ使用パターンを把握できます。メモリ使用パターンを把握することで、定期的なエクスポート時にインスタンスのサイズを正しく設定できます。

リードレプリカを使用するインスタンスへのエクスポートとインポート

リードレプリカ対応インスタンスを含むすべての Redis インスタンスについて、データはプライマリ ノードからエクスポートされます。

リードレプリカ対応インスタンスの場合、エクスポートすることで、プライマリ ノードの CPU 負荷とメモリ フットプリントが増加する可能性があります。

リードレプリカ対応インスタンスにデータをインポートすると、インポート オペレーション中にプライマリが再起動し、新しいデータがデータベースに完全に読み込まれるまで、インスタンスは使用できなくなります。

次のステップ