RPM オーケストレーターを使用して非同期レプリケートされた読み取りプール インスタンスを作成する

ドキュメントのバージョンを選択してください。

データベース クラスタの読み取りスループットと可用性を向上させるには、非同期読み取りプール インスタンスを作成します。読み取りプール インスタンスは、データベース インスタンスの読み取り専用クローンを提供します。これにより、データベース インスタンスが使用できなくなっても、データにアクセスできます。

読み取りプール インスタンスの構成は、データベース インスタンスのマニフェスト ファイルで定義できます。読み取りプール インスタンスごとに、一意のマニフェスト ファイルを作成する必要があります。複数の読み取りプール インスタンスをデプロイできます。データベース クラスタあたりの読み取りプールノードの合計数は最大 20 個です。

各読み取りプール インスタンスは、複製するインスタンスと同じ量のストレージを占有します。

非同期レプリケートされた読み取りプール インスタンスを作成する

AlloyDB Omni 非同期レプリケートされた読み取りプール インスタンスを作成する手順は次のとおりです。

  1. データベース インスタンス マニフェストを作成して、読み取りプール インスタンスのタイプを定義します。

    DBInstance:
      metadata:
        name: READ_POOL_INSTANCE_NAME
      spec:
        instanceType: ReadPool
        nodeCount: READ_POOL_NODE_COUNT
        readPoolPort: READ_POOL_PORT
        dbcParent:
          name: DB_CLUSTER_NAME
    

    次のように置き換えます。

    • READ_POOL_INSTANCE_NAME: このリソースの名前。例: read-pool-instance-1

    • DB_CLUSTER_NAME: インスタンスが属するデータベース クラスタの名前。

    • READ_POOL_NODE_COUNT:(省略可)読み取りプール インスタンス内のノード数。これにより、インスタンスの全体的なコンピューティング容量が決まります。データベース クラスタごとに最大 20 個の読み取りプールノードを設定できます。

    • READ_POOL_PORT:(省略可)この読み取りプール インスタンスに読み取りトラフィックを転送するロードバランサ(VIP)のポート。デフォルトは 5434 です。

  2. DBInstance の仕様を適用します。

    alloydbctl

    alloydbctl apply -d "DEPLOYMENT_SPECIFICATION_PATH" -r "DBINSTANCE_SPECIFICATION"

    次の変数を置き換えます。

    Ansible

    ansible-playbook DBINSTANCE_PLAYBOOK -i "DEPLOYMENT_SPECIFICATION_PATH" \
          -e resource_spec="DBINSTANCE_SPECIFICATION"

    次の変数を置き換えます。

    • DBINSTANCE_PLAYBOOK: DBInstance 仕様用に作成したプレイブックのパス。

    • DEPLOYMENT_SPECIFICATION_PATH: AlloyDB Omni コンポーネントをインストールするで作成したデプロイ仕様のパス。

    • DBINSTANCE_SPECIFICATION: 前の手順で作成した DBInstance マニフェスト ファイルのパス。

インスタンスのステータスを確認する

読み取りプール インスタンスの可用性を確認するには、DBInstance リソースのステータスを取得します。

alloydbctl

alloydbctl get -d "DEPLOYMENT_SPECIFICATION_PATH" -t DBInstance -n "READ_POOL_INSTANCE_NAME" -o yaml

次の変数を置き換えます。

Ansible

google.alloydbomni_orchestrator.status ハンドブックを実行します。詳細については、クラスタのステータスを取得するをご覧ください。

ansible-playbook STATUS_PLAYBOOK_PATH -i "DEPLOYMENT_SPECIFICATION_PATH" \
      -e resource_type="DBInstance" -e resource_name="READ_POOL_INSTANCE_NAME"

次の変数を置き換えます。

  • STATUS_PLAYBOOK_PATH: クラスタのステータスを取得するために作成したプレイブックのパス。

  • DEPLOYMENT_SPECIFICATION_PATH: AlloyDB Omni コンポーネントをインストールするで作成したデプロイ仕様のパス。

  • READ_POOL_INSTANCE_NAME: マニフェストで指定した読み取りプール インスタンスの名前。

レスポンスの .status.conditions セクションで次の項目を確認します。

  • Available 条件のステータスが true の場合、読み取りプール インスタンスはクエリを処理できますが、データベース インスタンスからデータを複製していない可能性があります。
  • Streaming 条件のステータスが true の場合、読み取りプール インスタンスがデータベース インスタンスに接続され、変更をアクティブにストリーミングしていることを示します。

データベース インスタンスに到達できない場合、読み取りプール インスタンスはクエリの処理を継続します。この場合、アベイラビリティ ステータスは true で、ストリーミング ステータスは false になります。

読み取りプール インスタンスを設定すると、プライマリ データベース インスタンス内の行に対するすべての挿入、更新、削除が読み取りプール インスタンスで読み取り可能になります。

読み取りプール インスタンスに接続する

読み取りプール インスタンスが Available になると、ロードバランサは、トラフィックを読み取りプールノードにルーティングする専用の読み取り専用フロントエンドを自動的に構成します。

接続エンドポイントを表示するには、DBInstance ステータス出力で status.endpoints を確認します。読み取り専用エンドポイント(VIP_IP:5434 など)は、受信した読み取り専用クエリを読み取りプール内のすべての正常なノードに分散します。

読み取りプール インスタンスに接続するには、エンドポイントの IP アドレスとポートを使用して psql クライアント ツールを使用します。

psql -h VIP_IP -p READ_POOL_PORT -U postgres

次のように置き換えます。

  • VIP_IP: 読み取り専用エンドポイントの IP アドレス。
  • READ_POOL_PORT: 読み取り専用エンドポイントのポート。

このエンドポイントに対して書き込みオペレーションを実行しようとすると、読み取り専用トランザクションで挿入を実行できないことを示すエラーが発生し、オペレーションはすぐに失敗します。

読み取りプール インスタンスを管理する

RPM オーケストレーターは、クラスタのダウンタイムなしで、リードプール インスタンスの動的なスケーリングと削除をサポートしています。

読み取りプール インスタンスをスケーリングする

既存の読み取りプールにノードを追加または削除するには、DBInstance マニフェスト ファイルの nodeCount フィールドを更新します。

  1. DBInstance マニフェスト ファイルを開き、選択したノード数を反映するように nodeCount の値を変更します。

  2. 更新したマニフェストは、任意のデプロイ方法、alloydbctl apply コマンド、または Ansible プレイブックを使用して適用します。

RPM オーケストレーターは読み取りレプリカ ノードを自動的にプロビジョニングまたは削除し、ロードバランサはプール内の使用可能なノードにトラフィックを転送するように動的に更新します。

読み取りプール インスタンスを削除する

読み取りプール インスタンスを削除するには、alloydbctl delete コマンドを使用します。

alloydbctl delete -t DBInstance -n READ_POOL_INSTANCE_NAME

READ_POOL_INSTANCE_NAME は、削除する読み取りプール インスタンスの名前に置き換えます。

読み取りプール インスタンスを削除すると、オーケストレーターはリードレプリカ サービスを停止し、ノードをクリーンアップします。ロードバランサは、プロモーションのデッドロックを引き起こしたり、プライマリ インスタンスまたはスタンバイ インスタンスへのトラフィックに影響を与えたりすることなく、ルーティングを自動的に削除します。