Logo - Pure Storage

Portworx PX-DR:コンテナのディザスタ・リカバリ(非同期レプリケーション編)

Portworx PX-DR 非同期レプリケーション

今回は、Portworx のコンテナのディザスタ・リカバリ機能を提供する PX-DR の非同期レプリケーション機能についてご説明します。同期レプリケーション機能については、こちらのブログご覧ください。本ブログは、テクニカル・マーケティング・マネージャーのライアン・ウォルナー(Ryan Wallner)による記事を参考に、わたくし溝口が日本語化および加筆、再構成したものです。

なお、PX-DR は 30 日間のトライアル・ライセンスには含まれません。もし、PoC をご検討いただける場合は、sales-japan@purestorage.com までお問い合わせください。

非同期レプリケーション

同期レプリケーションに関するブログでご説明したとおり、データベースのようなステートフル・アプリケーションを Kubernetes プラットフォームで実行しようとする場合には、データ保護の問題が発生します。PX-DR は、主に同期レプリケーションと非同期レプリケーションという 2 つの方法でこれらの問題を解決します。

非同期レプリケーションは、2 つの異なる Portworx クラスタを地理的に異なるエリアに配置し、それらをクラスタ・ペアにします。スタンバイ・サイトでは、継続的に非同期にレプリケーションをスケジューリングして、定義された RPO(目標復旧時点)および RTO の条件のもと、ディザスタ・リカバリ先のクラスタとして動作します。

ボリュームの非同期レプリケーションの設定

非同期レプリケーションには 2 つの Portworx クラスタを使用します。このうち 1 つのクラスタは DR サイトです。クラスタ・ペアは PX-DR の 2 つのクラスタ間で作成されます。クラスタがペアリングされた後、非同期レプリケーションは、スケジュール・ポリシーとマイグレーション・スケジュールの 2 つを使用して実施されます。

Portworx PX-DR 非同期レプリケーション

スケジュール・ポリシー

スケジュール・ポリシーは、マイグレーションをトリガーするタイミングを指定します。ポリシー自体にはアクションは含まれていませんが、マイグレーション機能によって参照および使用されます。

