現在の世界では、サービス停止を最小限に抑えて顧客にサービスを継続的に提供することが重要です。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 successful
your-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.
チャンネル別に見る
自動化
テクノロジー、チームおよび環境に関する IT 自動化の最新情報
AI (人工知能)
お客様が AI ワークロードをどこでも自由に実行することを可能にするプラットフォームについてのアップデート
オープン・ハイブリッドクラウド
ハイブリッドクラウドで柔軟に未来を築く方法をご確認ください。
セキュリティ
環境やテクノロジー全体に及ぶリスクを軽減する方法に関する最新情報
エッジコンピューティング
エッジでの運用を単純化するプラットフォームのアップデート
インフラストラクチャ
世界有数のエンタープライズ向け Linux プラットフォームの最新情報
アプリケーション
アプリケーションの最も困難な課題に対する Red Hat ソリューションの詳細
オリジナル番組
エンタープライズ向けテクノロジーのメーカーやリーダーによるストーリー
製品
ツール
試用、購入、販売
コミュニケーション
Red Hat について
エンタープライズ・オープンソース・ソリューションのプロバイダーとして世界をリードする Red Hat は、Linux、クラウド、コンテナ、Kubernetes などのテクノロジーを提供しています。Red Hat は強化されたソリューションを提供し、コアデータセンターからネットワークエッジまで、企業が複数のプラットフォームおよび環境間で容易に運用できるようにしています。
言語を選択してください
Red Hat legal and privacy links
- Red Hat について
- 採用情報
- イベント
- 各国のオフィス
- Red Hat へのお問い合わせ
- Red Hat ブログ
- ダイバーシティ、エクイティ、およびインクルージョン
- Cool Stuff Store
- Red Hat Summit