第5章 Red Hat High Availability クラスターでのアクティブ/パッシブ Apache HTTP サーバーの設定

以下の手順では、pcs を使用して、2 ノードの Red Hat Enterprise Linux High Availability Add-On クラスターでアクティブ/パッシブな Apache HTTP サーバーを設定し、クラスターリソースを設定します。このユースケースでは、クライアントはフローティング IP アドレスを使用して Apache HTTP サーバーにアクセスします。Web サーバーは、クラスターにある 2 つのノードのいずれかで実行します。Web サーバーが実行しているノードが正常に動作しなくなると、Web サーバーはクラスターの 2 番目のノードで再起動し、サービスの中断は最小限に抑えられます。

図5.1「2 ノードの Red Hat High Availability クラスターの Apache」 は、クラスターがネットワーク電源スイッチと共有ストレージで構成された 2 ノードの Red Hat High Availability クラスターであるクラスターの高レベルの概要を示しています。クライアントは仮想 IP を使用して Apache HTTP サーバーにアクセスするため、クラスターノードはパブリックネットワークに接続されます。Apache サーバーは、ノード 1 またはノード 2 のいずれかで実行します。いずれのノードも、Apache のデータが保持されるストレージにアクセスできます。この図では、Web サーバーが ノード 1 で実行しており、ノード 1 が正常に動作しなくなると、ノード 2 がサーバーを実行できます。

図5.1 2 ノードの Red Hat High Availability クラスターの Apache

2 ノードの Red Hat High Availability クラスターの Apache

このユースケースでは、システムに以下のコンポーネントが必要です。

  • 各ノードに電源フェンスが設定されている 2 ノードの Red Hat High Availability クラスター。プライベートネットワークが推奨されますが、必須ではありません。この手順では、「Pacemaker を使用した Red Hat High Availability クラスターの作成」で説明されているサンプルのクラスターを使用します。
  • Apache に必要なパブリック仮想 IP アドレス。
  • iSCSI、ファイバーチャネル、またはその他の共有ネットワークブロックデバイスを使用する、クラスターのノードに対する共有ストレージ。

クラスターは、Web サーバーで必要な LVM リソース、ファイルシステムリソース、IP アドレスリソース、Web サーバーリソースなどのクラスターコンポーネントを含む Apache リソースグループで設定されます。このリソースグループは、クラスター内のあるノードから別のノードへのフェールオーバーが可能なため、いずれのノードでも Web サーバーを実行できます。このクラスターのリソースグループを作成する前に、以下の手順を実行します。

  1. 論理ボリューム my_lv に、 ext4 ファイルシステムを設定します。
  2. Web サーバーを設定します。

上記の手順をすべて完了したら、リソースグループと、そのグループに追加するリソースを作成します。

5.1. Pacemaker クラスターで ext4 ファイルシステムを持つ LVM ボリュームの設定

このユースケースでは、クラスターのノード間で共有されるストレージに、LVM 論理ボリュームを作成する必要があります。

注記

LVM ボリュームと、クラスターノードで使用するパーティションおよびデバイスは、クラスターノード以外には接続しないでください。

以下の手順では、LVM 論理ボリュームを作成して Pacemaker クラスターで使用できるように、ボリュームに ext4 ファイルシステムを作成します。この例では、LVM 論理ボリュームを作成する LVM 物理ボリュームを保管するのに、共有パーティション /dev/sdb1 が使用されます。

  1. クラスターの両ノードで以下の手順を実行し、LVM システム ID の値を、システムの uname 識別子の値に設定します。LVM システム ID を使用すると、クラスターのみがボリュームグループをアクティブにできるようになります。

    1. /etc/lvm/lvm.conf 設定ファイルの system_id_source 設定オプションを uname に設定します。

      # Configuration option global/system_id_source.
      system_id_source = "uname"
    2. ノードの LVM システム ID が、ノードの uname に一致することを確認します。

      # lvm systemid
        system ID: z1.example.com
      # uname -n
        z1.example.com
  2. LVM ボリュームを作成し、そのボリュームに ext4 ファイルシステムを作成します。/dev/sdb1 パーティションは共有されるストレージであるため、この手順のこの部分は、1 つのノードでのみ実行してください。

    1. パーティション /dev/sdb1 に LVM 物理ボリュームを作成します。

      # pvcreate /dev/sdb1
        Physical volume "/dev/sdb1" successfully created
    2. 物理ボリューム /dev/sdb1 で構成されるボリュームグループ my_vg を作成します。

      # vgcreate my_vg /dev/sdb1
        Volume group "my_vg" successfully created
    3. 新規ボリュームグループには、実行中のノードで、かつボリュームグループの作成元であるノードのシステム ID があることを確認します。

      # vgs -o+systemid
        VG    #PV #LV #SN Attr   VSize  VFree  System ID
        my_vg   1   0   0 wz--n- <1.82t <1.82t z1.example.com
    4. ボリュームグループ my_vg を使用して、論理ボリュームを作成します。

      # lvcreate -L450 -n my_lv my_vg
        Rounding up size to full physical extent 452.00 MiB
        Logical volume "my_lv" created

      lvs コマンドを実行すると、論理ボリュームを表示できます。

      # lvs
        LV      VG      Attr      LSize   Pool Origin Data%  Move Log Copy%  Convert
        my_lv   my_vg   -wi-a---- 452.00m
        ...
    5. 論理ボリューム my_lv に、ext4 ファイルシステムを作成します。

      # mkfs.ext4 /dev/my_vg/my_lv
      mke2fs 1.44.3 (10-July-2018)
      Creating filesystem with 462848 1k blocks and 115824 inodes
      ...

