OndrejHome.ha-cluster-pacemaker

ha-cluster-pacemaker

CentOS/RHEL 6/7/8/9、AlmaLinux 8/9、Rocky Linux 8/9、Fedora 31/32/33/34/35/36/37/38/39/40、及び CentOS 8/9 Stream システムでの基本的な Pacemaker クラスターの設定および拡張のための役割です。

この役割は、Pacemaker クラスターの以下の側面を設定できます:

  • 必要なシステムリポジトリを有効化
  • 必要なパッケージをインストール
  • Pacemaker クラスターを実行するためのユーザーとグループを作成・設定
  • ファイアウォールを設定
  • /etc/hosts に項目を生成
  • クラスターのノードを承認
  • クラスターを作成または拡張します(allow_cluster_expansionをチェック)
    • "2つ以上" のノードクラスター
    • 単一のハートビート、rrp または knet、最大 8 リンクまで
    • リモートノード
    • 自動検出またはカスタム選択されたインターフェース/IP をハートビートに使用
  • クラスターを起動時に開始および有効化
  • stonith デバイスを設定
    • デフォルトでは fence_xvm stonith デバイスをインストールおよび設定
    • 必要に応じて fence_kdump を設定
    • 必要に応じて fence_vmware (SOAP/REST) や他の fence_* stonith デバイスを設定
    • 必要に応じて fence_aws を設定

この役割は、デフォルト設定のために --check モードを完全にサポートし、他のオプションの大部分には部分的なサポートを提供します。

問題を報告する際は、できるだけ以下の情報を提供してください:

  • 使用している Ansible のバージョン
  • Ansible が実行された OS
  • エラーを生成したプレイブックとインベントリファイル(適切に機密情報を削除してください)
  • 遭遇したエラーメッセージまたは異常の説明

要件

この役割は ondrejhome.pcs-modules-2 に依存しています。

Ansible 2.8 以上が必要です。(注:以前のバージョンの使用は可能かもしれませんが、問題が発生した場合は Ansible を 2.8 以上に更新してください)

RHEL 6/7/8: マシンはすでに登録されていることが期待されます。この役割はデフォルトで '高可用性' または '耐障害ストレージ' チャンネルへのアクセスを有効にします。これが望ましくない場合は、enable_repos 変数を確認してください。

RHEL/CentOS 7: この役割には python-jinja2 ライブラリのバージョンが少なくとも 2.9 である必要があります。存在しない場合、Issue #6 で説明されているエラーに遭遇するかもしれません。更新された python-jinja2 とその依存関係を取得するには、CentOS 7 および RHEL 7 の両方のために以下の RPM リポジトリを使用できます - https://copr.fedorainfracloud.org/coprs/ondrejhome/ansible-deps-el7/

CentOS 8 Stream では、20240129 バージョンがテストされ、推奨される最小 Ansible バージョンは 2.11.0 です。これはシステムを 'CentOS' として識別し始めます(CentOS Linux とは異なる)。古い CentOS 8 Stream バージョン 20201211 の最小使用可能 Ansible バージョンは 2.9.16/2.10.4 です。バージョン 2.8.18 はテスト時に 動作しませんでした。これは Service is in unknown state #71528 に関連しています。

CentOS 9 Stream では、20240129 バージョンがテストされ、推奨される最小 Ansible は 2.11.0 です。

Debian Buster では、20210310 バージョンがテストされ、Ansible バージョン 2.10 であり、Debian Bullseye では、20220326 バージョンが Ansible バージョン 2.12 でテストされました。この役割の Debian 部分には stonith 設定およびファイアウォール設定は含まれていません。 注意: この役割は Debian での限られたテストのみを通過しており、この役割のすべての機能はテストされていません。

Debian Bookworm では Ansible バージョン 2.14 でテストされ、Debian Bookwork であります。この役割の Debian 部分には stonith 設定およびファイアウォール設定は含まれていません。 注意: この役割は Debian での限られたテストのみを通過しており、すべての機能はテストされていません。

