AlloyDB for PostgreSQLの停止・起動・再起動オペレーションを解説

記事タイトルとURLをコピーする

G-gen の佐々木です。当記事では AlloyDB for PostgreSQL の停止・起動および再起動オペレーションについて解説します。

前提知識

AlloyDB for PostgreSQL とは

AlloyDB for PostgreSQL(以下、AlloyDB) は、Google Cloud の高性能な PostgreSQL 互換のフルマネージドサービスです。

AlloyDB は Cloud SQL 同様に、リレーショナル データベースを提供するサービスですが、パフォーマンス、可用性、スケーラビリティの面で優れています。

また独自のストレージ機構により、標準の PostgreSQL と比較してオンライン分析処理(OLAP)のパフォーマンスが非常に高いという特性があります。

AlloyDB の詳細については以下の記事をご一読ください。

blog.g-gen.co.jp

AlloyDB の料金の基本

AlloyDB は従量課金制であり、以下の軸で料金が発生します。

  • コンピューティングリソース(CPU/メモリ)
  • ストレージ(バックアップ含む)
  • ネットワーク(リージョン間の egress のみ)

このうち、主にコンピューティングリソースの利用料金がインスタンスの停止・起動による影響を受けます。

インスタンスの停止・起動

停止・起動の仕様

AlloyDB クラスタのプライマリインスタンスや読み取りプールインスタンスは、停止・起動・再起動が可能です。

停止したインスタンスに対しては、コンピューティング料金が発生しません。このため、開発環境インスタンス等の料金の節約に繋がります。ただし、停止してもストレージ料金は引き続き発生します。

Activation policy

AlloyDB は、Activation policy という設定値を用いてデータベース インスタンスの状態を操作します。

Activation policy の設定値として以下の2種類があります。

設定値 説明
ALWAYS インスタンスが稼働している状態を指す。
NEVER インスタンスが停止し、データベース接続を受け入れていない状態を指す。
この状態ではコンピューティングリソース料金が発生しない。

停止・起動の影響

インスタンスの停止・起動を行うと、以下のような影響があります。

  • インスタンスを停止すると、インスタンスのコンピューティング料金が発生しない(ストレージ料金は引き続き発生)。
  • インスタンスを停止すると、自動アップデートが停止される(自動バックアップは引き続き行われる)。
  • 停止しているインスタンスを起動すると、データベースの最新のマイナーバージョンが適用される。このバージョン適用はメンテナンスの拒否期間を無視して行われる。

また、インスタンスでパブリック IP アドレスを有効化している場合、停止・起動オペレーションによってパブリック IP アドレスが変わることはありません。この場合、インスタンスの停止中も静的 IP アドレスの料金が発生します。

インスタンスのプライベート IP アドレスについても停止・起動によって変化することはありません。

読み取りプールインスタンスやセカンダリクラスタがある場合の注意点

インスタンスの停止・起動オペレーションは、AlloyDB のプライマリインスタンス読み取りプールインスタンスのどちらでも行うことができます。

プライマリインスタンスを停止する前に、必ず読み取りプールインスタンスを停止する必要があります。読み取りプールインスタンスが起動している状態でプライマリインスタンスの停止オペレーションを行うと、以下のようなエラーが発生します。

ERROR: (gcloud.alloydb.instances.update) FAILED_PRECONDITION: Invalid resource state for "projects/<プロジェクト番号>locations/asia-northeast1/clusters/<クラスタ ID>/instances/<インスタンス ID>": activation policy for primary instance can only be updated to NEVER only when all read instances are stopped, found read instance test-reader in READY state

停止とは逆に、起動オペレーションでは必ずプライマリインスタンスから起動する必要があります。プライマリインスタンスが停止している状態で読み取りプールインスタンスの起動オペレーションを行うと、以下のようなエラーが発生します。

ERROR: (gcloud.alloydb.instances.update) FAILED_PRECONDITION: Invalid resource state for "projects/<プロジェクト番号>/locations/asia-northeast1/<クラスタ ID>/test/instances/<インスタンス ID>": The parent cluster contains a PRIMARY instance "projects/<プロジェクト番号>/locations/asia-northeast1/clusters/<クラスタ ID>/instances/<インスタンス ID>", but it is not in a READY state (got state: STOPPED)

