現在の世界では、サービス停止を最小限に抑えて顧客にサービスを継続的に提供することが重要です。Red Hat Enterprise Linux (RHEL) High Availability Add-On は、プロダクションシステムの信頼性、スケーラビリティ、可用性を向上させることで、その目標を達成するのに役立ちます。高可用性 (HA) クラスタは単一障害点を排除し、あるノードが動作しなくなった場合にサービスをあるクラスタノードから別のクラスタノードにフェイルオーバーすることでこれを実現します
この記事では、ha_cluster RHEL システムロールを使用して、アクティブ/パッシブモードの共有ストレージを備えた Apache HTTP サーバーを実行する HA クラスタを設定する方法を説明します。
RHEL システムロールは RHEL に含まれる Ansible ロールとモジュールのコレクションです。一貫したワークフローを提供し、手動タスクの実行を効率化するのに役立ちます。RHEL HA クラスタリングの詳細については、「 高可用性 (HA) クラスタの構成および管理」ドキュメントをご覧ください。
環境の概要
私のサンプルの環境では、controlnodeという名前のコントロールノードシステムと、 rhel8-node1、 rhel8-node2という 2 つの管理対象ノードがあり、それらすべては RHEL 8.6 を実行しています。両方の管理対象ノードは、ホスト名 apc-switchを持つ APC 電源スイッチを介して支えられています。
ノード rhel8-node1 と rhel8-node2 で構成される rhel8-cluster という名前のクラスタを作成したいと考えています。クラスタは、LVM (論理ボリューム管理) 論理ボリュームにマウントされた ext4 ファイルシステムからページを提供するフローティング IP アドレスを使用して、アクティブ/パッシブモードで Apache HTTP サーバーを実行します。フェンシングは apc-switch によって提供されます。
両方のクラスタノードは、LVM 論理ボリュームにマウントされた ext4 ファイルシステムを持つ共有ストレージに接続されています。Apache HTTP Server が両方のノードにインストールされ、構成されています。ドキュメント「高可用性 (HA) クラスタの構成と管理」で、「 Pacemaker クラスタ内の ext4 ファイルシステムを使用した LVM ボリュームの構成」および「Apache HTTP サーバーの構成」の章を参照してください。
3 つのサーバーすべてに ansible という名前の Ansible サービスアカウントを設定しました。 controlnode の ansible アカウントで各ノードにログインできるように、SSH キー認証を設定しています。加えて、 ansible サービスアカウントは各ノードの sudo で root アカウントにアクセスできるよう設定されています。また、 rhel-system-roles と ansible パッケージを controlnode にインストールしました。これらのタスクの詳細については、「RHEL システムロールの概要」の記事を参照してください。
インベントリーファイルとロールの変数の定義
最初のステップとして、controlnode システムから新しいディレクトリ構造を作成します。
[ansible@controlnode ~]$ mkdir -p ha_cluster/group_vars
これらのディレクトリは次のように使用されます。
- ha_cluster ディレクトリには、Playbook とインベントリーファイルが含まれています。
- ha_cluster/group_vars ファイルには、各 Ansible インベントリーグループのホストに適用されるインベントリーグループの変数ファイルが含まれています。
Ansible インベントリーファイルを定義して、ha_cluster システムロールで設定するホストをリストし、グループ化する必要があります。ha_cluster/inventory.yml に、次のコンテンツを含むインベントリーファイルを作成します。
---
all:
children:
rhel8_cluster:
hosts:
rhel8-node1:
rhel8-node2:インベントリーは rhel8_clusterという名前のインベントリーグループを定義し、2 つの管理対象ノードをこのグループに割り当てます。次に、
ha_cluster システムロールの実行時の動作を制御するロール変数を定義します。ha_cluster ロール用の README.md ファイルは、/usr/share/doc/rhel-system-roles/ha_cluster/README.md にあります。これには、使用可能なロール変数のリストとその使用方法など、ロールに関する重要な情報が含まれています。
ha_cluster ロールについて定義する必要がある変数の 1 つが ha_cluster_hacluster_password 変数です。これは hacluster ユーザーのパスワードを定義します。Ansible Vault を使用してその値を暗号化し、プレーンテキストで保存されないようにします。
[ansible@controlnode ~]$ ansible-vault encrypt_string 'your-hacluster-password' --name ha_cluster_hacluster_password
New Vault password:
Confirm New Vault password:
ha_cluster_hacluster_password: !vault |
$ANSIBLE_VAULT;1.1;AES256 376135336466646132313064373931393634313566323739363365616439316130653539656265373663636632383930323230343731666164373766353161630a303434316333316264343736336537626632633735363933303934373666626263373962393333316461616136396165326339626639663437626338343530360a39366664336634663237333039383631326263326431373266616130626333303462386634333430666333336166653932663535376538656466383762343065
Encryption successfulyour-hacluster-password を任意のパスワードに置き換えます。コマンドを実行すると Vault パスワードを要求されます。このパスワードは、Playbook の実行時に変数を復号化するために使用できます。Vault パスワードを入力し、確認のために再度入力すると、暗号化された変数が出力に表示されます。変数は、次の手順で作成される変数ファイルに配置されます。
次に、ha_cluster/group_vars/rhel8_cluster.yml に以下の内容のファイルを作成することで、rhel8_cluster インベントリーグループにリストされているクラスタノードの変数を定義するファイルを作成します。
---
ha_cluster_cluster_name: rhel8-cluster
ha_cluster_hacluster_password: !vault |
$ANSIBLE_VAULT;1.1;AES256
3761353364666461323130643739313936343135663237393633656164393161306535
39656265373663636632383930323230343731666164373766353161630a3034343163
3331626434373633653762663263373536393330393437366662626337396239333331
6461616136396165326339626639663437626338343530360a39366664336634663237
3330393836313262633264313732666161306263333034623866343334306663333361
66653932663535376538656466383762343065
ha_cluster_fence_agent_packages:
- fence-agents-apc-snmp
ha_cluster_resource_primitives:
- id: myapc
agent: stonith:fence_apc_snmp
instance_attrs:
- attrs:
- name: ipaddr
value: apc-switch
- name: pcmk_host_map
value: rhel8-node1:1;rhel8-node2:2
- name: login
value: apc
- name: passwd
value: apc
- id: my_lvm
agent: ocf:heartbeat:LVM-activate
instance_attrs:
- attrs:
- name: vgname
value: my_vg
- name: vg_access_mode
value: system_id
- id: my_fs
agent: ocf:heartbeat:Filesystem
instance_attrs:
- attrs:
- name: device
value: /dev/my_vg/my_lv
- name: directory
value: /var/www
- name: fstype
value: ext4
- id: VirtualIP
agent: ocf:heartbeat:IPaddr2
instance_attrs:
- attrs:
- name: ip
value: 198.51.100.3
- name: cidr_netmask
value: 24
- id: Website
agent: ocf:heartbeat:apache
instance_attrs:
- attrs:
- name: configfile
value: /etc/httpd/conf/httpd.conf
- name: statusurl
value: http://127.0.0.1/server-status
ha_cluster_resource_groups:
- id: apachegroup
resource_ids:
- my_lvm
- my_fs
- VirtualIP
- Websiteこれにより、 ha_cluster ロールによって rhel8-cluster という名前のクラスタがノードに作成されます。
クラスタで定義された stonith:fence_apc_snmp タイプの myapc という 1 つのフェンスデバイスがあります。このデバイスは apc-switch IP アドレスでアクセスできます。それぞれ、ログインとパスワード apc および apc を使用します。クラスタノードはこのデバイスを介して支えられています。rhel8-node1 がソケット 1 に接続され、 rhel8-node2 がソケット 2 に接続されます。他のフェンスデバイスは使用しないため、ha_cluster_fence_agent_packages 変数を指定します。これはそのデフォルト値をオーバーライドするため、他のフェンスエージェントはインストールされません。
クラスタ内で 4 つのリソースが実行されます。
- LVM ボリュームグループ my_vg は、タイプ ocf:heatheat:LVM-activate の my_lvm リソースによってアクティブ化されます。
- ext4 ファイルシステムは、共有ストレージデバイス /dev/my_vg/my_lv から、ocf:heartbeat:Filesystem タイプの my_fs リソースによって /var/www にマウントされます。
- HTTP サーバーのフローティング IP アドレス 198.51.100.3/24 は、タイプ ocf:heatheat:IPaddr2の VirtualIP リソースによって管理されます。
- HTTP サーバーは、タイプ ocf:heatheat:apacheの Website リソースによって表されます。その設定ファイルは /etc/httpd/conf/httpd.conf に保存され、監視用のステータス・ページは http://127.0.0.1/server-status で確認できます。
すべてのリソースが apachegroup グループに配置され、単一のノードで実行され、指定された順序 (my_lvm、my_fs、VirtualIP、Website) で起動します。
Playbook の作成
次のステップでは、次の内容の Playbook ファイルを ha_cluster/ha_cluster.yml に作成します。
---
- name: Deploy a cluster
hosts: rhel8_cluster
roles:
- rhel-system-roles.ha_clusterこの Playbook は、 rhel8_cluster インベントリーグループで定義されたすべてのシステムに対して、ha_cluster システムロールを呼び出します。
Playbook の実行
この時点ですべての準備が整い、Playbook を実行する準備ができました。ここでは RHEL コントロールノードを使用し、コマンドラインから Playbook を実行します。cd コマンドを使用して ha_cluster ディレクトリに移動し、 ansible-playbook コマンドを使用して Playbook を実行します。
[ansible@controlnode ~]$ cd ha_cluster/ [ansible@controlnode ~]$ ansible-playbook -b -i inventory.yml --ask-vault-pass ha_cluster.yml
ha_cluster.yml Playbook を実行すること、root として実行すること (-b フラグ)、inventory.yml ファイルを Ansible インベントリーとして使用すること (-i フラグ)、ha_cluster_hacluster_password 変数を復号化するために vault パスワードを入力するよう求めること (--ask-vault-passフラグ) を指定します。
Playbook の完了後、失敗したタスクがないか確認します。
設定の検証
クラスタがセットアップ済みでリソースを実行していることを確認するため、rhel8-node1 にログインし、クラスタのステータスを表示します。
rhel8-node2 でも確認します。これは同じ出力を表示します。
次に、Web ブラウザーを開き、IP 198.51.100.3 に接続して Web サイトにアクセスできることを確認します。
フェイルオーバーをテストするために、rhel8-node1 からネットワークケーブルを引き出します。しばらくするとクラスタがフェイルオーバーを実行し、rhel8-node1 をフェンスします。rhel8-node2 にログインし、クラスタのステータスを表示します。すべてのリソースが rhel8-node1 から rhel8-node2 に移行されたことが示されます。また、Web ブラウザーで Web サイトをリロードし、引き続きアクセスできることを確認します。
rhel8-node1 をネットワークに再接続し、もう一度再起動してクラスタに再度加わります。
結論
ha_cluster RHEL システムロールは、さまざまなワークロードを実行する RHEL HA クラスタを迅速かつ一貫して構成するために役立ちます。この記事では、ロールを使用してアクティブ/パッシブモードの共有ストレージから Web サイトを実行する Apache HTTP Server を設定する方法を説明しました。
Red Hat は、RHEL 環境の他の重要な側面の自動化に役立つ RHEL システムロールを多数提供しています。その他のロールについては、RHEL システムロールのリストをご覧ください。より効率的で一貫性のある自動化された方法で、RHEL サーバーの管理を今すぐ始めましょう。
Red Hat Ansible Automation Platform の詳細にご興味のある方は、Red Hat の e ブック「自動化アーキテクトのハンドブック」をご覧ください。
執筆者紹介
Tomas Jelinek is a Software Engineer at Red Hat with over seven years of experience with RHEL High Availability clusters.
類似検索
The definitive automation guide to Red Hat Summit 2026: Must-attend Red Hat Ansible Automation Platform sessions, talks, and labs
Integrating Red Hat Lightspeed with CrowdStrike for enhanced malware detection coverage
Technically Speaking | Taming AI agents with observability
Transforming Your Identity Management | Code Comments
チャンネル別に見る
自動化
テクノロジー、チームおよび環境に関する IT 自動化の最新情報
AI (人工知能)
お客様が AI ワークロードをどこでも自由に実行することを可能にするプラットフォームについてのアップデート
オープン・ハイブリッドクラウド
ハイブリッドクラウドで柔軟に未来を築く方法をご確認ください。
セキュリティ
環境やテクノロジー全体に及ぶリスクを軽減する方法に関する最新情報
エッジコンピューティング
エッジでの運用を単純化するプラットフォームのアップデート
インフラストラクチャ
世界有数のエンタープライズ向け Linux プラットフォームの最新情報
アプリケーション
アプリケーションの最も困難な課題に対する Red Hat ソリューションの詳細
仮想化
オンプレミスまたは複数クラウドでのワークロードに対応するエンタープライズ仮想化の将来についてご覧ください