Ansible バージョン 2.9.10 および 2.9.11 は、リモートノードを設定しようとしたときに "'hostvars' is undefined" エラーで失敗します。これは cluster_node_is_remote=True があるときのみ適用されます。リモートノードをこの役割で構成する予定がある場合は、これらの Ansible バージョンは 避けてください

CentOS Linux 8 では、BaseOS と Appstream リポジトリが適切に機能していることを確認する必要があります。CentOS Linux 8 は EOL フェーズにあるため、この役割は HA リポジトリを vault.centos.org に指向させるように設定します(リポジトリ設定がリクエストされている場合 - デフォルトでそうなっています)。

pcs-0.11 バージョンのディストリビューション(AlmaLinux 9、Rocky Linux 9、RHEL 9、Fedora 36/37/38)は、ondrejhome.pcs-modules-2 バージョン 27.0.0 以上のみサポートされています。

役割変数

  • クラスター ノードを承認するために使用されるユーザー

    cluster_user: 'hacluster'
    
  • クラスター ノードを承認するために使用されるユーザーのパスワード

    cluster_user_pass: 'testtest'
    
  • クラスター ユーザーが所属するグループ('haclient' であるべき)

    cluster_group: 'haclient'
    
  • クラスターの名前

    cluster_name: 'pacemaker'
    
  • クラスタリングのためのファイアウォール設定、RHEL/Centos 6 では iptables 設定ファイルを置き換えます!

    cluster_firewall: true
    
  • 通常のノード(pacemaker_remote でないノード)での起動時にクラスターを有効にする

    cluster_enable_service: true
    
  • fence_xvm フェンシングデバイスでクラスターを設定しますか? これは、/etc/cluster/fence_xvm.keyをノードにコピーし、フェンシングデバイスをクラスターに追加します。 注意:各クラスター ノードに対してインベントリ内で 'vm_name' を定義する必要があります。

    cluster_configure_fence_xvm: true
    
  • fence_vmware_soap/fence_vmware_rest フェンシングデバイスでクラスターを設定しますか? これは fence_vmware_soap/fence_vmware_rest フェンシングエージェントをインストールし、設定します。 これを有効にすると、vCenter にアクセスするための情報を指定するために追加の 3 つの変数を指定する必要があります。 注意:各クラスター ノードに対して、ハイパーバイザーや fence_vmware_soap -o list / fence_vmware_rest コマンドの出力で表示される VM の名前または UUID を指定する 'vm_name' をインベントリで定義する必要があります。

    cluster_configure_fence_vmware_soap: false
    cluster_configure_fence_vmware_rest: false
    fence_vmware_ipaddr: ''
    fence_vmware_login: ''
    fence_vmware_passwd: ''
    

    必要に応じて、fence_vmware_options 変数を使用して fence_vmware_soap/fence_vmware_rest に渡される追加の属性を変更できます。 デフォルトでは、この変数は暗号化を有効にし、証明書の検証を無効にします。

    fence_vmware_options: 'ssl="1" ssl_insecure="1"'
    

    注意:fence_vmware_soap/fence_vmware_rest のいずれか一つだけが stonith デバイスとして設定できます。

  • fence_kdump フェンシングデバイスでクラスターを設定しますか? これは kdump サービスを開始し、fence_kdump stonith デバイスを定義します。 注意:kdump サービスが開始されていない場合、これが正しく動作しないか、まったく動作しません。

    cluster_configure_fence_kdump: false
    
  • fence_aws フェンシングデバイスでクラスターを設定しますか? AWS のインスタンス ID/リージョンと、このクラスターのインスタンスを開始/停止できるインスタンスプロファイルを提供する必要があります。 これを有効にすると、AWSリージョンに関する情報を含む fence_aws_region 変数を指定する必要があります。 注意:インスタンスプロファイルを設定しない場合、正しく機能しないか、まったく機能しません。

    cluster_configure_fence_aws: false
    fence_aws_region: ''
    

    注意:AWS ウェブコンソールで表示されるインスタンス ID を指定するために、インベントリ内の各クラスター ノードに instance_id を定義する必要があります。 fence_aws のマニュアルも参照してください。

    必要に応じて、fence_aws_options 変数を使用して fence_aws に渡される追加の属性を変更できます。

    fence_aws_options: ''
    

    注:特定のユースケースに適したいくつかの正しいオプションの例は、以下のドキュメントにあります。
    https://access.redhat.com/articles/4175371#create-stonith
    https://docs.aws.amazon.com/sap/latest/sap-hana/sap-hana-on-aws-cluster-resources-1.html

  • フェンスデバイスをクラスターノードにマッピングする方法? デフォルトでは、各クラスターノードに対して個別の stonith デバイスが作成されます('one-device-per-node')。 一部のフェンスエージェントは、同じ stonith デバイスを使用して複数のノードをフェンシングすることができ('one-device-per-cluster')、複数のデバイスを使用すると同じユーザーのログインカウント制限により問題が発生することがあります。 利用可能なオプション:

    • one-device-per-node - (デフォルト) - 各クラスターノードに対して1つのstonithデバイスを作成します
    • one-device-per-cluster - (サポートされているフェンスエージェントで) - すべてのノード用にクラスター全体で1つのstonithデバイスのみを作成します。サポートされているフェンスエージェント: fence_vmware_restfence_vmware_soapfence_xvmfence_kdump
      cluster_configure_stonith_style: 'one-device-per-node'
      
  • (RHEL/CentOS/AlmaLinux/Rocky)必要なパッケージを含むリポジトリを有効にする

    enable_repos: true
    
  • (RHEL のみ)必要なパッケージを含む拡張更新(EUS)リポジトリを有効にする

    enable_eus_repos: false
    
  • (RHEL のみ)必要なパッケージを含む SAP ソリューション更新サービス(E4S)リポジトリを有効にする

    enable_e4s_repos: false
    
  • (RHEL のみ)必要なパッケージを含むベータリポジトリを有効にする

    enable_beta_repos: false
    
  • (RHEL のみ)有効にするリポジトリのタイプ、注:E4S リポジトリは 'ha' タイプのみ利用可能

    • ha - 高可用性
    • rs - 耐障害ストレージ
      repos_type: 'ha'
      
  • (RHEL のみ)custom_repository により、任意の名前のリポジトリを有効にすることができます。 RHEL8 リポジトリ名は http://downloads.redhat.com/redhat/rhel/rhel-8-beta/rhel-8-beta.repo で確認できます。

    custom_repository: ''
    
  • (CentOS のみ)/dev/cdrom にあるCD-ROMメディアから必要なパッケージをインストールする

    use_local_media: false
    
  • PCSD Web GUI を有効または無効にする。デフォルトで役割は、CentOS/RHEL 6.X では PCSD Web GUI を無効にし、CentOS/RHEL 7.X では有効にします。true または false をこの変数に渡すことで、PCSD Web GUI が有効または無効になることを確認できます。

    enable_pcsd_gui: 'nochange'
    
  • クラスターのトランスポートプロトコル。デフォルトでは、OS に応じてデフォルトのものを使用します。 CentOS/RHEL 6.X の場合は 'udp'(UDP マルチキャスト)、CentOS/RHEL 7.X の場合は 'udpu'(UDP ユニキャスト)を意味します。この変数は、以下のオプションを受け付けます: defaultudpudpu

    cluster_transport: 'default'
    
  • ondrejhome.pcs-modules-2 v16 以降で使用すると、既存のクラスターへのノードの追加を許可します。

    allow_cluster_expansion: false
    
  • クラスター ネットワークインターフェース。指定した場合、この役割はこのインターフェースのプライマリ IPv4 アドレスをホストにマッピングします。 デフォルトでは、ansible_default_ipv4 からの IPv4 アドレスまたは ansible_all_ipv4_addresses の最初の IPv4 が使用されます。 例えば、 ens8 インターフェースからのプライマリ IPv4 アドレスを使用する場合は、cluster_net_iface: 'ens8' を使用します。 インターフェースは、すべてのクラスター ノードに存在する必要があります。

    cluster_net_iface: ''
    
  • 冗長ネットワークインターフェース。指定した場合、この役割はデフォルト IPv4 を使用して corosync 冗長リングをセットアップします。 インターフェースは、すべてのクラスター ノードに存在する必要があります。

      rrp_interface: ''
    

    注意:この変数は defaults/main.yml に定義することができます。この場合、同じ rrp_interface 名がホストファイル内のすべてのホストに使用されます。 または、ホストファイル内の各ホストに対してインターフェースを指定することもできます。これは、各ホストに対して特定のインターフェース名を使用することを可能にします(同じインターフェース名でない場合)。rrp_interface をホストに対して定義する代わりに rrp_ip を定義することができ、この場合この別の IP が corosync RRP を設定するために使用されます(この IP はホストのデフォルト IPv4 アドレスとは異なる必要があります)。これは、同じプライマリインターフェースに属する代替の IP を使用することを可能にします。

  • ホストを /etc/hosts に追加するかどうか。デフォルトでは、cluster_hostname_fact により指定されたホスト名のエントリが /etc/hosts に追加されます。 cluster_etc_hostsfalse に設定することで、これを無効にできます。

    cluster_etc_hosts: true
    
  • クラスター ノードのホスト名として使用する Ansible ファクト。デフォルトでは、この役割は ansible_hostname ファクトを各ホストのホスト名として使用します。 一部の環境では、完全修飾ドメイン名 (FQDN) ansible_fqdn またはノード名 ansible_nodename を使用するのが便利な場合があります。

    cluster_hostname_fact: "ansible_hostname"
    
  • ノードをリモート パケーマーカーノードとして設定すべきかどうか。デフォルトでは、これは false であり、ノードは Pacemaker クラスターの完全メンバーになります。Pacemaker リモートノードは、クラスターの完全メンバーではなく、32のフルメンバーの最大サイズを超えることを許可します。 注意:リモートノードは、この役割で EL7 および EL8 のみに対応しています。

    cluster_node_is_remote: false
    
  • 主要なクラスター IP (ring0) を検出するための変数の順序リスト。最初に一致した IPv4 が使用され、残りの検出された IPv4 はスキップされます。 通常は変更が必要ありませんが、必須 GW がない場合や、指定されたインターフェースから非プライマリ IPv4 を使用する必要がある特別なケースでは、調整できます。

    ring0_ip_ordered_detection_list:
      - "{{ hostvars[inventory_hostname]['ansible_'+cluster_net_iface].ipv4.address|default('') }}"
      - "{{ ansible_default_ipv4.address|default('') }}"
      - "{{ ansible_all_ipv4_addresses[0]|default('') }}"
    
  • クラスター プロパティの設定(必須ではありません)

    cluster_property:
      - name: required
        node: optional
        value: optional
    
  • クラスター リソースのデフォルト設定(必須ではありません)

    cluster_resource_defaults:
      - name: required
        defaults_type: optional
        value: optional
    
  • クラスター リソースの設定(必須ではありません)

    cluster_resource:
      - name: required
        resource_class: optional
        resource_type: optional
        options: optional
        force_resource_update: optional
        ignored_meta_attributes: optional
        child_name: optional
    
  • クラスターの順序制約の設定(必須ではありません)

    cluster_constraint_order:
      - resource1: required
        resource1_action: optional
        resource2: required
        resource2_action: optional
        kind: optional
        symmetrical: optional
    
  • クラスターの同居制約の設定(必須ではありません)

    cluster_constraint_colocation:
      - resource1: required
        resource1_role: optional
        resource2: required
        resource2_role: optional
        score: optional
        influence: optional
    
  • クラスターの位置制約の設定(必須ではありません)

    ノードベース

    cluster_constraint_location:
      - resource: required
        node_name: required
        score: optional
    

    ルールベース(_ondrejhome.pcs-modules-2 バージョン 30.0.0 以上が必要_)

    cluster_constraint_location:
      - resource: required
        constraint_id: required
        rule: required
        score: optional
    

