クラスタを作成する

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

AlloyDB Omni の使用を開始するには、データベース クラスタを作成します。

制限事項

次の制限が適用されます。

  • AlloyDB Omni はポート 5432 で実行されます。カスタムポートの構成はサポートされていません。

  • クラスタを作成する前に、すべてのデータベース パラメータ構成が正しいことを確認します。クラスタを作成した後は、データベース パラメータを変更できません。

始める前に

クラスタを作成する前に、次の操作を行います。

  • AlloyDB Omni オーケストレーターをインストールする

  • AlloyDB Omni コンポーネントをインストールする

  • TLS 証明書を構成する

  • オーケストレーター内でプロビジョニングされたすべてのデータベース ノードの PG_DATA_DIR に外部ボリューム(DataDisk)をマウントします。

  • Ansible の代わりに alloydbctl を使用する場合は、必要な policycoreutils-python-utils パッケージがすべての VM にインストールされていることを確認してください。このパッケージをインストールするには、次のコマンドを実行します。

    sudo dnf install policycoreutils-python-utils
  • Google Cloud 環境を使用している場合は、ENVIRONMENT_TYPEgcp に設定します。次に、root ユーザーとして gcloud auth login を実行して、gcloud CLI アカウントを認証する必要があります。また、認証済みアカウントには次の権限が必要です。

    • compute.instances.get
    • compute.instances.list
    • compute.instances.updateNetworkInterface

クラスタ仕様を準備する

クラスタを作成するには、AlloyDB Omni がクラスタの構成方法を認識している必要があります。必要な仕様を作成するには、DBCluster 形式で YAML ファイルを作成します。

Secret:
  metadata:
    name: db-pw-DBCLUSTER_NAME
  spec:
    type: Opaque
    data:
      DBCLUSTER_NAME: BASE64_PASSWORD
---
DBCluster:
  metadata:
    name: DBCLUSTER_NAME
  spec:
    databaseVersion: 18.3.0
    mode: ""
    availability:
      numberOfStandbys: NUM_STANDBY_NODES
      enableAutoFailover: true
      enableAutoHeal: true
      autoFailoverTriggerThreshold: AUTOFAILOVER_TRIGGER_THRESHOLD
      autoHealTriggerThreshold: AUTOHEAL_TRIGGER_THRESHOLD
      healthcheckPeriodSeconds: HEALTHCHECK_PERIOD
      replayReplicationSlotsOnStandbys: false
    primarySpec:
      adminUser:
        passwordRef:
          name: db-pw-DBCLUSTER_NAME
      resources:
        cpu: CPU_LIMIT
        memory: MEMORY_LIMIT
        disks:
        - name: DataDisk
          path: PG_DATA_DIR
      parameters:
        max_connections: "MAX_CONNECTIONS"
        max_wal_size: "MAX_WAL_SIZE"
      dbLoadBalancerOptions:
        DB_LOAD_BALANCER_TYPE:
          loadBalancerIP: "VIRTUAL_IP"
          loadBalancerType: "internal"
          loadBalancerInterface: "VIRTUAL_IP_INTERFACE"

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

  • DBCLUSTER_NAME: データベース クラスタの名前。例: my-dbcluster

  • BASE64_PASSWORD: postgres 管理者ユーザーに使用される base64 エンコードされたパスワード。

  • NUM_STANDBY_NODES: クラスタ内のスタンバイ ノードの数。例: 2

  • (省略可)AUTOFAILOVER_TRIGGER_THRESHOLD: フェイルオーバーが発生するまでにヘルスチェックが失敗する回数。デフォルト値は 3 です。最小値は 0 ですが、値が 0 に設定されている場合、AlloyDB Omni はデフォルト値を使用します。

    ヘルスチェックが AUTOFAILOVER_TRIGGER_THRESHOLD 回失敗した場合、またはヘルスチェックの累積時間が HEALTHCHECK_PERIOD * AUTOFAILOVER_TRIGGER_THRESHOLD 秒に達した場合、自動フェイルオーバーが発生します。

  • (省略可)AUTOHEAL_TRIGGER_THRESHOLD: 自動修復が開始されるまでにヘルスチェックが失敗する回数。デフォルト値は 3 です。最小値は 0 ですが、値が 0 に設定されている場合、AlloyDB Omni はデフォルト値を使用します。

    ヘルスチェックが AUTOHEAL_TRIGGER_THRESHOLD 回失敗した場合、またはヘルスチェックの累積期間が HEALTHCHECK_PERIOD * AUTOHEAL_TRIGGER_THRESHOLD 秒に達した場合、自動復旧が行われます。

  • (省略可)HEALTHCHECK_PERIOD: 各ヘルスチェック間の待機時間(秒数)。デフォルト値は 30 です。最小値は 1 です。最大値は 86400(1 日)です。

  • CPU_LIMIT: データベース コンテナに割り当てる CPU の数。例: 4

  • MEMORY_LIMIT: データベース コンテナに割り当てるメモリ量。例: 32Gi500Mi

  • PG_DATA_DIR: データベース データが保存されるディレクトリのホストパス。

  • (省略可)MAX_CONNECTIONS: PostgreSQL データベースへの同時接続の最大数。デフォルト値は 50 です。サポートされている最小値も 50 です。詳細については、PostgreSQL max_connections リファレンスをご覧ください。

  • (省略可)MAX_WAL_SIZE: 自動チェックポイント間にログ先行書き込み(WAL)が拡張する最大サイズ。デフォルト値は 1GB です。詳細については、PostgreSQL max_wal_size リファレンスをご覧ください。

  • (省略可)ENVIRONMENT_TYPE: クラスタが設定される環境(onprem または gcp)を決定します。

  • (省略可)VIRTUAL_IP: ロードバランサで使用される仮想 IP アドレス。dbLoadBalancerOptions を定義する場合は必須です。詳細については、高可用性を管理するをご覧ください。

  • (省略可)VIRTUAL_IP_INTERFACE: VIRTUAL_IP が構成されているネットワーク インターフェース。デフォルト値は eth0 です。

