Spanner バックアップ&復元の仕様と特徴

こんにちはtsunodaです。
2021年10月、Spannerのバックアップ&復元が正式に改修されてリリースされましたのでちょっとご紹介。

spannerバックアップ&復元やってみる

この辺を参考にひとまずもろもろ作成。
gcloudでCloud Spannerを使ってみる

復元元
test-spanner001
1node
database: example-db
table: Albums,Singers

復元先
test-spanner002
1node

バックアップ取得
作成をぽち

backup作成

開始されています

backup完了

test-spanner002で取得したbackupを復元

完了

こんな感じでバックアップ&復元は可能です。

バックアップ&復元の特徴

2021年10月の改修によって以下の特徴があります。

  • 改修後はバックアップ時間が短くなっている。
  • バックアップ機能はユーザーが使用しているインスタンスとは別のインスタンスで実施されており、実際に使用しているインスタンスへの影響はほぼない。
  • バックアップは物理バックアップ的であり、2次利用するには復元する必要があり若干使い勝手が悪いが、取得が速い。
  • インポート/エクスポートは倫理バックアップ的なものであり、CSVやTXTに変換をかけているので2次利用しやすいが、取得が遅い。

という感じです。
また、使用しているspannerインスタンスではデータの整理や圧縮、健全性維持のための負荷が定期的にかかる仕様となっているようです。
バックアップ機能は別インスタンスで実施しているため使用しているインスタンスにはほぼ影響が無いものの、実際にバックアップを実施してみると確かに負荷は少しかかっていました。(CPU10~20%程度)
この辺の負荷についてはnode数を増やすことで対応可能となっております。

もう一点、復元についてですが、復元データのサイズが大きいと復元完了したにも関わらずコンソールで確認できるストレージ利用率に復元元と差異が出ることがあります。(復元先のサイズが小さい)
これは時間の経過と共に増加していき、最終的には復元元と同じサイズに追いつきます。
Spanner のストレージレイヤーは複雑になっており、直近に書き込まれたデータ等は in memory に書き込まれる可能性があります(これは Spanner の最適化のアルゴリズムの判断に依存し、必ず in memory にストアされるわけではありません)。
一方でメトリクスで表示されているデータベースのサイズは実際にストレージに書き込まれたデータからの報告となります。
なので一定時間の遅れが生じることは想定内の仕様となっています。

きちんと復元が完了したかどうかを確認する際は、対象データベースの状態を確認し、READY 状態であれば完了とするようにしましょう。

$ gcloud spanner databases list --instance test-spanner002
NAME        STATE
example-db  READY

料金について

バックアップの料金は、
単位時間あたりのバックアップで使用されるストレージの量に基づいて課金されます。
作成が完了したバックアップには、最低でも 24 時間分の料金が発生します。
バックアップを作成し、完了してから 1 分後に削除した場合でも、24 時間分の料金が請求されます。
spanner料金

[バックアップストレージ料金]
リージョン構成:$0.10(GB 単位/月)
マルチリージョン構成:$0.30(GB 単位/月)

ちなみに復元自体は無料です。
バックアップストレージについては料金がかかるので、復元後不要なら削除しても良いかと思います。

そして復元について気になる仕様が。。。
復元先のnode数は、復元元と同じnode数でなければなりません。

例えば 10node でサービス稼働しているプロジェクトで復元しようとすると、同じように 10node のインスタンスを用意する必要があります。
復元する際のnode数を見ているので、可能であれば10 → 1nodeへ変更して復元開始をしたいところですが、サービス稼働中となるとそれもできず。。。
またバックアップ時の負荷も考慮して、結構CPUを使っているサービスであればnode数を一旦増やしてバックアップ取得、node数を戻して復元開始、などといった作業をすることも考えられます。
spannerは料金が高い というイメージを持っている方もいらっしゃると思います。
バックアップ&復元について自分のプロジェクトで検討している方はこの辺の挙動、作業内容、料金を考慮する必要がありますやっほい。

まとめ

実際の作業は分かりやすく、初めて触る方もそこまで迷わず実施できる感じです。
あとは料金のことを考慮してどうやるか。
そこまでサイズが大きくなくバックアップもすぐ終われる、CPUにも余裕があるといった場合はメンテナンスに入れてその間に復元まで済ませちゃうのもありかなぁ。
spannerはGoogleも推している面白いプロダクツなので、検討している方は仕様を確認して是非使ってみては!?