セキュリティの考慮事項

cluster_user_pass のデフォルト値を更新することを検討してください。

この役割に渡される変数の機密値を保護するために、ansible-vault を使用してそれらを暗号化できます。推奨される方法は、必要な変数とその値を含む別のファイルを作成し、そのファイル全体を ansible-vault encrypt で暗号化してから、このファイルを pre_tasks: セクションに含め、役割が実行される前に読み込まれるようにすることです。以下の例は、このプロセス全体を示しています。

暗号化されていない変数ファイルを作成する

  1. 希望の秘密値が含まれたプレーンテキスト encrypted_vars.yaml ファイルを作成します。

    # cat encrypted_vars.yaml
    ---
    cluster_user_pass: 'cluster-user-pass'
    fence_vmware_login: 'vcenter-user'
    fence_vmware_passwd: 'vcenter-pass'
    
  2. ansible-vault を使用してファイルを暗号化する。

    # ansible-vault encrypt encrypted_vars.yaml
    
  3. encrypted_vars.yaml の新しい内容を確認します。

    # cat encrypted_vars.yaml
    $ANSIBLE_VAULT;1.1;AES256
    31306461386430...
    

encrypted_vars.yaml の値を使用する例のプレイブック

- hosts: cluster
   pre_tasks:
     - include_vars: encrypted_vars.yaml
   roles:
     - { role: 'ondrejhome.ha-cluster-pacemaker', cluster_name: 'test-cluster' }