5.2. 複数のクラスターノードでボリュームグループがアクティブ化されないようにする

この手順では、クラスターで Pacemaker が管理するボリュームグループが起動時に自動的にアクティブにならないようにします。Pacemaker ではなく起動時にボリュームグループが自動的にアクティブになる場合は、ボリュームグループが複数のノードで同時にアクティブになるリスクがあり、ボリュームグループのメタデータが破損する可能性があります。

この手順では、/etc/lvm/lvm.conf 設定ファイルの auto_activation_volume_list エントリーを変更します。auto_activation_volume_list エントリーは、自動アクティベーションを特定の論理ボリュームに制限するために使用されます。auto_activation_volume_list を空のリストに設定すると、自動アクティベーションは完全に無効になります。

共有されず、Pacemaker によって管理されないローカルボリュームは、auto_activation_volume_list エントリーに含める必要があります。これには、ノードのローカルルートおよびホームディレクトリーに関連するボリュームグループが含まれます。クラスターマネージャーが管理するボリュームグループはすべて、auto_activation_volume_list エントリーから除外する必要があります。

手順

クラスターの各ノードで以下の手順を実行します。

  1. 次のコマンドで、ローカルストレージに現在設定されているボリュームグループを確認します。これにより、現在設定されているボリュームグループの一覧が出力されます。root と、このノード上のホームディレクトリーに、別のボリュームグループに領域を割り当てられると、この例にあるように、これらのボリュームが出力に表示されます。

    # vgs --noheadings -o vg_name
      my_vg
      rhel_home
      rhel_root
  2. my_vg (クラスター用に定義したボリュームグループ)以外のボリュームグループをエントリーとして /etc/lvm/lvm.conf 設定ファイルの auto_activation_volume_list に追加します。

    たとえば、root とホームディレクトリー用に、別のボリュームグループに領域を割り当てると、lvm.conf ファイルの auto_activation_volume_list 行のコメントを解除し、これらのボリュームグループをエントリーとして auto_activation_volume_list に追加します。クラスター用に定義したボリュームグループ(この例ではmy_vg )は、この一覧には記載されていません。

    auto_activation_volume_list = [ "rhel_root", "rhel_home" ]
    注記

    クラスターマネージャー外にアクティベートするノードにローカルボリュームグループが存在しない場合は、auto_activation_volume_list = [] として auto_activation_volume_list エントリーを初期化する必要があり ます。

  3. initramfs ブートイメージを再構築して、ブートイメージがクラスターによって制御するボリュームグループをアクティブ化しないようにします。以下のコマンドを使用して initramfs デバイスを更新します。このコマンドは、完了までに最大 1 分かかる場合があります。

    # dracut -H -f /boot/initramfs-$(uname -r).img $(uname -r)
  4. ノードを再起動します。

    注記

    ブートイメージを作成したノードを起動してから新しい Linux カーネルをインストールした場合には、新しい initrd イメージは作成時に稼働していたカーネル用の新規カーネル用となり、ノードの再起動時に稼働している新しいカーネルには対応しません。再起動前および再起動後に uname -r コマンドを実行して、実行しているカーネルリリースを判別することで、正しい initrd デバイスが使用中のことを確認できます。リリースが同じでない場合には、新しいカーネルで再起動した後に initrd ファイルを更新してから、ノードをリブートします。

  5. ノードが再起動したら、そのノードで pcs cluster status コマンドを実行して、クラスターサービスがそのノードで再度起動したかどうかを確認します。この場合、Error: cluster is not running on this node というメッセージが表示さ れた場合には、以下のコマンドを入力します。

    # pcs cluster start

    または、クラスターの各ノードを再起動し、次のコマンドを使用してクラスター内のすべてのノードでクラスターサービスを開始するまで待機することができます。

    # pcs cluster start --all

