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_rest
、fence_vmware_soap
、fence_xvm
、fence_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 ユニキャスト)を意味します。この変数は、以下のオプションを受け付けます:
default
、udp
、udpu
。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_hosts
をfalse
に設定することで、これを無効にできます。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:
セクションに含め、役割が実行される前に読み込まれるようにすることです。以下の例は、このプロセス全体を示しています。
暗号化されていない変数ファイルを作成する
希望の秘密値が含まれたプレーンテキスト
encrypted_vars.yaml
ファイルを作成します。# cat encrypted_vars.yaml --- cluster_user_pass: 'cluster-user-pass' fence_vmware_login: 'vcenter-user' fence_vmware_passwd: 'vcenter-pass'
ansible-vault
を使用してファイルを暗号化する。# ansible-vault encrypt encrypted_vars.yaml
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"
デフォルトの設定で動作する役割の古いビデオ例:
- CentOS 7.6でCentOS 7.6の2ノードクラスターをインストールする:https://asciinema.org/a/226466
- Fedora 29でFedora 29の2ノードクラスターをインストールする:https://asciinema.org/a/226467
ライセンス
GPLv3
著者情報
著者と連絡を取りたい場合は、ondrej-xa2iel8u@famera.cz のメールを使用するか、機能要求を GitHub で作成して問題を報告してください。
pacemaker basic cluster role with fencing configuration (xvm, kdump, custom)
ansible-galaxy install OndrejHome.ha-cluster-pacemaker