このチュートリアルでは、Dataproc Metastore を使用したデュアルリージョンの障害復旧と事業継続戦略を提案します。このチュートリアルでは、Hive データセットと Hive メタデータのエクスポートの両方を保存するために、デュアルリージョン バケットを使用します。
Dataproc Metastore は、フルマネージドで、高可用性のある、自動スケーリング機能、自動修復機能を備えた OSS ネイティブのメタストア サービスであり、技術的なメタデータ管理を大幅に簡素化します。Google のマネージド サービスは Apache Hive メタストアをベースとしており、企業のデータレイクの重要な要素となっています。
このチュートリアルは、Hive のデータとメタデータに対して高可用性を必要とする Google Cloud をご利用のお客様を対象としています。ストレージには Cloud Storage、コンピューティングには Dataproc を使用し、Google Cloud 上のフルマネージド Hive メタストア サービスである Dataproc Metastore(DPMS)を使用します。このチュートリアルでは、フェイルオーバーをオーケストレートするための 2 つの方法(Cloud Run および Cloud Scheduler を使用する方法と、Cloud Composer を使用する方法)についても紹介します。
このチュートリアルで使用するデュアルリージョンのアプローチには、次のメリットとデメリットがあります。
メリット
- デュアルリージョン バケットは地理的に冗長になります。
- 単一リージョン バケットの可用性は 99.9% であるのに対し、デュアルリージョン バケットの可用性に関する SLA は 99.95% です。
- デュアルリージョン バケットのパフォーマンスは 2 つのリージョンで最適化されます。一方、シングル リージョン バケットは、他のリージョンのリソースを操作する場合は、それほどパフォーマンスが高くありません。
デメリット
- デュアルリージョン バケットへの書き込みは、すぐに両方のリージョンに複製されません。
- デュアルリージョン バケットは単一リージョンのバケットと比較してストレージ コストが増大します。
リファレンス アーキテクチャ
次のアーキテクチャ図は、このチュートリアルで使用するコンポーネントを示しています。どちらの図でも、大きな赤い X は、プライマリ リージョンの障害を示しています。
図 1: Cloud Run と Cloud Scheduler の使用
図 2: Cloud Composer の使用
ソリューションのコンポーネントとその関係は次のとおりです。
- 2 つの Cloud Storage デュアルリージョン バケット: Hive データ用のバケットを 1 つ、Hive メタデータの定期バックアップ用のバケットを 1 つ作成します。データにアクセスする Hadoop クラスタと同じリージョンを使用するように、両方のデュアルリージョン バケットを作成します。
- DPMS を使用した Hive メタストア: この Hive メタストアは、プライマリ リージョン(リージョン A)に作成します。メタストアの構成は Hive データバケットを指します。Dataproc を使用する Hadoop クラスタは、接続先の DPMS インスタンスと同じリージョンに存在する必要があります。
- 2 番目の DPMS インスタンス: スタンバイ リージョン(リージョン B)に 2 番目の DPMS インスタンスを作成して、リージョン全体の障害に備えます。次に、最新の
hive.sql
エクスポート ファイルをエクスポート バケットからスタンバイ DPMS にインポートします。また、スタンバイ リージョンに Dataproc クラスタを作成し、スタンバイ DPMS インスタンスにアタッチします。最後に、障害復旧シナリオで、クライアント アプリケーションを、リージョン A の Dataproc クラスタからリージョン B の Dataproc クラスタにリダイレクトします。 Cloud Run デプロイメント: Cloud Scheduler を使用して、DPMS メタデータをメタデータ バックアップ バケットに定期的にエクスポートする Cloud Run デプロイメントをリージョン A に作成します(図 1 を参照)。エクスポートは、DPMS メタデータの完全なダンプを含む SQL ファイルの形式です。
すでに Cloud Composer 環境を設定している場合は、対象の環境で Airflow DAG を実行して、DPMS メタデータのエクスポートとインポートをオーケストレートできます(図 2 を参照)。この Airflow DAG の使用は、前述の Cloud Run メソッドの代替手段です。
目標
- Hive データと Hive Metastore バックアップ用のデュアルリージョン ストレージを設定します。
- Dataproc Metastore と Dataproc クラスタをリージョン A と B にデプロイします。
- デプロイメントをリージョン B にフェイルオーバーします。
- デプロイをリージョン A にフェイルバックします。
- Hive メタストアの自動バックアップを作成します。
- Cloud Run を使用して、メタデータのエクスポートとインポートをオーケストレートします。
- Cloud Composer を使用してメタデータのエクスポートとインポートをオーケストレートします。
費用
このドキュメントでは、Google Cloud の次の課金対象のコンポーネントを使用します。
料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。
始める前に
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
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 Dataproc, and Dataproc Metastore APIs.
-
Create a service account:
-
In the Google Cloud console, go to the Create service account page.
Go to Create service account - Select your project.
-
In the Service account name field, enter a name. The Google Cloud console fills in the Service account ID field based on this name.
In the Service account description field, enter a description. For example,
Service account for quickstart
. - Click Create and continue.
-
Grant the Project > Owner role to the service account.
To grant the role, find the Select a role list, then select Project > Owner.
- Click Continue.
-
Click Done to finish creating the service account.
Do not close your browser window. You will use it in the next step.
-
-
Create a service account key:
- In the Google Cloud console, click the email address for the service account that you created.
- Click Keys.
- Click Add key, and then click Create new key.
- Click Create. A JSON key file is downloaded to your computer.
- Click Close.
-
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 Dataproc, and Dataproc Metastore APIs.
-
Create a service account:
-
In the Google Cloud console, go to the Create service account page.
Go to Create service account - Select your project.
-
In the Service account name field, enter a name. The Google Cloud console fills in the Service account ID field based on this name.
In the Service account description field, enter a description. For example,
Service account for quickstart
. - Click Create and continue.
-
Grant the Project > Owner role to the service account.
To grant the role, find the Select a role list, then select Project > Owner.
- Click Continue.
-
Click Done to finish creating the service account.
Do not close your browser window. You will use it in the next step.
-
-
Create a service account key:
- In the Google Cloud console, click the email address for the service account that you created.
- Click Keys.
- Click Add key, and then click Create new key.
- Click Create. A JSON key file is downloaded to your computer.
- Click Close.
環境を初期化する
- Cloud Shell で、Cloud Shell インスタンスを起動します。
チュートリアルの GitHub リポジトリのクローンを作成します。
git clone https://github.com/GoogleCloudPlatform/metastore-disaster-recovery.git
次の Google Cloud APIs を有効にします。
gcloud services enable dataproc.googleapis.com metastore.googleapis.com
いくつかの環境変数を設定します。
export PROJECT=$(gcloud info --format='value(config.project)') export WAREHOUSE_BUCKET=${PROJECT}-warehouse export BACKUP_BUCKET=${PROJECT}-dpms-backups export DPMS_PRIMARY_REGION=us-central1 export DPMS_STANDBY_REGION=us-east1 export DPMS_PRIMARY_INSTANCE=dpms1 export DPMS_STANDBY_INSTANCE=dpms2 export HADOOP_PRIMARY=dataproc-cluster1 export HADOOP_STANDBY=dataproc-cluster2
Hive データと Hive メタストアのバックアップ用のストレージを作成する
このセクションでは、Hive データと Hive メタストアのバックアップをホストする Cloud Storage バケットを作成します。
Hive データ ストレージを作成する
Cloud Shell で、Hive データをホストするデュアルリージョン バケットを作成します。
gcloud storage buckets create gs://${WAREHOUSE_BUCKET} --location=NAM4
Hive データバケットにサンプルデータをコピーします。
gcloud storage cp gs://retail_csv gs://${WAREHOUSE_BUCKET}/retail --recursive
メタデータ バックアップ用のストレージを作成する
Cloud Shell で、DPMS メタデータ バックアップをホストするデュアルリージョン バケットを作成します。
gcloud storage buckets create gs://${BACKUP_BUCKET} --location=NAM4
プライマリ リージョンにコンピューティング リソースをデプロイする
このセクションでは、プライマリ リージョンに DPMS インスタンスや Dataproc クラスタなどのすべてのコンピューティング リソースをデプロイします。また、Dataproc Metastore にはサンプル メタデータを入力します。
DPMS インスタンスを作成する
Cloud Shell で、DPMS インスタンスを作成します。
gcloud metastore services create ${DPMS_PRIMARY_INSTANCE} \ --location=${DPMS_PRIMARY_REGION} \ --hive-metastore-version=3.1.2
このコマンドが完了するまでに数分かかることがあります。
Hive データバケットをデフォルト ウェアハウス ディレクトリとして設定します。
gcloud metastore services update ${DPMS_PRIMARY_INSTANCE} \ --location=${DPMS_PRIMARY_REGION} \ --update-hive-metastore-configs="hive.metastore.warehouse.dir=gs://${PROJECT}- warehouse"
このコマンドが完了するまでに数分かかることがあります。
Dataproc クラスタを作成する
Cloud Shell で、Dataproc クラスタを作成し、DPMS インスタンスに接続します。
gcloud dataproc clusters create ${HADOOP_PRIMARY} \ --dataproc-metastore=projects/${PROJECT}/locations/${DPMS_PRIMARY_REGION}/services/${DPMS_PRIMARY_INSTANCE} \ --region=${DPMS_PRIMARY_REGION} \ --image-version=2.0
クラスタ イメージをバージョン 2.0 として指定します。これは 2021 年 6 月時点で入手可能な最新バージョンです。DPMS をサポートする最初のバージョンでもあります。
メタストアにデータを入力する
Cloud Shell で、このチュートリアルのリポジトリに用意されているサンプル
retail.hql
を Hive データバケットの名前で更新します。sed -i -- 's/${WAREHOUSE_BUCKET}/'"$WAREHOUSE_BUCKET"'/g' retail.hql
retail.hql
ファイル内のクエリを実行して、メタストア内にテーブル定義を作成します。gcloud dataproc jobs submit hive \ --cluster=${HADOOP_PRIMARY} \ --region=${DPMS_PRIMARY_REGION} \ --file=retail.hql
テーブル定義が正しく作成されていることを確認します。
gcloud dataproc jobs submit hive \ --cluster=${HADOOP_PRIMARY} \ --region=${DPMS_PRIMARY_REGION} \ --execute=" desc departments; desc categories; desc products; desc order_items; desc orders; desc customers; select count(*) as num_departments from departments; select count(*) as num_categories from categories; select count(*) as num_products from products; select count(*) as num_order_items from order_items; select count(*) as num_orders from orders; select count(*) as num_customers from customers; "
出力は次のようになります。
+------------------+------------+----------+ | col_name | data_type | comment | +------------------+------------+----------+ | department_id | int | | | department_name | string | | +------------------+------------+----------+
出力には、次のように各テーブル内の要素の数も含まれています。
+----------------+ | num_customers | +----------------+ | 12435 | +----------------+
スタンバイ リージョンへのフェイルオーバー
このセクションでは、プライマリ リージョン(リージョン A)からスタンバイ リージョン(リージョン B)にフェイルオーバーする手順について説明します。
Cloud Shell で、プライマリ DPMS インスタンスのメタデータをバックアップ バケットにエクスポートします。
gcloud metastore services export gcs ${DPMS_PRIMARY_INSTANCE} \ --location=${DPMS_PRIMARY_REGION} \ --destination-folder=gs://${BACKUP_BUCKET}
出力は次のようになります。
metadataManagementActivity: metadataExports: ‐ databaseDumpType: MYSQL destinationGcsUri: gs://qa01-300915-dpms-backups/hive-export-2021-05-04T22:21:53.288Z endTime: '2021-05-04T22:23:35.982214Z' startTime: '2021-05-04T22:21:53.308534Z' state: SUCCEEDED
destinationGcsUri
属性の値をメモします。この属性には、作成したバックアップが保存されます。スタンバイ リージョンに新しい DPMS インスタンスを作成します。
gcloud metastore services create ${DPMS_STANDBY_INSTANCE} \ --location=${DPMS_STANDBY_REGION} \ --hive-metastore-version=3.1.2
Hive データバケットをデフォルト ウェアハウス ディレクトリとして設定します。
gcloud metastore services update ${DPMS_STANDBY_INSTANCE} \ --location=${DPMS_STANDBY_REGION} \ --update-hive-metastore-configs="hive.metastore.warehouse.dir=gs://${PROJECT}-warehouse"
最新のメタデータ バックアップのパスを取得します。
IMPORT_DIR=`gcloud storage ls gs://${BACKUP_BUCKET} | sort -k 1 | tail -1` IMPORT_SQL="${IMPORT_DIR}hive.sql" echo ${IMPORT_SQL}
バックアップしたメタデータを新しい Dataproc Metastore インスタンスにインポートします。
gcloud metastore services import gcs ${DPMS_STANDBY_INSTANCE} \ --location=${DPMS_STANDBY_REGION} \ --dump-type=mysql \ --database-dump=${IMPORT_SQL} \ --import-id=import-$(date +"%Y-%m-%d-%H-%M-%S")
スタンバイ リージョン(リージョン B)に Dataproc クラスタを作成します。
gcloud dataproc clusters create ${HADOOP_STANDBY} \ --dataproc-metastore=projects/${PROJECT}/locations/${DPMS_STANDBY_REGION}/services/${DPMS_STANDBY_INSTANCE} \ --region=${DPMS_STANDBY_REGION} \ --image-version=2.0
メタデータが正しくインポートされたことを確認します。
gcloud dataproc jobs submit hive \ --cluster ${HADOOP_STANDBY} \ --region ${DPMS_STANDBY_REGION} \ --execute "select count(*) as num_orders from orders;"
このチュートリアルでは
num_orders
の出力が最も重要です。次のようになります。+-------------+ | num_orders | +-------------+ | 68883 | +-------------+
プライマリ Dataproc Metastore は新しいスタンバイ メタストアになり、スタンバイ Dataproc Metastore は新しいプライマリ メタストアになりました。
これらの新しいロールに基づいて環境変数を更新します。
export DPMS_PRIMARY_REGION=us-east1 export DPMS_STANDBY_REGION=us-central1] export DPMS_PRIMARY_INSTANCE=dpms2 export DPMS_STANDBY_INSTANCE=dpms1 export HADOOP_PRIMARY=dataproc-cluster2 export HADOOP_STANDBY=dataproc-cluster1
リージョン B の新しいプライマリ Dataproc Metastore への書き込みが可能であることを確認します。
gcloud dataproc jobs submit hive \ --cluster ${DPMS_PRIMARY_INSTANCE} \ --region ${DPMS_PRIMARY_REGION} \ --execute "create view completed_orders as select * from orders where order_status = 'COMPLETE';" gcloud dataproc jobs submit hive \ --cluster ${HADOOP_PRIMARY} \ --region ${DPMS_PRIMARY_REGION} \ --execute "select * from completed_orders limit 5;"
出力結果は次のとおりです。
+----------------------------+------------------------------+-------------------------------------+--------------------------------+ | completed_orders.order_id | completed_orders.order_date | completed_orders.order_customer_id | completed_orders.order_status | +----------------------------+------------------------------+-------------------------------------+--------------------------------+ | 3 | 2013-07-25 00:00:00.0 | 12111 | COMPLETE | | 5 | 2013-07-25 00:00:00.0 | 11318 | COMPLETE | | 6 | 2013-07-25 00:00:00.0 | 7130 | COMPLETE | | 7 | 2013-07-25 00:00:00.0 | 4530 | COMPLETE | | 15 | 2013-07-25 00:00:00.0 | 2568 | COMPLETE | +----------------------------+------------------------------+-------------------------------------+--------------------------------+
これで、フェイルオーバーが完了しました。次に、Hadoop クライアント構成ファイルを更新して、クライアント アプリケーションをリージョン B の新しいプライマリ Dataproc クラスタにリダイレクトします。
元のリージョンへのフェイルバック
このセクションでは、元のリージョン(リージョン A)にフェイルバックする手順を説明します。
Cloud Shell で、メタデータを DPMS インスタンスからエクスポートします。
gcloud metastore services export gcs ${DPMS_PRIMARY_INSTANCE} \ --location=${DPMS_PRIMARY_REGION} \ --destination-folder=gs://${BACKUP_BUCKET}
最新のメタデータ バックアップのパスを取得します。
IMPORT_DIR=`gcloud storage ls gs://${BACKUP_BUCKET} | sort -k 1 | tail -1` IMPORT_SQL="${IMPORT_DIR}hive.sql" echo ${IMPORT_SQL}
メタデータを元のリージョン(リージョン A)のスタンバイ DPMS インスタンスにインポートします。
gcloud metastore services import gcs ${DPMS_STANDBY_INSTANCE} \ --location=${DPMS_STANDBY_REGION} \ --dump-type=mysql \ --database-dump=${IMPORT_SQL} \ --import-id=import-$(date +"%Y-%m-%d-%H-%M-%S")
メタデータが正しくインポートされたことを確認します。
gcloud dataproc jobs submit hive \ --cluster ${HADOOP_STANDBY} \ --region ${DPMS_STANDBY_REGION} \ --execute "select * from completed_orders limit 5;"
次のような出力が表示されます。
+----------------------------+------------------------------+-------------------------------------+--------------------------------+ | completed_orders.order_id | completed_orders.order_date | completed_orders.order_customer_id | completed_orders.order_status | +----------------------------+------------------------------+-------------------------------------+--------------------------------+ | 3 | 2013-07-25 00:00:00.0 | 12111 | COMPLETE | | 5 | 2013-07-25 00:00:00.0 | 11318 | COMPLETE | | 6 | 2013-07-25 00:00:00.0 | 7130 | COMPLETE | | 7 | 2013-07-25 00:00:00.0 | 4530 | COMPLETE | | 15 | 2013-07-25 00:00:00.0 | 2568 | COMPLETE | +----------------------------+------------------------------+-------------------------------------+--------------------------------+
プライマリ Dataproc Metastore とスタンバイ Dataproc Metastore のロールが再度入れ替えられました。
環境変数をこれらの新しいロールに更新します。
export DPMS_PRIMARY_REGION=us-central1 export DPMS_STANDBY_REGION=us-east1 export DPMS_PRIMARY_INSTANCE=dpms1 export DPMS_STANDBY_INSTANCE=dpms12 export HADOOP_PRIMARY=dataproc-cluster1 export HADOOP_STANDBY=dataproc-cluster2
これでフェイルバックが完了しました。次に、Hadoop クライアント構成ファイルを更新して、クライアント アプリケーションをリージョン A の新しいプライマリ Dataproc クラスタにリダイレクトします。
メタデータの自動バックアップの作成
このセクションでは、メタデータ バックアップのエクスポートとインポートを自動化する 2 つの異なる方法について説明します。最初の方法のオプション 1: Cloud Run と Cloud Scheduler では、Cloud Run と Cloud Scheduler を使用します。2 つ目の方法、オプション 2: Cloud Composer では Cloud Composer を使用します。どちらの例でも、エクスポート ジョブはリージョン A のプライマリ DPMS からメタデータのバックアップを作成します。インポート ジョブは、リージョン B のスタンバイ DPMS をバックアップから入力します。
既存の Cloud Composer クラスタがある場合は、オプション 2: Cloud Composer を検討する必要があります(クラスタに十分なコンピューティング能力がある場合)。それ以外の場合は、オプション 1 の Cloud Run と Cloud Scheduler に進みます。このオプションでは従量課金制の料金モデルが適用されるため、永続的なコンピューティング リソースの使用を必要とする Cloud Composer よりも経済的です。
オプション 1: Cloud Run と Cloud Scheduler
このセクションでは、Cloud Run と Cloud Scheduler を使用して DPMS メタデータのインポートを自動的にエクスポートする方法について説明します。
Cloud Run サービス
このセクションでは、メタデータのエクスポート ジョブとインポート ジョブを実行する 2 つの Cloud Run サービスをビルドする方法について説明します。
Cloud Shell で、Cloud Run、Cloud Scheduler、Cloud Build、App Engine の各 API を有効にします。
gcloud services enable run.googleapis.com cloudscheduler.googleapis.com cloudbuild.googleapis.com appengine.googleapis.com
Cloud Scheduler サービスは App Engine を必要とするため、App Engine API を有効にします。
用意されている Dockerfile で Docker イメージをビルドします。
cd metastore-disaster-recovery gcloud builds submit --tag gcr.io/$PROJECT/dpms_dr
コンテナ イメージをプライマリ リージョン(リージョン A)の Cloud Run サービスにデプロイします。このデプロイにより、プライマリ メタストアからメタデータ バックアップが作成されます。
gcloud run deploy dpms-export \ --image gcr.io/${PROJECT}/dpms_dr \ --region ${DPMS_PRIMARY_REGION} \ --platform managed \ --update-env-vars DPMS_STANDBY_REGION=${DPMS_STANDBY_REGION},BACKUP_BUCKET=${BACKUP_BUCKET},DPMS_STANDBY_INSTANCE=${DPMS_STANDBY_INSTANCE},DPMS_PRIMARY_INSTANCE=${DPMS_PRIMARY_INSTANCE},DPMS_PRIMARY_REGION=${DPMS_PRIMARY_REGION} \ --allow-unauthenticated \ --timeout=10m
デフォルトでは、Cloud Run サービス リクエストは 5 分後にタイムアウトします。すべてのリクエストを正常に完了するのに十分な時間を確保するため、上記のコードサンプルでは、タイムアウト値を 10 分以上に延長しています。
Cloud Run サービスのデプロイ URL を取得します。
EXPORT_RUN_URL=$(gcloud run services describe dpms-export --platform managed --region ${DPMS_PRIMARY_REGION} --format ` "value(status.address.url)") echo ${EXPORT_RUN_URL}
スタンバイ リージョン(リージョン B)に 2 番目の Cloud Run サービスを作成します。このサービスでは、メタデータ バックアップを
BACKUP_BUCKET
からスタンバイ メタストアにインポートします。gcloud run deploy dpms-import \ --image gcr.io/${PROJECT}/dpms_dr \ --region ${DPMS_STANDBY_REGION} \ --platform managed \ --update-env-vars DPMS_STANDBY_REGION=${DPMS_STANDBY_REGION},BACKUP_BUCKET=${BACKUP_BUCKET},DPMS_STANDBY_INSTANCE=${DPMS_STANDBY_INSTANCE} \ --allow-unauthenticated \ --timeout=10m
2 番目の Cloud Run サービスのデプロイ URL を取得します。
IMPORT_RUN_URL=$(gcloud run services describe dpms-import --platform managed --region ${REGION_B} --format "value(status.address.url)") echo ${IMPORT_RUN_URL}
ジョブのスケジュール設定
このセクションでは、Cloud Scheduler を使用して 2 つの Cloud Run サービスをトリガーする方法を示します。
Cloud Shell で、Cloud Scheduler に必要な次の App Engine アプリケーションを作成します。
gcloud app create --region=${REGION_A}
プライマリ メタストアからのメタデータ エクスポートをスケジュール設定する Cloud Scheduler ジョブを作成します。
gcloud scheduler jobs create http dpms-export \ --schedule "*/15 * * * *" \ --http-method=post \ --uri=${EXPORT_RUN_URL}/export\
Cloud Scheduler のジョブは、Cloud Run サービスに対して 15 分ごとに http
リクエストを行います。Cloud Run サービスは、エクスポート関数とインポート関数の両方を備えたコンテナ化された Flask アプリケーションを実行します。エクスポート関数がトリガーされると、gcloud metastore services export
コマンドを使用してメタデータを Cloud Storage にエクスポートします。
一般に、Hadoop ジョブが Hive メタストアに頻繁に書き込みを行う場合は、メタストアを高頻度でバックアップすることをおすすめします。適切なバックアップ スケジュールは 15 分から 60 分に 1 回の範囲です。
Cloud Run サービスのテスト実行をトリガーします。
gcloud scheduler jobs run dpms-export
Cloud Scheduler が DPMS エクスポート オペレーションを正しくトリガーしたことを確認します。
gcloud metastore operations list --location ${REGION_A}
出力は次のようになります。
OPERATION_NAME LOCATION TYPE TARGET DONE CREATE_TIME DURATION ... operation-a520936204508-5v23bx4y23f60-920f0a0f-9c2b56b5 us-central1 update dpms1 True 2021-05-13T20:05:04 2M23S
DONE
の値がFalse
の場合、エクスポートはまだ進行中です。オペレーションが完了したことを確認するには、値がTrue
になるまでgcloud metastore operations list --location ${REGION_A}
コマンドを再実行します。gcloud metastore operations
コマンドの詳細については、リファレンス ドキュメントをご覧ください。(省略可)スタンバイ メタストアへのインポートをスケジュール設定する Cloud Scheduler ジョブを作成します。
gcloud scheduler jobs create http dpms-import \ --schedule "*/15 * * * *" \ --http-method=post \ --uri=${IMPORT_RUN_URL}/import
このステップは、目標復旧時間(RTO)の要件によって異なります。
ホット スタンバイでフェイルオーバー時間を最小限に抑える場合は、このインポート ジョブをスケジュールする必要があります。15 分ごとにスタンバイ DPMS を更新します。
コールド スタンバイだけで RTO のニーズに対応できる場合は、この手順をスキップして、スタンバイ DPMS と Dataproc クラスタも削除して、全体の毎月の請求額をさらに削減できます。スタンバイ リージョン(リージョン B)にフェイルオーバーする際に、スタンバイ DPMS と Dataproc クラスタをプロビジョニングし、インポート ジョブも実行します。バックアップ ファイルはデュアルリージョン バケットに保存されているため、プライマリ リージョン(リージョン A)がダウンしてもアクセスできます。
フェイルオーバーを処理する
リージョン B にフェイルオーバーしたら、次の手順に沿って、障害復旧要件を維持して、発生する可能性があるリージョン B の障害からインフラストラクチャを保護する必要があります。
- 既存の Cloud Scheduler ジョブを一時停止します。
- プライマリの DPMS リージョンをリージョン B(
us-east1
)に更新します。 - スタンバイの DPMS リージョンをリージョン A(
us-central1
)に更新します。 - DPMS プライマリ インスタンスを
dpms2
に更新します。 - DPMS スタンバイ インスタンスを
dpms1
に更新します。 - 更新された変数に基づいて Cloud Run サービスを再デプロイします。
- 新しい Cloud Run サービスを参照する新しい Cloud Scheduler ジョブを作成します。
上に示したリストで必要な手順では、前のセクションの多くのステップを、微調整(リージョン名を入れ替えるなど)して繰り返しています。オプション 1 の情報(Cloud Run と Cloud Scheduler)を使用して、この必須の作業を行います。
オプション 2: Cloud Composer
このセクションでは、Cloud Composer を使用して、単一の Airflow 有向非巡回グラフ(DAG)内でエクスポート ジョブとインポート ジョブを実行する方法について説明します。
Cloud Shell で、Cloud Composer API を有効にします。
gcloud services enable composer.googleapis.com
Cloud Composer 環境を作成します。
export COMPOSER_ENV=comp-env gcloud beta composer environments create ${COMPOSER_ENV} \ --location ${DPMS_PRIMARY_REGION} \ --image-version composer-1.17.0-preview.1-airflow-2.0.1 \ --python-version 3
以下の環境変数を使用して Cloud Composer 環境を構成します。
gcloud composer environments update ${COMPOSER_ENV} \ --location ${DPMS_PRIMARY_REGION} \ --update-env-variables=DPMS_PRIMARY_REGION=${DPMS_PRIMARY_REGION},DPMS_STANDBY_REGION=${DPMS_STANDBY_REGION},BACKUP_BUCKET=${BACKUP_BUCKET},DPMS_PRIMARY_INSTANCE=${DPMS_PRIMARY_INSTANCE},DPMS_STANDBY_INSTANCE=${DPMS_STANDBY_INSTANCE}
DAG ファイルを Composer 環境にアップロードします。
gcloud composer environments storage dags import \ --environment ${COMPOSER_ENV} \ --location ${DPMS_PRIMARY_REGION} \ --source dpms_dag.py
Airflow URL を取得します。
gcloud composer environments describe ${COMPOSER_ENV} \ --location ${DPMS_PRIMARY_REGION} \ --format "value(config.airflowUri)"
ブラウザで、前のコマンドで返された URL を開きます。
dpms_dag
という新しい DAG エントリが表示されます。1 回の実行内で、DAG はエクスポートを実行し、続いてインポートを実行します。DAG は、スタンバイ DPMS が常時稼働していることを前提としています。ホット スタンバイは必要なく、エクスポート タスクのみを実行する場合は、コード(find_backup, wait_for_ready_status, current_ts
、dpms_import)
)のすべてのインポート関連のタスクをコメントアウトします。矢印アイコンをクリックして、DAG をトリガーしてテスト実行を行います。
実行中の DAG の [Graph View] をクリックし、各タスクのステータスを確認します。
DAG を確認したら、Airflow で DAG を定期的に実行します。スケジュールは 30 分間隔に設定されますが、タイミング要件を満たすようにコードの
schedule_interval
パラメータを変更することで調整できます。
フェイルオーバーを処理する
リージョン B にフェイルオーバーしたら、次の手順に沿って、障害復旧要件を維持して、発生する可能性があるリージョン B の障害からインフラストラクチャを保護する必要があります。
- プライマリの DPMS リージョンをリージョン B(
us-east1
)に更新します。 - スタンバイの DPMS リージョンをリージョン A(
us-central1
)に更新します。 - DPMS プライマリ インスタンスを
dpms2
に更新します。 - DPMS スタンバイ インスタンスを
dpms1
に更新します。 - リージョン B(
us-east1
)に新しい Cloud Composer 環境を作成します。 - 更新された環境変数を使用して Cloud Composer 環境を構成します。
- 新しい Cloud Composer 環境に以前と同じ
dpms_dag
Airflow DAG をインポートします。
上に示したリストで必要な手順では、前のセクションの多くのステップを、微調整(リージョン名を入れ替えるなど)して繰り返しています。オプション 2: Cloud Composer の情報を使用して、必要な作業を完了します。
クリーンアップ
このチュートリアルで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを維持して個々のリソースを削除します。
- 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.
次のステップ
- Dataproc Metastore インスタンスをモニタリングする方法を確認する
- Data Catalog を使用して Hive メタストアを同期する方法を理解する
- Cloud Run サービスの開発の詳細を確認する
- Cloud アーキテクチャ センターで、リファレンス アーキテクチャ、図、ベスト プラクティスを確認する。