5.3. Apache HTTP サーバーの設定

以下の手順で、Apache HTTP サーバーを設定します。

  1. クラスターの各ノードに、Apache HTTP サーバーがインストールされていることを確認します。Apache HTTP サーバーのステータスを確認するには、クラスターに wget ツールがインストールされている必要があります。

    各ノードで、以下のコマンドを実行します。

    # yum install -y httpd wget

    firewalld デーモンを実行している場合は、クラスターの各ノードで、Red Hat High Availability Add-On に必要なポートを有効にします。

    # firewall-cmd --permanent --add-service=high-availability
    # firewall-cmd --reload
  2. Apache リソースエージェントが Apache HTTP サーバーのステータスを取得できるようにするには、クラスター内の各ノードの /etc/httpd/conf/httpd.conf ファイルに以下のテキストが含まれ、コメントアウトされていないことを確認してください。これが記載されていない場合は、ファイルの末尾に追加します。

    <Location /server-status>
        SetHandler server-status
        Require local
    </Location>
  3. apache リソースエージェントを使用して Apache を管理する場合は systemd が使用されません。このため、Apache で提供される logrotate スクリプトを編集して、systemctl を使用して Apache を再ロードしないようにする必要があります。

    クラスター内の各ノードで、/etc/logrotate.d/httpd ファイルから以下の行を削除します。

    /bin/systemctl reload httpd.service > /dev/null 2>/dev/null || true

    削除した行を以下の 3 行に置き換えます。

    /usr/bin/test -f /run/httpd.pid >/dev/null 2>/dev/null &&
    /usr/bin/ps -q $(/usr/bin/cat /run/httpd.pid) >/dev/null 2>/dev/null &&
    /usr/sbin/httpd -f /etc/httpd/conf/httpd.conf \
    -c "PidFile /run/httpd.pid" -k graceful > /dev/null 2>/dev/null || true
  4. Apache で提供する Web ページを作成します。クラスター内のいずれかのノードに、「LVM ボリュームと ext4 ファイルシステムの設定」で作成したファイルシステムをマウントし、そのファイルシステムで index.html ファイルを作成し、ファイルシステムをアンマウントします。

    # mount /dev/my_vg/my_lv /var/www/
    # mkdir /var/www/html
    # mkdir /var/www/cgi-bin
    # mkdir /var/www/error
    # restorecon -R /var/www
    # cat <<-END >/var/www/html/index.html
    <html>
    <body>Hello</body>
    </html>
    END
    # umount /var/www

5.4. リソースおよびリソースグループの作成

このユースケースでは、クラスターリソースを 4 つ作成する必要があります。すべてのリソースが必ず同じノードで実行するように、このリソースを、リソースグループ apachegroup に追加します。作成するリソースは、以下の順に開始します。

  1. 「LVM ボリュームと ext4 ファイルシステムの設定」で作成した LVM ボリュームグループを使用する LVM リソース my_lvm
  2. 「LVM ボリュームと ext4 ファイルシステムの設定」で作成したファイルシステムデバイス /dev/my_vg/my_lv を使用する Filesystem リソース my_fs
  3. apachegroup リソースグループのフローティング IP アドレスである IPaddr2 リソース。物理ノードに関連付けられている IP アドレスは使用できません。IPaddr2 リソースの NIC デバイスを指定していない場合は、そのノードに静的に割り当てられている IP アドレスの 1 つと同じネットワークにフローティング IP が存在していないと、フローティング IP アドレスを割り当てる NIC デバイスが適切に検出されません。
  4. apache リソース Website で、index.html ファイルと「Apache HTTP サーバーの設定」で定義した Apache 設定を使用します。