クラスタを作成する

クラスタを作成するには、環境に一致するタブを選択し、手順に沿って操作します。

Ansible

クラスタを作成するには、次の手順を完了します。

  1. データベース クラスタの仕様のプレイブックを作成します。

    - name: Create DBCluster
      hosts: localhost
      become: true
      vars:
        ansible_user: ANSIBLE_USER
        ansible_ssh_private_key_file: ANSIBLE_SSH_PRIVATE_KEY_FILE
      roles:
      - role: google.alloydbomni_orchestrator.bootstrap
    
    

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

    • ANSIBLE_USER: Ansible が AlloyDB Omni ノードにログインするために使用する OS ユーザー。

    • ANSIBLE_SSH_PRIVATE_KEY_FILE: Ansible が SSH を使用して AlloyDB Omni ノードに接続するために使用する秘密鍵。

  2. ハンドブックを実行します。

    ansible-playbook DBCLUSTER_PLAYBOOK -i "DEPLOYMENT_SPEC" \
          -e resource_spec="DBCLUSTER_SPECIFICATIONS"

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

alloydbctl

クラスタを作成するには、次のコマンドを実行します。

alloydbctl apply -d "DEPLOYMENT_SPEC" -r "DBCLUSTER_SPECIFICATIONS"

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

クラスタの削除

クラスタを削除するには、環境に一致するタブを選択し、手順に沿って操作します。

Ansible

Ansible を使用してクラスタを削除するには、次の操作を行います。

  1. teardown.yaml という名前のプレイブックを作成します。

    - name: Tear down AlloyDB Omni cluster
      hosts: localhost
      become: true
      vars:
        ansible_user: ANSIBLE_USER
        ansible_ssh_private_key_file: ANSIBLE_SSH_PRIVATE_KEY_FILE
      roles:
      - role: google.alloydbomni_orchestrator.delete
    
  2. ansible-playbook を使用してハンドブックを実行します。DBClusterresource_type として指定し、削除するクラスタの名前を resource_name として指定する必要があります。

    ansible-playbook -i "DEPLOYMENT_SPEC" teardown.yaml \
      -e `resource_type`=`DBCluster` -e `resource_name`="DBCLUSTER_NAME"