注: 変数の値のみを暗号化し、vars: に配置することは推奨されません。なぜなら、argument 1 must be str, not AnsibleVaultEncryptedUnicode のようなエラーが発生する可能性があるためです。全ファイルを暗号化する方法は、この問題の影響を受けないようです。

Ansible モジュール デフォルト

この役割はすべての設定オプションを変数を介して公開していませんが、module_defaults を使用して、この役割が使用しないパラメータのデフォルト値を変更できます。以下は、これが役立つ可能性のあるパラメータの非網羅的な例です。

モジュールデフォルトの例 A - トトムトークンを15秒に設定する

- hosts: cluster
  modules_defaults:
    pcs_cluster:
      token: 15000               # デフォルトは 'null' - OS のデフォルト値に依存

モジュールデフォルトの例 B - EL8+/Fedora システムでの弱依存関係のインストールを無効にする

- hosts: cluster
  modules_defaults:
    yum:
      install_weak_deps: false   # デフォルトは 'true'

モジュールデフォルトの例 C - Debian システムでのパッケージの推奨のインストールを無効にする

- hosts: cluster
  modules_defaults:
    apt:
      install_recommends: false  # デフォルトは 'null' - OS の設定に依存

注:module_defaults は、タスクで指定されていないオプションにのみ適用されます。この役割でタスクによって設定された値を上書きすることはできません。そのため、使用されないオプションの値だけを変更できます。

