フィードを購読する

現在の世界では、サービス停止を最小限に抑えて顧客にサービスを継続的に提供することが重要です。Red Hat Enterprise Linux (RHEL) High Availability Add-On は、プロダクションシステムの信頼性、スケーラビリティ、可用性を向上させることで、その目標を達成するのに役立ちます。高可用性 (HA) クラスタは単一障害点を排除し、あるノードが動作しなくなった場合にサービスをあるクラスタノードから別のクラスタノードにフェイルオーバーすることでこれを実現します

この記事では、ha_cluster RHEL システムロールを使用して、アクティブ/パッシブモードの共有ストレージを備えた Apache HTTP サーバーを実行する HA クラスタを設定する方法を説明します。

RHEL システムロールは RHEL に含まれる Ansible ロールとモジュールのコレクションです。一貫したワークフローを提供し、手動タスクの実行を効率化するのに役立ちます。RHEL HA クラスタリングの詳細については、「 高可用性 (HA) クラスタの構成および管理」ドキュメントをご覧ください。

環境の概要

私のサンプルの環境では、controlnodeという名前のコントロールノードシステムと、 rhel8-node1rhel8-node2という 2 つの管理対象ノードがあり、それらすべては RHEL 8.6 を実行しています。両方の管理対象ノードは、ホスト名 apc-switchを持つ APC 電源スイッチを介して支えられています。

ノード rhel8-node1rhel8-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-activatemy_lvm リソースによってアクティブ化されます。
  • ext4 ファイルシステムは、共有ストレージデバイス /dev/my_vg/my_lv から、ocf:heartbeat:Filesystem タイプの my_fs リソースによって /var/www にマウントされます。
  • HTTP サーバーのフローティング IP アドレス 198.51.100.3/24 は、タイプ ocf:heatheat:IPaddr2VirtualIP リソースによって管理されます。
  • HTTP サーバーは、タイプ ocf:heatheat:apacheWebsite リソースによって表されます。その設定ファイルは /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 の完了後、失敗したタスクがないか確認します。

Screenshot of a Linux terminal showing no failed tasks

設定の検証

クラスタがセットアップ済みでリソースを実行していることを確認するため、rhel8-node1 にログインし、クラスタのステータスを表示します。

Screenshot of a linux terminal displaying the cluster status of rhel8-node1

rhel8-node2 でも確認します。これは同じ出力を表示します。

次に、Web ブラウザーを開き、IP 198.51.100.3 に接続して Web サイトにアクセスできることを確認します。

フェイルオーバーをテストするために、rhel8-node1 からネットワークケーブルを引き出します。しばらくするとクラスタがフェイルオーバーを実行し、rhel8-node1 をフェンスします。rhel8-node2 にログインし、クラスタのステータスを表示します。すべてのリソースが rhel8-node1 から rhel8-node2 に移行されたことが示されます。また、Web ブラウザーで Web サイトをリロードし、引き続きアクセスできることを確認します。

Screenshot of a linux terminal displaying the cluster status of rhel8-node2

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.

Read full bio
UI_Icon-Red_Hat-Close-A-Black-RGB

チャンネル別に見る

automation icon

自動化

テクノロジー、チームおよび環境に関する IT 自動化の最新情報

AI icon

AI (人工知能)

お客様が AI ワークロードをどこでも自由に実行することを可能にするプラットフォームについてのアップデート

open hybrid cloud icon

オープン・ハイブリッドクラウド

ハイブリッドクラウドで柔軟に未来を築く方法をご確認ください。

security icon

セキュリティ

環境やテクノロジー全体に及ぶリスクを軽減する方法に関する最新情報

edge icon

エッジコンピューティング

エッジでの運用を単純化するプラットフォームのアップデート

Infrastructure icon

インフラストラクチャ

世界有数のエンタープライズ向け Linux プラットフォームの最新情報

application development icon

アプリケーション

アプリケーションの最も困難な課題に対する Red Hat ソリューションの詳細

Original series icon

オリジナル番組

エンタープライズ向けテクノロジーのメーカーやリーダーによるストーリー