クラスタの状態の不整合(ノードにアクセスできないなど)が原因で削除プロセスが失敗した場合は、コマンドに -e force=true を追加して、クラスタの強制削除を試みることができます。これにより、オーケストレーターは、破棄プロセス中のエラーを無視し、できるだけ多くのリソースを削除しようとします。

  ansible-playbook -i "DEPLOYMENT_SPEC" teardown.yaml \
    -e resource_type=DBCluster -e resource_name="DBCLUSTER_NAME" -e force=true

alloydbctl

alloydbctl を使用してクラスタを削除するには、次のコマンドを実行します。

alloydbctl delete -d "DEPLOYMENT_SPEC" \
      --resource_type DBCluster --resource_name "DBCLUSTER_NAME"

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

付録: SELinux ポリシーの仕様

次の表に、それぞれのノードで実行されている各コンポーネント用に構成された SELinux ポリシールールとアクセス権限を示します。これらのポリシーは、SELinux Enforcing モードでホストを実行する際に必要なプロセス分離、ネットワーク ソケット バインディング、ストレージ アクセスの必須境界を定義します。

AlloyDB Omni

ソースドメイン ターゲット リソース / タイプ セキュリティ クラス 付与済みの権限 セキュリティの根拠と制約
init_t(systemd) postgresql_exec_t file getattropenreadexecute systemd サービス マネージャーが PostgreSQL バイナリを実行できるようにします。
init_t postgresql_t process transition systemd から制限付きの postgresql_t ドメインへのドメイン移行を強制します。
postgresql_t postgresql_exec_t file entrypointexecutereadmap ドメイン エントリを公式の PostgreSQL 実行可能ファイルに厳密に制限します。
postgresql_t lib_t file/dir readopengetattrmap 共有データベース ライブラリへのダイナミック リンカー アクセスを承認します。
postgresql_t postgresql_db_t dir openreadwritecreatermdirsearchgetattrsetattradd_nameremove_name データ ディレクトリとテーブルスペースのストレージ ディレクトリのライフサイクル全体を管理します。
postgresql_t postgresql_db_t file openreadwritecreateunlinklockappendgetattrsetattrmap ヒープテーブル、WAL セグメント、カタログ、インデックスの読み取り/書き込みオペレーションを承認します。
postgresql_t postgresql_var_run_t dir/sock_file openreadwritecreateunlinksearchgetattr /var/run/postgresql でランタイム PID ファイルと Unix ドメイン ソケットを管理します。
postgresql_t postgresql_port_t tcp_socket name_bind TCP ネットワーク バインディングを割り当てられた PostgreSQL ポート(デフォルトの TCP 5432)に厳密に制限します。
alloydbomni_nm_t postgresql_exec_t file executeexecute_no_transgetattropenreadmap Node Manager がヘルスプローブと制御ツール(pg_isreadypg_ctl など)を実行することを承認します。
alloydbomni_nm_t postgresql_db_t dir/file openreadwritecreateunlinkrelabeltorelabelfrom Node Manager にディレクトリを初期化して SELinux ラベルを適用する権限を付与します。

AlloyDB Omni モニター

ソースドメイン ターゲット リソース / タイプ セキュリティ クラス 付与済みの権限 セキュリティの根拠と制約
postgresql_t unreserved_port_t tcp_socket name_bind Prometheus の指標とヘルスステータスをエクスポートするために、予約されていない高いポートへのバインディングを承認します。
postgresql_t net_conf_t file openreadgetattr DNS とホスト名の解決のための /etc/resolv.conf への読み取り専用アクセス。
postgresql_t sysfs_t file/dir openreadgetattrsearch root 権限または管理権限を付与せずにホスト指標を検査します。

Keepalived