例のプレイブック

例のプレイブック A - 自動起動を有効にし、fence_xvm およびファイアウォール設定を持つ 'test-cluster' という名前のクラスターを作成する。注:cluster_name は任意で、デフォルトは pacemaker です。

- hosts: cluster
  roles:
     - { role: 'ondrejhome.ha-cluster-pacemaker', cluster_name: 'test-cluster' }

例のプレイブック B - ファイアウォールを設定せず、fence_xvm なしで 'test-cluster' という名前のクラスターを作成する。 クラスターが正しく承認されるには、ファイアウォールがすでに設定されているか無効になっていることが期待されます。

- hosts: cluster
  roles:
     - { role: 'ondrejhome.ha-cluster-pacemaker', cluster_name: 'test-cluster', cluster_firewall: false, cluster_configure_fence_xvm: false }

例のプレイブック C - fence_vmware_soap フェンシングデバイスを持つ vmware-cluster という名前のクラスターを作成する。

- hosts: cluster
  vars:
    fence_vmware_ipaddr: 'vcenter-hostname-or-ip'
    fence_vmware_login: 'vcenter-username'
    fence_vmware_passwd: 'vcenter-password-for-username'
  roles:
     - { role: 'ondrejhome.ha-cluster-pacemaker', cluster_name: 'vmware-cluster', cluster_configure_fence_xvm: false, cluster_configure_fence_vmware_soap: true }

例のプレイブック D - /etc/hosts を変更しない 'test-cluster' という名前のクラスターを作成する。

- hosts: cluster
  roles:
     - { role: 'ondrejhome.ha-cluster-pacemaker', cluster_name: 'test-cluster', cluster_etc_hosts: false }

