高可用性の仕様を構成する
高可用性を構成するには、DBCluster 仕様で次の情報を入力します。
DBCluster:
metadata:
...
spec:
...
readOnlyPort: READ_ONLY_PORT
availability:
numberOfStandbys: NUMBER_OF_STANDBYS
enableStandbyAsReadReplica: true
enableAutoFailover: true
enableAutoHeal: true
replayReplicationSlotsOnStandbys: true
healthcheckPeriodSeconds: HEALTHCHECK_PERIOD
autoFailoverTriggerThreshold: AUTOFAILOVER_TRIGGER_THRESHOLD
autoHealTriggerThreshold: AUTOHEAL_TRIGGER_THRESHOLD
次の変数を置き換えます。
NUMBER_OF_STANDBYS: 設定するスタンバイ ノードの数。この値を0に設定すると、高可用性が無効になります。最大値は5です。必要なスタンバイ ノードの数がわからない場合は、高復元力のために2から始めます。(省略可)
READ_ONLY_PORT: スタンバイ読み取り専用エンドポイントに使用されるロードバランサまたは仮想 IP アドレスのポート。デフォルト値は5433(プライマリ ポート + 1)です。(省略可)
HEALTHCHECK_PERIOD: 各ヘルスチェック間の待機時間(秒数)。デフォルト値は30です。最小値は1です。最大値は86400(1 日)です。(省略可)
AUTOFAILOVER_TRIGGER_THRESHOLD: フェイルオーバーが発生するまでにヘルスチェックが失敗する回数。デフォルト値は3です。最小値は0ですが、値が0に設定されている場合、AlloyDB Omni はデフォルト値を使用します。ヘルスチェックが
AUTOFAILOVER_TRIGGER_THRESHOLD回失敗した場合、またはHEALTHCHECK_PERIOD * AUTOFAILOVER_TRIGGER_THRESHOLD秒間(デフォルトでは 90 秒間)失敗した場合、自動フェイルオーバーが発生します。(省略可)
AUTOHEAL_TRIGGER_THRESHOLD: 自動修復が開始されるまでにヘルスチェックが失敗する回数。デフォルト値は5です。最小値は0ですが、値が0に設定されている場合、AlloyDB Omni はデフォルト値を使用します。ヘルスチェックが
AUTOHEAL_TRIGGER_THRESHOLD回失敗するか、HEALTHCHECK_PERIOD * AUTOHEAL_TRIGGER_THRESHOLD秒間失敗すると、自動復旧が行われます。
読み取り専用スタンバイ エンドポイントを確認する
enableStandbyAsReadReplica: true を設定すると、ロードバランサ(HAProxy と Keepalived の仮想 IP アドレス)は、プライマリの読み取り / 書き込みエンドポイントに加えて、専用の読み取り専用エンドポイントを自動的に公開します。
HAProxy は、アクティブ スタンバイ間で次のようにトラフィックをルーティングします。
GET /isstandbyを使用して、すべてのスタンバイ ノードでヘルスチェックを実行します。leastconnロード バランシングを使用して、アクティブ スタンバイ間で読み取りクエリを分散します。- フェイルオーバー時に、新しいスタンバイ トポロジへのクライアント接続をドロップすることなく、ルーティングを自動的に更新します。
クラスタ エンドポイントを確認するには、次のいずれかのコマンドを実行します。
alloydbctl
alloydbctl get -d "DEPLOYMENT_SPEC" -t DBCluster -n DBCLUSTER_NAME次の変数を置き換えます。
DEPLOYMENT_SPEC: AlloyDB Omni コンポーネントをインストールするで作成したデプロイ仕様のパス。DBCLUSTER_NAME: クラスタを作成するで定義したデータベース クラスタの名前。
Ansible
google.alloydbomni_orchestrator.statusロールの Ansible Playbook を作成します。たとえば、status.yamlは以下のようになります。- name: STATUS_PLAYBOOK_NAME hosts: localhost vars: ansible_user: ANSIBLE_USER ansible_ssh_private_key_file: ANSIBLE_SSH_PRIVATE_KEY_FILE roles: - role: google.alloydbomni_orchestrator.status次の変数を置き換えます。
STATUS_PLAYBOOK_NAME: Ansible プレイブックの名前。例:My cluster statusANSIBLE_USER: Ansible が AlloyDB Omni ノードにログインするために使用する OS ユーザー。ANSIBLE_SSH_PRIVATE_KEY_FILE: Ansible が SSH を使用して AlloyDB Omni ノードに接続するために使用する秘密鍵。
ハンドブックを実行します。
ansible-playbook status.yaml -i "DEPLOYMENT_SPEC" -e resource_type=DBCluster \ -e resource_name=DBCLUSTER_NAME次の変数を置き換えます。
DEPLOYMENT_SPEC: AlloyDB Omni コンポーネントをインストールするで作成したデプロイ仕様のパス。DBCLUSTER_NAME: クラスタを作成するで定義したデータベース クラスタの名前。
エンドポイントは status.primary.endpoints の下に報告されます。
- Read-Write: VIRTUAL_IP:5432
- Read-Only: VIRTUAL_IP:5433
DBCluster の仕様を適用する
構成した DBCluster 仕様を適用するには、次のいずれかのコマンドを実行します。
alloydbctl
alloydbctl apply -d "DEPLOYMENT_SPEC" -r "DBCLUSTER_SPECIFICATION"次の変数を置き換えます。
DEPLOYMENT_SPEC: AlloyDB Omni コンポーネントをインストールするで作成したデプロイ仕様のパス。DBCLUSTER_SPECIFICATION: クラスタを作成するで作成したDBCluster仕様のパス。
Ansible
ansible-playbook DBCLUSTER_PLAYBOOK -i "DEPLOYMENT_SPEC" \
-e resource_spec="DBCLUSTER_SPECIFICATION"次の変数を置き換えます。
RESTORE_PLAYBOOK:DBClusterCRD 用に作成したプレイブックのパス。DEPLOYMENT_SPEC: AlloyDB Omni コンポーネントをインストールするで作成したデプロイ仕様のパス。DBCLUSTER_SPECIFICATION: クラスタを作成するで作成したDBCluster仕様のパス。
スタンバイ インスタンスへのスイッチオーバー
スイッチオーバーは、高可用性設定のテストや、プライマリ レプリカとスタンバイ レプリカの切り替えが必要な計画メンテナンス アクティビティを行う必要がある場合に行うことができます。スイッチオーバーが発生すると、レプリケーションの方向とプライマリとスタンバイのロールが逆になります。
切り替えでは、次のアクションが実行されます。
AlloyDB Omni オーケストレーターがプライマリをオフラインにします。
AlloyDB Omni オーケストレーターがスタンバイを新しいプライマリにプロモートします。
AlloyDB Omni オーケストレーターがプライマリをスタンバイに変換します。
AlloyDB Omni が新しく変換されたスタンバイを起動します。
切り替えを行う
スイッチオーバーを実行する手順は次のとおりです。
プライマリ インスタンスとスタンバイ インスタンスが正常であることを確認します。
高可用性
status.phaseがReadyであることを確認します。alloydbctlalloydbctl get -d "DEPLOYMENT_SPEC" -t DBCluster -n DBCLUSTER_SPECIFICATION -o yaml次の変数を置き換えます。
DEPLOYMENT_SPEC: AlloyDB Omni コンポーネントをインストールするで作成したデプロイ仕様のパス。DBCLUSTER_SPECIFICATION: クラスタの作成で定義したDBCluster仕様の名前。
Ansible
ansible-playbook status.yaml -i DEPLOYMENT_SPEC -e resource_type=DBCluster \ -e resource_name=DBCLUSTER_SPECIFICATION次の変数を置き換えます。
DEPLOYMENT_SPEC: AlloyDB Omni コンポーネントをインストールするで作成したデプロイ仕様のパス。DBCLUSTER_SPECIFICATION: クラスタの作成で定義したDBCluster仕様の名前。
次の形式で
Switchover仕様を作成します。Switchover: metadata: name: SWITCHOVER_NAME spec: dbClusterRef: DBCLUSTER_NAME newPrimary: NEW_PRIMARY_NAME次の変数を置き換えます。
SWITCHOVER_NAME: このSwitchover仕様の名前。例:my-switchover-1。この名前は、スイッチオーバーが実行されるたびに一意である必要があります。DBCLUSTER_NAME: クラスタを作成するで定義したデータベース クラスタの名前。(省略可)
NEW_PRIMARY_NAME: 新しいプライマリになるスタンバイ インスタンスです。インスタンス名をホストにマッピングするには、参照されるDBClusterのステータスのinstanceListフィールドをご覧ください。
Ansible を使用している場合は、
Switchover仕様のプレイブックを作成します。- name: SWITCHOVER_PLAYBOOK_NAME hosts: localhost vars: ansible_user: ANSIBLE_USER ansible_ssh_private_key_file: ANSIBLE_SSH_PRIVATE_KEY_FILE roles: - role: google.alloydbomni_orchestrator.switchover次の変数を置き換えます。
SWITCHOVER_PLAYBOOK_NAME: Ansible プレイブックの名前。例:My SwitchoverANSIBLE_USER: Ansible が AlloyDB Omni ノードにログインするために使用する OS ユーザー。ANSIBLE_SSH_PRIVATE_KEY_FILE: Ansible が SSH を使用して AlloyDB Omni ノードに接続するために使用する秘密鍵。
Switchover仕様を適用します。alloydbctlalloydbctl apply -d "DEPLOYMENT_SPEC" -r "SWITCHOVER_SPECIFICATION"次の変数を置き換えます。
DEPLOYMENT_SPEC: AlloyDB Omni コンポーネントをインストールするで作成したデプロイ仕様のパス。SWITCHOVER_SPECIFICATION: 手順 3 で作成したSwitchover仕様のパス。
Ansible
ansible-playbook SWITCHOVER_PLAYBOOK -i "DEPLOYMENT_SPEC" \ -e resource_spec="SWITCHOVER_SPECIFICATION"次の変数を置き換えます。
SWITCHOVER_PLAYBOOK: 手順 4 でSwitchoverCRD 用に作成したプレイブックのパス。DEPLOYMENT_SPEC: AlloyDB Omni コンポーネントをインストールするで作成したデプロイ仕様のパス。SWITCHOVER_SPECIFICATION: 手順 3 で作成したSwitchover仕様のパス。
高可用性用のロードバランサ
ロードバランサ(HAProxy)は、ノードを Keepalived と仮想 IP とペア設定することで、高可用性を実現します。Keepalived は、Virtual Router Redundancy Protocol(VRRP)を使用してフローティング仮想 IP を制御します。データベース クライアント アプリケーションは、データベース ノードの IP アドレスではなく、この仮想 IP に接続します。
専用のロードバランサが使用されていない構成では、Keepalived はデータベース ノードに直接インストールされます。このシナリオでは、仮想 IP を現在のプライマリ ノードに動的に割り当てることで高可用性が実現され、プライマリが使用できなくなった場合でもシームレスなフェイルオーバーが保証されます。
安定した選出を確立するために、Keepalived はデータベース クラスタ ノードに VRRP 優先度を割り当てます。最初のロードバランサ ノードは、Keepalived の優先度が高いプライマリ ロール(110 など)を想定しています。後続のノードは、優先度の低いセカンダリとして機能します(例: 100)。
仮想 IP が健全なノードを指すように、Keepalived は 2 秒ごとに継続的なヘルスチェックを実行します。これにより、systemd HAProxy プロセスの状態が検証されます。プライマリの HAProxy サービスが失敗すると、Keepalived は仮想 IP を正常なセカンダリ ノードに移行します。
データベース ノードのメンバーシップが変更されると、HAProxy と Keepalived は新しいアクティブ データベース ノードを自動的に指します。基盤となるルーティング構成が、ライブ クライアント接続をドロップせずに更新されます。
ロードバランサを構成する
ロードバランサ ノードの仮想 IP を構成するには、DBCluster 仕様の primarySpec フィールドに次の dbLoadBalancerOptions フィールドを追加します。
DBCluster:
spec:
primarySpec:
...
dbLoadBalancerOptions:
onprem:
loadBalancerIP: "VIRTUAL_IP"
loadBalancerType: "internal"
loadBalancerInterface: "VIRTUAL_IP_INTERFACE"
次の変数を置き換えます。
VIRTUAL_IP: フローティング仮想 IP に使用される静的 IP アドレス。データベース クライアント アプリケーションは、ここで定義された IP アドレスを使用します。Keepalived がグラティアス ARP を正常にブロードキャストできるようにするには、この IP アドレスが使用可能である必要があります。ループバックはできません。オンプレミスの場合は、プライマリ ノード インターフェースと同じサブネットに属している必要があります。VIRTUAL_IP_INTERFACE:VIRTUAL_IPが構成されているネットワーク インターフェース。デフォルト値はeth0です。