ソースドメイン ターゲット リソース / タイプ セキュリティ クラス 付与済みの権限 セキュリティの根拠と制約
keepalived_t keepalived_script_exec_t file executeexecute_no_transgetattropenreadmapsetattrioctl VIP トラッキング スクリプトの実行を専用の制限付きスクリプト コンテキストに制限します。
keepalived_t hostname_exec_t file executeexecute_no_transgetattropenreadmap フェイルオーバー中にノード ID を検証するために、標準システム hostname を呼び出します。
keepalived_t ifconfig_exec_t file executeexecute_no_transgetattropenreadmap 物理ネットワーク インターフェースで仮想 IP を割り当てて解放します。
keepalived_t systemd_systemctl_exec_t file executeexecute_no_transgetattropenreadmap サービス構成を変更せずに systemctl を使用してサービス依存関係の状態をクエリします。
keepalived_t system_dbusd_t unix_stream_socket connectto プロセス間通知のためにシステム DBus デーモンに接続します。
keepalived_t system_dbusd_t/init_t dbus send_msg DBus 状態遷移イベントを init_t systemd ドメインにブロードキャストします。
keepalived_t haproxy_unit_file_t/systemd_unit_file_t service status HAProxy と関連サービスの動作状態を確認します。
keepalived_t haproxy_var_lib_t dir / file / sock_file openreadwritesearchgetattr デプロイ時に /var/lib/haproxy のコロケーションされた HAProxy 統計情報ソケットを検査します。
keepalived_t keepalived_var_run_t dir/file openreadwritecreateunlinksearchgetattr /var/run/keepalived でランタイム状態と PID 追跡ファイルを保持します。
alloydbomni_nm_t keepalived_t process signalsignull Node Manager が POSIX シグナルを使用してデーモンのライフサイクルを管理できるようにします。

HAProxy

ソースドメイン ターゲット リソース / タイプ セキュリティ クラス 付与済みの権限 セキュリティの根拠と制約
haproxy_t postgresql_port_t tcp_socket name_bindname_connect ポート 5432 でリッスンし、データベース接続をバックエンド データベース ノードに転送します。
haproxy_t unreserved_port_t tcp_socket name_bindname_connect カスタム ロードバランサ ポートをリッスンし、アップストリームの読み取り/書き込みエンドポイントに接続します。
haproxy_t haproxy_conf_t file/dir openreadsearchgetattr /etc/haproxy/haproxy.cfg の読み取り専用構成アクセス。
haproxy_t haproxy_var_lib_t dir / file / sock_file openreadwritecreateunlinksearchgetattr /var/lib/haproxy のランタイム ソケットと統計情報テーブルを管理します。
haproxy_t haproxy_var_run_t dir/file openreadwritecreateunlinksearchgetattr /var/run/haproxy の PID と制御ソケットを管理します。
alloydbomni_nm_t haproxy_unit_file_t service startstopstatusreloadenabledisable Node Manager が HAProxy systemd サービスのライフサイクルを制御することを承認します。
alloydbomni_nm_t haproxy_t process signalsignull 構成の変更時に Node Manager が再読み込みシグナルを送信することを承認します。

PgBouncer

