11.13. ha_cluster 変数を使用して SBD ノードフェンシングを使用する高可用性クラスターを設定する
クラスター内の 1 つのノードに問題が発生した場合でも、クラスターが提供するサービスを引き続き利用可能にするには、1 つの以上フェンスデバイスを使用して Red Hat 高可用性クラスターを設定する必要があります。ご使用の環境で、リモートアクセス可能な電源スイッチによりクラスターノードをフェンスできない場合は、STONITH ブロックデバイス (SBD) を使用してフェンシングを設定できます。このデバイスは、共有ブロックストレージによるメッセージの交換を通じて、Pacemaker ベースのクラスターにノードフェンシングメカニズムを提供します。SBD は、Pacemaker、ウォッチドッグデバイス、および必要に応じて共有ストレージと統合し、フェンシングが必要なときにノードが確実に自己終了するように調整します。
ha_cluster
RHEL システムロールを使用すると、SBD フェンシングを自動的に設定できます。ha_cluster
では、次のどちらかの変数を使用して、ノードごとにウォッチドッグおよび SBD デバイスを設定できます。
-
ha_cluster_node_options
: (RHEL 9.5 以降) これは Playbook ファイルで定義する単一の変数です。これはディクショナリーのリストです。各ディクショナリーで 1 つのノードのオプションを定義します。 -
ha_cluster
: (RHEL 9.1 以降) 1 つのノードのみのオプションを定義するディクショナリー。ha_cluster
変数はインベントリーファイルで設定します。各ノードに異なる値を設定するには、各ノードに変数を個別に定義します。
ha_cluster_node_options
変数と ha_cluster
変数の両方に SBD オプションが含まれている場合、ha_cluster_node_options
のオプションが優先されます。
ha_cluster_node_options
変数と ha_cluster
変数の両方に SBD オプションが含まれている場合、ha_cluster_node_options
のオプションが優先されます。
次の手順の例では、ha_cluster
システムロールを使用して、SBD フェンシングを使用する高可用性クラスターを作成します。この手順の例では、インベントリーファイルの ha_cluster
変数を使用して、ノードごとにノードアドレスと SBD オプションを設定します。Playbook ファイルで ha_cluster_node_options
変数を使用する手順の例については、ha_cluster_nodes_options 変数を使用して SBD ノードフェンシングを使用する高可用性クラスターを設定する を参照してください。
ha_cluster
システムロールは、指定されたノードの既存のクラスター設定を置き換えます。Playbook に指定されていない設定はすべて失われます。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo
権限がある。 - クラスターメンバーとして使用するシステムには、RHEL および RHEL High Availability Add-On のアクティブなサブスクリプションがある。
手順
次の例のように、
ha_cluster
変数を使用して各ノードのウォッチドッグデバイスと SBD デバイスを設定するクラスターのインベントリーファイルを作成します。all: hosts: node1: ha_cluster: sbd_watchdog_modules: - iTCO_wdt sbd_watchdog_modules_blocklist: - ipmi_watchdog sbd_watchdog: /dev/watchdog1 sbd_devices: - /dev/disk/by-id/000001 - /dev/disk/by-id/000001 - /dev/disk/by-id/000003 node2: ha_cluster: sbd_watchdog_modules: - iTCO_wdt sbd_watchdog_modules_blocklist: - ipmi_watchdog sbd_watchdog: /dev/watchdog1 sbd_devices: - /dev/disk/by-id/000001 - /dev/disk/by-id/000002 - /dev/disk/by-id/000003
all: hosts: node1: ha_cluster: sbd_watchdog_modules: - iTCO_wdt sbd_watchdog_modules_blocklist: - ipmi_watchdog sbd_watchdog: /dev/watchdog1 sbd_devices: - /dev/disk/by-id/000001 - /dev/disk/by-id/000001 - /dev/disk/by-id/000003 node2: ha_cluster: sbd_watchdog_modules: - iTCO_wdt sbd_watchdog_modules_blocklist: - ipmi_watchdog sbd_watchdog: /dev/watchdog1 sbd_devices: - /dev/disk/by-id/000001 - /dev/disk/by-id/000002 - /dev/disk/by-id/000003
Copy to Clipboard Copied! インベントリーの例で指定されている SBD およびウォッチドッグ設定には、次のものが含まれています。
sbd_watchdog_modules
-
/dev/watchdog*
デバイスを作成するためにロードするウォッチドッグカーネルモジュール。 sbd_watchdog_modules_blocklist
- アンロードおよびブロックするウォッチドッグカーネルモジュール。
sbd_watchdog
- SBD が使用するウォッチドッグデバイス。
sbd_devices
-
SBD メッセージの交換と監視に使用するデバイス。一定の長いデバイス名 (
/dev/disk/by-id/
) を常に使用してデバイスを参照します。
インベントリーファイルの作成に関する一般的な情報については、RHEL 9 でのコントロールノードの準備 を参照してください。
機密性の高い変数を暗号化されたファイルに保存します。
vault を作成します。
ansible-vault create ~/vault.yml
$ ansible-vault create ~/vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>
Copy to Clipboard Copied! ansible-vault create
コマンドでエディターが開いたら、機密データを<key>: <value>
形式で入力します。cluster_password: <cluster_password>
cluster_password: <cluster_password>
Copy to Clipboard Copied! - 変更を保存して、エディターを閉じます。Ansible は vault 内のデータを暗号化します。
次の例のように、
~/playbook.yml
などの Playbook ファイルを作成します。インベントリーで SBD 変数と watchog 変数を指定しているため、Playbook にそれらを含める必要はありません。--- - name: Create a high availability cluster hosts: node1 node2 vars_files: - ~/vault.yml tasks: - name: Configure a cluster with sbd fencing devices configured in an inventory file ansible.builtin.include_role: name: redhat.rhel_system_roles.ha_cluster vars: ha_cluster_cluster_name: my-new-cluster ha_cluster_hacluster_password: "{{ cluster_password }}" ha_cluster_manage_firewall: true ha_cluster_manage_selinux: true ha_cluster_sbd_enabled: true ha_cluster_sbd_options: - name: delay-start value: 'no' - name: startmode value: always - name: timeout-action value: 'flush,reboot' - name: watchdog-timeout value: 30 # Best practice for setting SBD timeouts: # watchdog-timeout * 2 = msgwait-timeout (set automatically) # msgwait-timeout * 1.2 = stonith-timeout ha_cluster_cluster_properties: - attrs: - name: stonith-timeout value: 72 ha_cluster_resource_primitives: - id: fence_sbd agent: 'stonith:fence_sbd' instance_attrs: - attrs: # taken from host_vars # this only works if all nodes have the same sbd_devices - name: devices value: "{{ ha_cluster.sbd_devices | join(',') }}" - name: pcmk_delay_base value: 30
--- - name: Create a high availability cluster hosts: node1 node2 vars_files: - ~/vault.yml tasks: - name: Configure a cluster with sbd fencing devices configured in an inventory file ansible.builtin.include_role: name: redhat.rhel_system_roles.ha_cluster vars: ha_cluster_cluster_name: my-new-cluster ha_cluster_hacluster_password: "{{ cluster_password }}" ha_cluster_manage_firewall: true ha_cluster_manage_selinux: true ha_cluster_sbd_enabled: true ha_cluster_sbd_options: - name: delay-start value: 'no' - name: startmode value: always - name: timeout-action value: 'flush,reboot' - name: watchdog-timeout value: 30 # Best practice for setting SBD timeouts: # watchdog-timeout * 2 = msgwait-timeout (set automatically) # msgwait-timeout * 1.2 = stonith-timeout ha_cluster_cluster_properties: - attrs: - name: stonith-timeout value: 72 ha_cluster_resource_primitives: - id: fence_sbd agent: 'stonith:fence_sbd' instance_attrs: - attrs: # taken from host_vars # this only works if all nodes have the same sbd_devices - name: devices value: "{{ ha_cluster.sbd_devices | join(',') }}" - name: pcmk_delay_base value: 30
Copy to Clipboard Copied! サンプル Playbook で指定されている設定は次のとおりです。
ha_cluster_cluster_name: cluster_name
- 作成するクラスターの名前。
ha_cluster_hacluster_password: password
-
hacluster
ユーザーのパスワード。hacluster
ユーザーには、クラスターへのフルアクセス権が付与されます。 ha_cluster_manage_firewall: true
-
ha_cluster
RHEL システムロールがファイアウォールを管理するかどうかを決定する変数。 ha_cluster_manage_selinux: true
-
ha_cluster
RHEL システムロールがselinux
RHEL システムロールを使用してファイアウォール高可用性サービスのポートを管理するかどうかを決定する変数。 ha_cluster_sbd_enabled: true
- クラスターが SBD ノードフェンシングメカニズムを使用できるかどうかを決定する変数。
ha_cluster_sbd_options: sbd options
-
SBD オプションを指定する名前と値のディクショナリーのリスト。これらのオプションの詳細は、システム上の
sbd
(8) man ページのConfiguration via environment
セクションを参照してください。 ha_cluster_cluster_properties: cluster properties
- Pacemaker クラスター全体を対象とした設定のクラスタープロパティーセットのリスト。
ha_cluster_resource_primitives: cluster resources
-
ha_cluster
RHEL システムロールによって設定される Pacemaker リソース (フェンシングリソースを含む) のリソース定義のリスト
Playbook で使用されるすべての変数の詳細は、コントロールノードの
/usr/share/ansible/roles/rhel-system-roles.ha_cluster/README.md
ファイルを参照してください。Playbook の構文を検証します。
ansible-playbook --syntax-check --ask-vault-pass ~/playbook.yml
$ ansible-playbook --syntax-check --ask-vault-pass ~/playbook.yml
Copy to Clipboard Copied! このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
ansible-playbook --ask-vault-pass ~/playbook.yml
$ ansible-playbook --ask-vault-pass ~/playbook.yml
Copy to Clipboard Copied!