また、クラスタにセカンダリクラスタ(クロスリージョンレプリケーション クラスタ)がある場合は、プライマリインスタンスを停止することができません。停止のためにはセカンダリクラスタを昇格もしくは削除する必要があります。

セカンダリクラスタがある状態でプライマリインスタンスの停止オペレーションを行うと、以下のようなエラーが発生します。

ERROR: (gcloud.alloydb.instances.update) FAILED_PRECONDITION: Invalid resource state for "projects/<プロジェクト番号>/locations/asia-northeast1/clusters/<クラスタ ID>/instances/<インスタンス ID>": activation policy for primary instance can only be updated to NEVER only when there is no CRR enabled

なお、セカンダリクラスタのインスタンスを停止することはできません。

インスタンスの停止オペレーション

インスタンスの停止・起動オペレーションは、コンソールや gcloud CLI 等から行うことができます。

停止オペレーションは以下のコマンドで実行することができます。クラスタの更新オペレーションで Activation policy を NEVER に設定することがポイントです。

# AlloyDB インスタンスを停止する
$ gcloud alloydb instances update <停止対象インスタンスの ID> \
    --region=<クラスタのリージョン> \
    --cluster=<クラスタの ID> \
    --activation-policy=NEVER

読み取りプールインスタンスを停止する場合は、<停止対象インスタンスの ID> に読み取りプールインスタンスの ID を指定します。

インスタンスの停止時間の参考として、作成したばかりの最小サイズのインスタンスで停止に5分ほどかかりました。

インスタンスの起動オペレーション

インスタンスの起動オペレーションは以下のコマンドで実行することができます。起動の場合は Activation policy を ALWAYS に設定することがポイントです。

# AlloyDB インスタンスを起動する
$ gcloud alloydb instances update <起動対象インスタンスの ID> \
    --region=<クラスタのリージョン> \
    --cluster=<クラスタの ID> \
    --activation-policy=ALWAYS

インスタンスの起動時間の参考として、作成したばかりの最小サイズのインスタンスで起動に8分ほどかかりました。

インスタンスの再起動

再起動の仕様

インスタンスの再起動を行うと、再起動が完了して準備が整うまでインスタンスの接続がすべて中断されます。

インスタンスの再起動によるプライベート IP アドレスおよびパブリック IP アドレスの変化はありません。

セカンダリインスタンスやリードプールインスタンスの個別ノードは、停止・起動はできず、起動中のインスタンス・ノードの再起動のみが可能です。

インスタンスの再起動オペレーション

インスタンスの再起動も、コンソールや gcloud CLI 等から行うことができます。

再起動オペレーションは以下のコマンドで実行することができます。停止・起動オペレーションと異なり、専用の restart コマンドがあります。

# AlloyDB インスタンスを再起動する
$ gcloud alloydb instances restart <再起動対象インスタンスの ID> \
    --region=<クラスタのリージョン> \
    --cluster=<クラスタの ID> \
    [--async]
    

再起動中に AlloyDB Studio からクエリを試したところ、再起動中であってもクエリを実行することができました。

再起動中にクエリを実行した場合、結果が返ってくる場合もある

しかし、クエリの成功は保証されていないため、基本的には再起動であってもデータベースを使用しない時間帯に行うことが推奨されます。

インスタンスの再起動時間の参考として、作成したばかりの最小サイズのインスタンスで再起動までに13分ほどかかりました。

各オペレーションの記録

オペレーションの実行記録はコンソールから確認することができますが、停止・起動オペレーションは「インスタンスの更新」としてまとめられてしまうようです。

停止・起動オペレーションは「インスタンスの更新」にまとめられている

佐々木 駿太 (記事一覧)

G-gen最北端、北海道在住のクラウドソリューション部エンジニア

2022年6月にG-genにジョイン。Google Cloud Partner Top Engineer 2025 Fellowに選出。好きなGoogle CloudプロダクトはCloud Run。

趣味はコーヒー、小説(SF、ミステリ)、カラオケなど。