ソースドメイン ターゲット リソース / タイプ セキュリティ クラス 付与済みの権限 セキュリティの根拠と制約
init_t pgbouncer_exec_t file getattropenreadexecute systemd が PgBouncer 実行可能ファイル(/usr/bin/pgbouncer)を呼び出すことを許可します。
init_t pgbouncer_t process transition systemd から分離された pgbouncer_t へのドメイン移行を自動化します。
pgbouncer_t pgbouncer_exec_t file entrypointexecutereadmap 実行可能エントリ ポイントを /usr/bin/pgbouncer に制限します。
pgbouncer_t unreserved_port_t tcp_socket name_bind 受信クライアント データベース接続(TCP ポート 6432 など)をリッスンします。
pgbouncer_t node_t tcp_socket node_bind ネットワーク ソケットをノード ネットワーク インターフェースにバインドします。
pgbouncer_t postgresql_port_t/unreserved_port_t tcp_socket name_connect バックエンドの AlloyDB Omni データベース インスタンスへの TCP 接続を開始します。
pgbouncer_t self unix_stream_socket createbindlistenacceptreadwriteconnectto Unix ドメイン ソケットを介してローカル クライアント接続を提供します。
pgbouncer_t pgbouncer_conf_t file/dir openreadgetattrsearch /etc/pgbouncer/pgbouncer.ini とユーザー認証ファイルに対する読み取り専用の構成アクセス権。
pgbouncer_t pgbouncer_var_run_t/tmp_t dir/sock_file openreadwritecreateunlinksearchgetattr /var/run/pgbouncer/tmp でランタイム ソケット ファイルを作成して管理します。
pgbouncer_t self netlink_route_socket createbindreadwritenlmsg_readgetattr データベースとクライアント エンドポイントを解決するためのネットワーク ルートを検出します。
pgbouncer_t self udp_socket createconnectreadwritegetattrsetoptgetopt DNS 名の解決を行います。
pgbouncer_t init_t/kernel_t unix_dgram_socket sendto sd_notify ハートビートと準備完了シグナルを systemd に送信します。
pgbouncer_t sysfs_t file/dir openreadgetattrsearch ワーカー スレッドの最適化のために CPU トポロジを読み取ります。

pgBackRest

ソースドメイン ターゲット リソース / タイプ セキュリティ クラス 付与済みの権限 セキュリティの根拠と制約
postgresql_t/alloydbomni_nm_t pgbackrest_exec_t file executegetattropenreadmap Postgres と Node Manager がそれぞれ WAL アーカイブとバックアップのために /usr/bin/pgbackrest を実行できるようにします。
postgresql_t/alloydbomni_nm_t pgbackrest_t process transitionsignalsigkillsignull 制御されたプロセスが制限された pgbackrest_t ドメインに移行します。
pgbackrest_t pgbackrest_exec_t file entrypointexecuteexecute_no_transreadmapgetattropen pgBackRest バイナリ エントリ ポイントを制限します。
pgbackrest_t postgresql_db_t dir / file / lnk_file open, read, write, create, unlink, lock, append, search, getattr, setattr, map 物理バックアップとポイントインタイム リカバリ(PITR)中にデータベース ファイルを読み書きします。
pgbackrest_t postgresql_t unix_stream_socket connectto ローカル ソケットを使用して実行中の PostgreSQL エンジンに接続し、バックアップ チェックポイントをトリガーします。
pgbackrest_t postgresql_var_run_t dir / sock_file / file openreadwritesearchgetattr /var/run/postgresql で PostgreSQL 接続ソケットにアクセスします。
pgbackrest_t http_port_t tcp_socket name_connect 厳格な下り(外向き): クラウド オブジェクト ストレージ(GCS/S3)への下り(外向き)TCP 接続が HTTPS(443)に厳密に制限されます。インバウンド リスナーは禁止されています。
pgbackrest_t cert_t dir / file / lnk_file openreadsearchgetattrmap システム トラストストア証明書(/etc/pki/tls)を読み取って、オブジェクト ストレージへの TLS 接続を検証します。
pgbackrest_t pgbackrest_conf_t file/dir openreadgetattrsearchmap /etc/pgbackrest/pgbackrest.conf の読み取り専用構成アクセス。
pgbackrest_t pgbackrest_log_t file/dir openreadwritecreateunlinkappendlockgetattrsetattr /var/log/pgbackrest の監査ログを管理します。
pgbackrest_t pgbackrest_tmp_t dir / file / sock_file open, read, write, create, unlink, append, lock, getattr, setattr, relabelto, relabelfrom /tmp/pgbackrest 内の専用の分離された一時ストレージとスレッド間通信ソケット。
pgbackrest_t shadow_t / sysfs_t / sssd_var_lib_t file/dir dontaudit(無効化) 無関係なホスト認証情報のプローブをサイレントにドロップして無視し、監査ログの汚染を防ぎます。

Node Manager

