DUICUO

Heartbeat を使用して高可用性の Apache クラスターを構築するにはどうすればよいでしょうか?

Heartbeatは、クラスタ間メッセージング、ノードメンバーシップ、IPアドレスの割り当てと移行、サービスの起動とシャットダウンなど、数多くのクラスタインフラストラクチャサービスを提供します。Heartbeatは、Apache、Samba、Squidなどのエンタープライズアプリケーション向けに、事実上あらゆる高可用性クラスタを構築するために使用できます。さらに、負荷分散ソフトウェアと併用することで、受信リクエストをすべてのクラスタノードに分散させることができます。

この記事のサンプルクラスターは、Heartbeatを実行する3台のサーバーで構成されています。フェイルオーバーのテスト方法は、サーバーを手動でシャットダウンし、それらのサーバーがサービスを提供するウェブサイトが引き続き利用可能かどうかを確認します。以下はテストトポロジです。

マッピングサービスで使用されるIPアドレスは、常にアクセス可能である必要があります。通常、Heartbeatは指定されたIPアドレスをマスターサーバー上の仮想ネットワークインターフェースカード(NIC)に割り当てます。マスターサーバーに障害が発生した場合、クラスターは自動的にIPアドレスを別の利用可能なサーバー上の仮想NICに切り替えます。マスターサーバーが回復すると、IPアドレスはマスターサーバーに戻ります。この移行特性のため、このIPアドレスは「フローティング」アドレスと呼ばれます。

すべてのサーバーにパッケージをインストールする

クラスターを構築するには、まず yum を使用して各ノードに必要なソフトウェア パッケージをインストールする必要があります。

  1. yum install PyXML cluster-glue cluster-glue-libs resource-agents

次に、公式の CentOS ソフトウェア リポジトリにない 2 つの Heartbeat RPM ファイルをダウンロードしてインストールします。

  1. http://dl.fedoraproject.org/pub/epel/6/x86_64/heartbeat-3.0.4-2.el6.x86_64.rpm で実行
  2. http://dl.fedoraproject.org/pub/epel/6/x86_64/heartbeat-libs-3.0.4-2.el6.x86_64.rpm を実行します。
  3. rpm -ivh ハートビート-*

あるいは、EPEL ソフトウェア リポジトリをソース ファイルに追加し、yum を使用してインストールすることもできます。

Heartbeat は Apache の httpd サービスの起動と停止を管理するので、Apache を停止して自動的に起動しないようにします。

  1. サービスhttpd停止
  2. chkconfig httpd をオフにする

ホスト名を設定する

次に、サーバーのホスト名を設定します。各システムの/etc/sysconfig/networkを編集し、HOSTNAME行を変更します。

  1. ホスト名= serverX.example.com

新しいホスト名は、次回のサーバー起動時に有効になります。`hostname` コマンドを使用すると、サーバーを再起動せずにすぐに有効にすることができます。

  1. ホスト名 serverX.example.com

各サーバーで `uname -n` を実行して、ホスト名が正しく設定されていることを確認できます。

ハートビートの設定

Heartbeat を設定するには、まずデフォルトの設定ファイルを /usr から /etc/ha.d/ にコピーする必要があります。

  1. cp /usr/share/doc/heartbeat-3.0.4/authkeys /etc/ha.d/
  2. cp /usr/share/doc/heartbeat-3.0.4/ha.cf /etc/ha.d/
  3. cp /usr/share/doc/heartbeat-3.0.4/haresources /etc/ha.d/

次に、ニーズに合わせて、すべてのクラスター ノード上の 3 つのファイルすべてを変更する必要があります。

`authkeys` ファイルには、クラスタノードが相互に通信するために使用する事前共有パスワードが含まれています。クラスタ内のすべての Heartbeat メッセージにはこのパスワードが含まれており、ノードは正しいパスワードを持つメッセージのみを処理します。Heartbeat は SHA1 と MD5 のパスワードをサポートしています。`authkeys` ファイルでは、以下のディレクティブで認証方法を SHA1 に設定し、使用するパスワードを定義します。

認証2

2 sha1事前共有パスワード

ファイルを保存し、コマンド `chmod 600 /etc/ha.d/authkeys` を使用してファイルに `r--` 権限を付与します。

