読み取りプール インスタンスの構成は、データベース インスタンスのマニフェスト ファイルで定義できます。読み取りプール インスタンスごとに、一意のマニフェスト ファイルを作成する必要があります。複数の読み取りプール インスタンスをデプロイできます。データベース クラスタあたりの読み取りプールノードの合計数は最大 20 個です。
各読み取りプール インスタンスは、複製するインスタンスと同じ量のストレージを占有します。
非同期レプリケートされた読み取りプール インスタンスを作成する
AlloyDB Omni 非同期レプリケートされた読み取りプール インスタンスを作成する手順は次のとおりです。
データベース インスタンス マニフェストを作成して、読み取りプール インスタンスのタイプを定義します。
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-1DB_CLUSTER_NAME: インスタンスが属するデータベース クラスタの名前。READ_POOL_NODE_COUNT:(省略可)読み取りプール インスタンス内のノード数。これにより、インスタンスの全体的なコンピューティング容量が決まります。データベース クラスタごとに最大 20 個の読み取りプールノードを設定できます。READ_POOL_PORT:(省略可)この読み取りプール インスタンスに読み取りトラフィックを転送するロードバランサ(VIP)のポート。デフォルトは5434です。
DBInstanceの仕様を適用します。alloydbctlalloydbctl apply -d "DEPLOYMENT_SPECIFICATION_PATH" -r "DBINSTANCE_SPECIFICATION"次の変数を置き換えます。
DEPLOYMENT_SPECIFICATION_PATH: AlloyDB Omni コンポーネントをインストールするで作成したデプロイ仕様のパス。DBINSTANCE_SPECIFICATION: 前の手順で作成したDBInstanceマニフェスト ファイルのパス。
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次の変数を置き換えます。
DEPLOYMENT_SPECIFICATION_PATH: AlloyDB Omni コンポーネントをインストールするで作成したデプロイ仕様のパス。READ_POOL_INSTANCE_NAME: マニフェストで指定した読み取りプール インスタンスの名前。
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 フィールドを更新します。
DBInstanceマニフェスト ファイルを開き、選択したノード数を反映するようにnodeCountの値を変更します。更新したマニフェストは、任意のデプロイ方法、
alloydbctl applyコマンド、または Ansible プレイブックを使用して適用します。
RPM オーケストレーターは読み取りレプリカ ノードを自動的にプロビジョニングまたは削除し、ロードバランサはプール内の使用可能なノードにトラフィックを転送するように動的に更新します。
読み取りプール インスタンスを削除する
読み取りプール インスタンスを削除するには、alloydbctl delete コマンドを使用します。
alloydbctl delete -t DBInstance -n READ_POOL_INSTANCE_NAMEREAD_POOL_INSTANCE_NAME は、削除する読み取りプール インスタンスの名前に置き換えます。
読み取りプール インスタンスを削除すると、オーケストレーターはリードレプリカ サービスを停止し、ノードをクリーンアップします。ロードバランサは、プロモーションのデッドロックを引き起こしたり、プライマリ インスタンスまたはスタンバイ インスタンスへのトラフィックに影響を与えたりすることなく、ルーティングを自動的に削除します。