ソースドメイン ターゲット リソース / タイプ セキュリティ クラス 付与済みの権限 セキュリティの根拠と制約
init_t alloydbomni_nm_exec_t file getattropenreadexecute systemd が Node Manager デーモンを起動できるようにします。
alloydbomni_nm_t self capability audit_writechowndac_overridedac_read_searchfownerfsetidsetgidsetuidnet_admin ホストのライフサイクル管理とボリューム プロビジョニングに必要な Linux 機能が厳密に制限されています。
alloydbomni_nm_t unreserved_port_t tcp_socket name_bindname_connect Cluster Manager に gRPC / HTTP API を提供し、HAProxy にヘルスチェック プローブを提供します。
alloydbomni_nm_t http_port_t tcp_socket name_connect クラウド API またはモニタリング エンドポイントへのアウトバウンド通信。
alloydbomni_nm_t semanage_exec_tsetfiles_exec_tsetsebool_exec_tload_policy_exec_t file executeexecute_no_transgetattropenreadmap コア SELinux 管理バイナリを実行して、CIL ポリシーをコンパイルし、適用します。
alloydbomni_nm_t security_t security load_policy コンパイル済みの SELinux ポリシー モジュールを Linux カーネルに直接読み込みます。
alloydbomni_nm_t semanage_store_tselinux_config_t dir/file openreadwritecreateunlinklockgetattr SELinux の永続ポリシー構成ストアを維持します。
alloydbomni_nm_t unlabeled_t(ディスク/マウント) filesystem / dir / file getattropenreadwritecreateunlinksetattrrelabeltorelabelfrom 動的ディスクの再ラベル付け: 新しく接続された未加工のディスク(/data1/obs など)を検出し、postgresql_db_t に再ラベル付けします。
alloydbomni_nm_t rpm_exec_t file executeexecute_no_transgetattropenreadioctlmap ソフトウェアの自動インストールと更新のために RPM/DNF パッケージ マネージャー コマンドを実行します。
alloydbomni_nm_t rpm_var_cache_trpm_var_lib_trpm_log_t dir/file openreadwritecreateunlinklockgetattr パッケージのインストール中に RPM データベースとキャッシュ ファイルを管理します。
alloydbomni_nm_t systemd_unit_file_tsyslogd_unit_file_thaproxy_unit_file_tkeepalived_unit_file_t service startstopstatusreloadenabledisable すべてのマネージド データベースと補助コンポーネントで systemd サービス ライフサイクルをオーケストレートします。
alloydbomni_nm_t system_dbusd_tsystemd_logind_tsystemd_hostnamed_t dbus/unix_stream_socket send_msgconnectto システム DBus を介してホストの状態、時間、システム ロギングを調整します。

クラスタ マネージャー

ソースドメイン ターゲット リソース / タイプ セキュリティ クラス 付与済みの権限 セキュリティの根拠と制約
init_t alloydbcontrol_exec_t file getattropenreadexecute systemd が Cluster Manager 実行可能ファイルを起動できるようにします。
alloydbcontrol_t alloydbcontrol_exec_t file entrypointexecutereadmapgetattropen コントロール プレーンの実行を承認済みバイナリに制限します。
alloydbcontrol_t unreserved_port_t tcp_socket name_bindname_connect API エンドポイントをバインドし、分散コンセンサス ストア(DCS / etcd)とノード マネージャーに接続します。
alloydbcontrol_t node_t tcp_socket node_bind ネットワーク リスナーをネットワーク インターフェースにバインドします。
alloydbcontrol_t alloydbcontrol_conf_t file/dir openreadsearchgetattr /etc/alloydbomni/cluster_manager の読み取り専用構成アクセス。
alloydbcontrol_t net_conf_tpasswd_file_tsssd_public_tsssd_var_lib_t file/dir openreadsearchgetattr 管理インターフェースのホスト解決とユーザー認証。
alloydbcontrol_t cgroup_tsysctl_net_tsysfs_t file/dir openreadsearchgetattr Go ランタイムのパフォーマンス最適化とテレメトリーの読み取り専用。
alloydbcontrol_t init_t unix_stream_socket dontauditioctl 重大ではない systemd ファイル記述子 ioctl 警告を抑制します。