次に、ha.cf ファイルで、タイマー、クラスター ノード、メッセージ パッシング メカニズム、レイヤー 4 ポート、その他の設定を定義します。

  1. ## ログ##
  2. ログファイル /var/log/ha-log
  3. ログ機能 local0hea
  4. ## タイマー ##
  5. ## すべてのタイマーを秒単位に設定します。時間をミリ秒単位で設定する必要がある場合は、「ms」を使用してください。##
  6. ## ハートビート間隔 ##
  7. キープアライブ2
  8. この時間が経過すると、ノードは停止したとみなされます。
  9. デッドタイム 15
  10. ## 一部のサーバーは起動に時間がかかります。このタイマーは、サーバーの障害を確認するまでの追加待機時間を定義します。##
  11. このタイマーに推奨される期間は、ストール タイマーの少なくとも 2 倍です。
  12. 初期デッド 120
  13. ## メッセージパッシングパラメータ ##
  14. udpport 694
  15. マルチキャスト eth0
  16. マルチキャストまたはユニキャストを使用することもできます。
  17. ## ノード定義 ##
  18. ## ホスト名が uname -n と一致していることを確認する ##
  19. ノード server1.example.com
  20. ノード server2.example.com
  21. ノード server3.example.com

最後に、`haresources` ファイルには、Heartbeat がマスターノードと見なすサーバーのホスト名と、そのフローティング IP アドレスが含まれます。このファイルはすべてのサーバーで同一であることが重要です。マスターノードが実行中である限り、すべてのリクエストに応答します。Heartbeat は他のすべてのノードの高可用性サービスを停止します。Heartbeat はマスターノードの停止を検出すると、クラスター内の次に利用可能なノードでサービスを自動的に開始します。マスターノードが回復すると、Heartbeat はタスクをマスターノードに引き継ぎ、すべてのリクエストに応答します。最後に、このファイルには、高可用性サービスを担当するスクリプトの名前が含まれます。ここでは `httpd` です。他に指定できる値は `squid`、`smb`、`nmb`、`postfix` で、これらは通常 `/etc/init.d/` ディレクトリにあるサービス起動スクリプトの名前にマッピングされます。

haresources で、server1.example.com をプライマリサーバー、192.168.56.200 をフローティングIPアドレス、httpd を高可用性サービスとして定義します。インターフェースを作成する必要はなく、インターフェースにフローティングIPアドレスを手動で割り当てる必要もありません。Heartbeat がこれらのタスクを自動的に処理します。

  1. server1.example.com 192.168.56.200 httpd

各サーバーの構成ファイルの準備ができたら、Heartbeat サービスを開始し、システムのスタートアップ項目に追加します。

  1. サービスハートビートの開始
  2. chkconfig ハートビートオン

コマンド `tailf /var/log/ha-log` を使用して、Heartbeat ログを詳しく監視できます。

Heartbeatは複数のサービスで使用できます。例えば、haresourcesに以下のディレクティブを追加すると、HeartbeatはApacheとSambaの両方のサービスを同時に管理できるようになります。

  1. server1.example.com 192.168.56.200 httpd smb nmb

ただし、Pacemakerのようなクラスターリソースマネージャー(CRM)をまだ実行していない限り、Heartbeatを使用して単一クラスター内で複数のサービスを提供することはお勧めしません。Pacemakerを使用しない場合、Heartbeatはレイヤー3でクラスターノードを監視するためにIPアドレスを使用します。IPアドレスにアクセスできる限り、Heartbeatはサーバーノードでサービスがクラッシュしたり問題が発生したりしても無視します。

テスト

Heartbeat をセットアップして実行したら、テストしてみる価値があります。3 つのサーバーすべてに個別の index.html ファイルを作成し、どのサーバーがページを提供しているかを確認できるようにします。DNS が正しく設定されていれば、192.168.56.200 にアクセスすると、対応するドメインにアクセスできるはずです。ページは server1.example.com から読み込まれるはずです。server1 の Apache ログファイルを確認することで確認できます。ページを更新して、毎回同じサーバーから読み込まれていることを確認してください。

すべてがうまくいけば、フェイルオーバーメカニズムをテストします。server1.example.com の Heartbeat サービスを停止します。フローティング IP アドレスが server2 に移行し、ページがそのサーバーから読み込まれるはずです。server2 の Apache ログを簡単に確認して、これを確認してください。server2 のサービスも停止すると、Web ページはクラスター内で唯一利用可能なノードである server3.example.com から読み込まれます。server1 と server2 の両方でサービスを再起動すると、haresources で設定されたとおりに、フローティング IP アドレスがアクティブノードから server1 に移行します。

ご覧のとおり、Heartbeatを使えばCentOS上で高可用性Apacheクラスターを簡単に構築できます。今回は3台のサーバーを使用しましたが、Heartbeatはノード数が多い環境でも少ない環境でも同様に動作します。Heartbeatにはノード数制限がないため、必要に応じて環境を拡張できます。

元のリンク: http://www.openlogic.com/wazi/bid/350999/how-to-set-up-a-highly-available-apache-cluster-using-heartbeat