スケジュール・ポリシーには 4 つのセクションがあります。

  • インターバル(interval:アクションがトリガーされる間隔を分単位で指定します。
  • 日次(daily:アクションが毎日トリガーされる時刻を指定します。
  • 週次(weekly:アクションがトリガーされる曜日と、その日の時刻を指定します。
  • 月次(monthly:アクションがトリガーされる月の日付と、その日の時刻を指定します。

以下に mysql という名前空間(namespace)を対象として、インターバル、日次、週次および月次で DR サイトと同期する設定例を示します。


[crayon-67f65b61e3d2f621687780/]

マイグレーション・スケジュール

マイグレーション・スケジュールにより、SchedulePolicy とマイグレーションを関連付けることができます。以下は、上記の testpolicy を使用した例です。このマイグレーションは mysql という名前空間を指し、その名前空間で remotecluster という名前の clusterPair(後述)が存在する場合、それを使用します。また、includeResourcesincludeVolumes および、startApplicationsspec の中で指定することでマイグレーションを制御できます。

  • includeResources:Secret、ConfigMaps、Service など、ボリュームに関連付けられた Kubernetes オブジェクトを含めるかどうか。
  • includeVolumes:PVC に関連付けられた Portworx ボリュームのマイグレーションを含めるかどうか。
  • startApplications:リソースやボリュームが同期した後、Destination クラスタでアプリケーションを開始するかどうか。


[crayon-67f65b61e3d3c392585669/]

Kubernetes ディザスタ・リカバリのワークフロー例

では、Portworx で Google Kubernetes Engine(GKE) を使用して、2 つのサイト間で DR サイトの非同期レプリケーションを設定してみましょう。

Portworx PX-DR 非同期レプリケーション

以下のゾーンでクラスタを作成しました。us-east4-c に存在するクラスタは、DR サイトです。

  • クラスタ 1:米国サウスカロライナ州モンクスコーナーのゾーン D、別名 us-east1-d
  • クラスタ 2:米国バージニア州北部アッシュバーンのゾーン C、別名 us-east4-c(DR サイト)

クラスタ 1 とクラスタ 2 をペアにするには、DR 側のクラスタ(以降、「宛先クラスタ」)からトークンを取得し、ソース・クラスタがアクセス可能な宛先クラスタの Portworx ノードの IP アドレスを少なくとも 1 つ用意します。


[crayon-67f65b61e3d40979249689/]

宛先クラスタで storkctl を使用して、DR を行う名前空間の clusterpair を生成します。


[crayon-67f65b61e3d44849061459/]

出力を pair.yaml という名前のファイルに保存し、Portworx のノード IP と、先に取得したトークンを追加します。詳細は、同期レプリケーションに関するブログの「手順 2. ClusterPair」をご参照ください。

次に、pair.yaml をソース・クラスタに適用し、状態が Ready であることを確認します。


[crayon-67f65b61e3d46448814254/]

これでクラスタがペアになったので、アプリケーションの非同期レプリケーションを設定できます。MySQL データベースを使用してこれを行う方法を以下に示します。

まず、先に作成した clusterpair がターゲットとする mysql という名前の名前空間を作成します。


[crayon-67f65b61e3d4c505625474/]

次に、Portworx ボリュームと MySQL ポッドを含む MySQL デプロイメントを適用します。


[crayon-67f65b61e3d4e259580680/]

pxctl コマンドを使用して、MySQL デプロイメントによって作成された Portworx ボリュームを一覧表示します。


[crayon-67f65b61e3d51322486313/]

次に、MySQL データベースにデータをいくつか追加します。


[crayon-67f65b61e3d54345534098/]

非同期 PX-DR のセットアップ

スケジュール・ポリシーを適用します。


[crayon-67f65b61e3d57973533333/]

次に、マイグレーション・スケジュールを構成します。


[crayon-67f65b61e3d5a680472347/]

以上で完了です!

現在の名前空間のアクティブなマイグレーションのリストを取得するには、kubectl を使用します。ここでは、ポリシーで選択した 1 分の間隔に基づいた初期同期であることを示しています。ポリシーで構成されている時間設定ごとに同期(マイグレーション)が表示されます。


[crayon-67f65b61e3d5d834778696/]

マイグレーションの詳細を表示するには、kubectl を使用します。これにより、ボリュームやその他の Kubernetes リソースのマイグレーションの成功または失敗を示す以下のようなイベントが表示されます。


[crayon-67f65b61e3d5f542538297/]

また、storkctl コマンドを使用すると、作成したスケジュールで実施されたマイグレーションの成功や失敗、進捗状況といった Stage や Status を表示できます。


[crayon-67f65b61e3d62922425559/]

それでは、ソース・クラスタから同期したデータを使用して、DR サイトでアプリケーションをリストアしてみましょう。

まず、新しいクラスタで使用可能なボリュームを確認します。Creation time は、ソース・クラスタからの最新の同期と一致している必要があります。startApplicationsfalse に設定したため、detached になっていることに留意してください。


[crayon-67f65b61e3d64746906408/]

次に、ボリュームを調べて、そのタイム・スタンプをメモします。


[crayon-67f65b61e3d67434786621/]

DR サイトのクラスタ内にあるポッド(pod)とデプロイメント(deployment)を見て、これらが正しく動作しているかを確認できます。


[crayon-67f65b61e3d6a272329802/]

上記のとおり、こちらにはアクティブなポッドはありませんが、デプロイメントが存在します。これは、Kubernetes オブジェクトをマイグレーションするかどうかを設定する includeResourcestrue にしたためです。Kubernetes オブジェクトはマイグレートされましたが、startApplicationsfalse に設定したため、ポッドのアクティブなレプリカはない状態となっています。

【ポイント】Portwox ボリュームのみをマイグレーションし、Kubernetes リソースをマイグレーションしない場合は、includeResourcesfalse に設定します。

 

DR サイトでアプリケーションをリストアするには、storkctl コマンドを使用して、最新のマイグレーションを activate します。


[crayon-67f65b61e3d6c757764494/]

次に mysql という名前の名前空間内のポッドを DR サイトで確認します。


[crayon-67f65b61e3d74389290969/]

これで、アプリケーションのコピーが DR サイトに正常にリストアされました。

補足情報として、動画をご紹介します。MySQL と WordPress を使用して複数のボリューム、サービスおよびオブジェクトを DR サイトにマイグレーションするという同様のユースケースのデモ動画です。ぜひご覧ください。

 

PX-DR により、さまざまなタイプの災害からのフェイルオーバーが可能となり、より自信を持ってミッション・クリティカルなデータ・サービスを提供できるようになりました。将来のリリースでは、ここでご紹介したクラスタ・ペアリングやレプリケーション・タイプの設定などは、今後 GUI 等の提供により、直感的でシンプルなものにすることを目指してまいります!


Pure Storage、Pure Storage のロゴ、およびその他全ての Pure Storage のマーク、製品名、サービス名は、米国およびその他の国における Pure Storage, Inc. の商標または登録商標です。その他記載の会社名、製品名は、各社の商標または登録商標です。