以下の手順で、apachegroup リソースグループと、このグループに追加するリソースを作成します。リソースは、グループに追加された順序で起動し、その逆の順序で停止します。この手順は、クラスター内のいずれかのノードで実行してください。

  1. 次のコマンドは、LVM が有効 なリソース my_lvm を作成します。リソースグループ apachegroup は存在しないため、このコマンドによりリソースグループが作成されます。

    注記

    アクティブ/パッシブの HA 設定で、同じ LVM ボリュームグループを使用する LVM が有効 なリソースを複数設定するとデータが破損する場合があるため、そのようなリソースは 1 つ以上設定しないでください。また、LVM が有効 なリソースは、アクティブ/パッシブの HA 設定のクローンリソースとして設定しないでください。

    [root@z1 ~]# pcs resource create my_lvm ocf:heartbeat:LVM-activate vgname=my_vg vg_access_mode=system_id --group apachegroup

    リソースを作成すると、そのリソースは自動的に起動します。以下のコマンドを使用すると、リソースが作成され、起動していることを確認できます。

    # pcs resource status
     Resource Group: apachegroup
         my_lvm	(ocf::heartbeat:LVM-activate):	Started

    pcs resource disable コマンドおよび pcs resource enable コマンドを使用すると、各リソースを個別に停止および起動できます。

  2. 以下のコマンドでは、設定に必要な残りのリソースを作成し、作成したリソースを既存の apachegroup リソースグループに追加します。

    [root@z1 ~]# pcs resource create my_fs Filesystem \
    device="/dev/my_vg/my_lv" directory="/var/www" fstype="ext4" \
    --group apachegroup
    
    [root@z1 ~]# pcs resource create VirtualIP IPaddr2 ip=198.51.100.3 \
    cidr_netmask=24 --group apachegroup
    
    [root@z1 ~]# pcs resource create Website apache \
    configfile="/etc/httpd/conf/httpd.conf" \
    statusurl="http://127.0.0.1/server-status" --group apachegroup
  3. リソースと、そのリソースを含むリソースグループの作成が完了したら、クラスターのステータスを確認します。4 つのリソースがすべて同じノードで実行していることに注意してください。

    [root@z1 ~]# pcs status
    Cluster name: my_cluster
    Last updated: Wed Jul 31 16:38:51 2013
    Last change: Wed Jul 31 16:42:14 2013 via crm_attribute on z1.example.com
    Stack: corosync
    Current DC: z2.example.com (2) - partition with quorum
    Version: 1.1.10-5.el7-9abe687
    2 Nodes configured
    6 Resources configured
    
    Online: [ z1.example.com z2.example.com ]
    
    Full list of resources:
     myapc	(stonith:fence_apc_snmp):	Started z1.example.com
     Resource Group: apachegroup
         my_lvm	(ocf::heartbeat:LVM):	Started z1.example.com
         my_fs	(ocf::heartbeat:Filesystem):	Started z1.example.com
         VirtualIP	(ocf::heartbeat:IPaddr2):	Started z1.example.com
         Website	(ocf::heartbeat:apache):	Started z1.example.com

    クラスターのフェンスデバイスを設定していないと、リソースがデフォルトで起動しません。

  4. クラスターが稼働したら、ブラウザーで、IPaddr2 リソースとして定義した IP アドレスを指定して、「Hello」と単語が表示されるサンプル表示を確認します。

    Hello

    設定したリソースが実行していない場合は、pcs resource debug-start resource コマンドを実行して、リソースの設定をテストします。

5.5. リソース設定のテスト

「リソースおよびリソースグループの作成」で説明するクラスターのステータス表示では、すべてのリソースが z1.example.com ノードで実行します。以下の手順に従い、1 番目のノードを スタンバイ モードにし、リソースグループが z2.example.com ノードにフェールオーバーするかどうかをテストします。1 番目のノードをスタンバイモードにすると、このノードはリソースをホストできなくなります。

  1. 以下のコマンドは、z1.example.com ノードを スタンバイ モードにします。

    [root@z1 ~]# pcs node standby z1.example.com
  2. z1スタンバイ モードにしたら、クラスターのステータスを確認します。リソースはすべて z2 で実行しているはずです。

    [root@z1 ~]# pcs status
    Cluster name: my_cluster
    Last updated: Wed Jul 31 17:16:17 2013
    Last change: Wed Jul 31 17:18:34 2013 via crm_attribute on z1.example.com
    Stack: corosync
    Current DC: z2.example.com (2) - partition with quorum
    Version: 1.1.10-5.el7-9abe687
    2 Nodes configured
    6 Resources configured
    
    Node z1.example.com (1): standby
    Online: [ z2.example.com ]
    
    Full list of resources:
    
     myapc	(stonith:fence_apc_snmp):	Started z1.example.com
     Resource Group: apachegroup
         my_lvm	(ocf::heartbeat:LVM):	Started z2.example.com
         my_fs	(ocf::heartbeat:Filesystem):	Started z2.example.com
         VirtualIP	(ocf::heartbeat:IPaddr2):	Started z2.example.com
         Website	(ocf::heartbeat:apache):	Started z2.example.com

    定義している IP アドレスの Web サイトは、中断せず表示されているはずです。

  3. スタンバイ モードから z1 を削除するには、以下のコマンドを実行します。

    [root@z1 ~]# pcs node unstandby z1.example.com
    注記

    ノードを スタンバイ モードから削除しても、リソースはそのノードにフェイルオーバーしません。これは、リソースの resource-stickiness の値により異なります。resource-stickiness メタ属性の詳細は、「現在のノードを優先するリソースの設定」を参照してください。


このページには機械翻訳が使用されている場合があります (詳細はこちら)。