例のプレイブック E - すべてのクラスター ノードに対して単一の fence_vmware_rest フェンシングデバイスを持つ vmware-cluster という名前のクラスターを作成する。

- hosts: cluster
  vars:
    fence_vmware_ipaddr: 'vcenter-hostname-or-ip'
    fence_vmware_login: 'vcenter-username'
    fence_vmware_passwd: 'vcenter-password-for-username'
  roles:
     - { role: 'ondrejhome.ha-cluster-pacemaker', cluster_name: 'vmware-cluster', cluster_configure_fence_xvm: false, cluster_configure_fence_vmware_rest: true, cluster_configure_stonith_style: 'one-device-per-cluster' }

例のプレイブック F - すべてのクラスター ノードに対して単一の fence_aws フェンシングデバイスを持つ aws-cluster という名前のクラスターを作成する。

- hosts: cluster
  roles:
    - { role: 'ondrejhome.ha-cluster-pacemaker', cluster_name: 'aws-cluster', cluster_configure_fence_xvm: false, cluster_configure_fence_aws: true, cluster_configure_stonith_style: 'one-device-per-cluster', enable_repos: false, fence_aws_region: 'aws-region' }

例のプレイブック リソース設定 .

- hosts: cluster
  vars:
    cluster_property:
      - name: 'maintenance-mode'
        value: 'true'
    cluster_resource:
      - name: 'apache2'
        resource_type: 'systemd:apache2'
        options: 'meta migration-threshold=2 op monitor interval=20s timeout=10s'
      - name: 'cluster_vip'
        resource_type: 'ocf:heartbeat:IPaddr2'
        options: 'ip=192.168.1.150 cidr_netmask=24 meta migration-threshold=2 op monitor interval=20'
    cluster_constraint_colocation:
      - resource1: 'cluster_vip'
        resource2: 'apache2'
        score: 'INFINITY'
    cluster_resource_defaults:
      - name: 'failure-timeout'
        value: '30'
  roles:
     - { role: 'ondrejhome.ha-cluster-pacemaker', cluster_name: 'apache-cluster'}

CentOS/RHEL/Fedora システムの基本的なクラスターを作成するためのインベントリファイルの例。

[cluster-centos7]
192.168.22.21 vm_name=fastvm-centos-7.8-21
192.168.22.22 vm_name=fastvm-centos-7.8-22
[cluster-fedora32]
192.168.22.23 vm_name=fastvm-fedora32-23
192.168.22.24 vm_name=fastvm-fedora32-24
[cluster-rhel8]
192.168.22.25 vm_name=fastvm-rhel-8.0-25
192.168.22.26 vm_name=fastvm-rhel-8.0-26

カスタムインターフェースで RRP 相互接続を使用するクラスターのためのインベントリファイルの例および/または RRP 用のカスタム IP を使用する。

[cluster-centos7-rrp]
192.168.22.27 vm_name=fastvm-centos-7.6-21 rrp_interface=ens6
192.168.22.28 vm_name=fastvm-centos-7.6-22 rrp_ip=192.168.22.29

完全メンバー2つとリモートノード2つのインベントリファイル例:

[cluster]
192.168.22.21 vm_name=fastvm-centos-7.6-21
192.168.22.22 vm_name=fastvm-centos-7.6-22
192.168.22.23 vm_name=fastvm-centos-7.6-23 cluster_node_is_remote=True
192.168.22.24 vm_name=fastvm-centos-7.6-24 cluster_node_is_remote=True

fence_aws を使用したインベントリファイルの例:

[cluster]
172.31.0.1	instance_id="i-acbdefg1234567890"
172.31.0.2	instance_id="i-acbdefg0987654321"

デフォルトの設定で動作する役割の古いビデオ例:

ライセンス

GPLv3

著者情報

著者と連絡を取りたい場合は、ondrej-xa2iel8u@famera.cz のメールを使用するか、機能要求を GitHub で作成して問題を報告してください。

プロジェクトについて

pacemaker basic cluster role with fencing configuration (xvm, kdump, custom)

インストール
ansible-galaxy install OndrejHome.ha-cluster-pacemaker
ライセンス
gpl-3.0
ダウンロード
2.5k
所有者