grasys blog

Cloud Spannerのディザスターリカバリ方法とは?

文●shimichan/grasys 編集● ASCII

  • この記事をはてなブックマークに追加
  • 本文印刷

本記事はgrasysが提供する「grasys blog」に掲載されたSpanner のディザスターリカバリを再編集したものです。

 boom boom! Hello Cloud!

 どうも、しみちゃんでございます。

 今回はSpannerのディザスターリカバリ対応方法について、紹介をしたいと思います。

Cloud Spanner とは?

 ざっくりと説明するとリレーショナルデータベースの構造を持ちながら、非リレーショナル データベースの水平スケーリング機能を備えたフルマネージドなGoogleのデータベースサービスです。

公式ドキュメント:Cloud Spanner

バックアップについて

 実は、下記のSpannerのバックアップではリージョンをまたいで復元ができません。

gcloud spanner backups create ${instance}-${database}-${database} \
      --instance=${instance} \
      --database=${database} \
      --retention-period=${period} \
      --async

 実行結果

# gcloud spanner databases restore --async \
  --destination-instance=shimizu-us-recovery \
  --destination-database=recovery_test \
  --source-instance=shimizu \
   --source-backup=shimizu-recovery_test-20200717_173700
ERROR: (gcloud.spanner.databases.restore) INVALID_ARGUMENT: Cannot create database projects/grasys-dev/instances/shimizu-us-recovery/databases/recovery_test from backup projects/grasys-dev/instances/shimizu/backups/shimizu-recovery_test-20200717_173700 because the backup and the database are in instances with different instance configurations. Database instance instance_configuration: projects/grasys-dev/instanceConfigs/nam3, Backup instance instance_configuration: projects/grasys-dev/instanceConfigs/asia1.

 理由は同じインスタンス構成じゃないからです。

 リージョンが違うと、動作しないようです。

The new database must be in the same project as the backup and be in an instance with the same instance configuration as the backup. For example, if a backup is in an instance configured us-west3, it can be restored to any instance in the project that is also configured us-west3

引用:https://cloud.google.com/spanner/docs/backup#restore

じゃあ、どうすんねん

 リージョンをまたいでバックアップを行なうにはどうするか、というとData Flowを使用してGCSへバックアップを行ないます

ディザスターリカバリ

 では早速、バックアップを作成して、別のリージョンにSpannerインスタンスにインポートを行なってみましょう

コマンドラインから

 GCPコンソールからでも簡単にできるのですが、 自動化したいので、 gcloud コマンドで実行を試してみましょう。

 コマンドラインから実行するには、 gcloud dataflow コマンドを使用します。

 DataFlowのテンプレートを使用してみます。

参照:Cloud Spanner to Cloud Storage Avro

gcloud dataflow jobs run [JOB_NAME]
–gcs-location=‘gs://dataflow-templates/[VERSION]/Cloud_Spanner_to_GCS_Avro’
–region=[DATAFLOW_REGION]
–parameters=‘instanceId=[YOUR_INSTANCE_ID],databaseId=[YOUR_DATABASE_ID],outputDir=[YOUR_GCS_DIRECTORY]

 ほうほう。さっそく実行してみましょう

# gcloud dataflow jobs run shimizu-recovery_test-20200717_192644 \
  --gcs-location=gs://dataflow-templates/latest/Cloud_Spanner_to_GCS_Avro \
  --region=us-east1 \
  --parameters=instanceId=shimizu,databaseId=recovery_test,outputDir=gs://shimizu_recv_test/shimizu/recovery_test
createTime: '2020-07-17T10:26:47.326894Z'
currentStateTime: '1970-01-01T00:00:00Z'
id: 2020-07-17_03_26_46-12461804407310305089
location: us-east1
name: shimizu-recovery_test-20200717_192644
projectId: grasys-dev
startTime: '2020-07-17T10:26:47.326894Z'
type: JOB_TYPE_BATCH

 確認

# gcloud dataflow jobs list --region=us-east1
JOB_ID                                    NAME                                   TYPE   CREATION_TIME        STATE    REGION
2020-07-17_03_26_46-12461804407310305089  shimizu-recovery_test-20200717_192644  Batch  2020-07-17 10:26:47  Running  us-east1
2020-07-17_03_22_46-13106556587330949927  shimizu-recovery_test-20200717_192243  Batch  2020-07-17 10:22:47  Done     us-east1

 うまく動いていそうですね。

# gcloud dataflow jobs list --region=us-east1
JOB_ID                                    NAME                                   TYPE   CREATION_TIME        STATE  REGION
2020-07-17_03_26_46-12461804407310305089  shimizu-recovery_test-20200717_192644  Batch  2020-07-17 10:26:47  Done   us-east1
2020-07-17_03_22_46-13106556587330949927  shimizu-recovery_test-20200717_192243  Batch  2020-07-17 10:22:47  Done   us-east1

 では、復旧してみましょう。

 GCPコンソールから簡単にできるので、それを試してみます。

 ジョブが完了したら、成功しているかチェックして終わりです

おまけ

 ちなみに、コマンドラインから実行するには下記のテンプレートジョブを使用すると良いようです。

gcloud dataflow jobs run [JOB_NAME]
–gcs-location=‘gs://dataflow-templates/[VERSION]/GCS_Avro_to_Cloud_Spanner’
–region=[DATAFLOW_REGION]
–parameters=‘instanceId=[YOUR_INSTANCE_ID],databaseId=[YOUR_DATABASE_ID],inputDir=[YOUR_GCS_DIRECTORY]’

参照:Cloud Storage Avro to Cloud Spanner

■関連サイト

過去記事アーカイブ

2021年
03月
04月
05月
2020年
04月
05月
08月
09月
10月
11月
12月
2018年
09月
2017年
06月
2014年
07月