Apache on CLUSTERPRO for Linux HOWTO 1 はじめに この 文 章 は Linuxの 標 準 HTTPサーバであるApacheとCLUSTERPRO for Linuxを 組 み 合 わせてフェイル オーバクラスタを 構 成 するのに 必 要 な 情 報 を 記 述 したものです HTTPサーバをフェイルオーバクラスタ 化 す ることにより 単 一 Linuxサーバでは 達 成 し 得 ない 可 用 性 信 頼 性 の 高 いHTTPサーバを 構 築 することができ ます この 文 章 を 書 くにあたって 次 のバージョンのソフトウェアを 使 用 しました この 他 のバージョンのソフトウェ アを 使 用 した 場 合 でも いくつかの 設 定 項 目 の 読 み 替 えでクラスタ 化 できると 思 われます TurboLinux Server 日 本 語 版 6.1 CLUSTERPRO for Linux Ver1.0 Apache-1.3.12-5 2 責 任 範 囲 この 文 章 は Apacheをクラスタ 化 するための 注 意 点 や 設 定 例 を 参 考 情 報 として 示 すものであり これらの 動 作 保 証 を 行 うものではありません 3 どのようにクラスタ 化 するか (1) HTMLドキュメント およびCGIで 用 いるデータファイルを 共 有 ディスク 上 のパーティション に 配 置 設 定 を 行 うことで HTTPデータの 引 き 継 ぎを 行 います これによって 現 用 系 サーバの 障 害 時 に 待 機 系 サーバでHTTPサービスの 提 供 が 可 能 になります (2) この 文 章 で 扱 っているのは HTTPサーバが1ノードあたり1つのみ 動 作 する 片 方 向 スタンバ イシステムの 構 築 例 です クライアント フローティングIPアドレスで 接 続 現 用 系 fip NEC Express5800/130Dp ro NEC Express5800/130Dp ro 待 機 系 HTTP サーバ HTMLドキュメント CGI 用 データファイル 図 はHTTPサーバを2ノードクラスタ 化 したときの 構 成 イメージです CLUSTERPROのフェイルオーバグループには フローティングIPアドレス HTMLドキュメントを 格 納 す る 切 り 替 えパーティション Apacheの 起 動 終 了 スクリプトを 設 定 します また Apacheが 起 動 するサーバ 上 では HTMLドキュメントを 置 く 共 有 ディスク 内 のディレクトリを 設 定 します これによって 現 用 系 サーバに 障 害 が 発 生 したときに 待 機 系 でフェイルオーバグループを 起 動 することで クライアントからはサービスノードがどちらかを 気 にせずにHTTPサービスを 享 受 できます 4 事 前 準 備 1. ユーザnobodyのユーザID グループnobodyのグループIDが クラスタを 構 成 する 全 てのサーバで
同 一 であることを 確 認 してください (Apacheがnobodyのユーザアカウントを 用 いるため) 2. HTMLドキュメントを 共 有 ディスク 内 に 置 く 必 要 があります まず ディレクトリを 作 成 します 以 下 に 共 有 ディスクのマウントポイントを/mnt/sdb2に 置 いた 場 合 のコマンド 入 力 例 を 示 します umask 022 mkdir /mnt/sdb2/httpd mkdir /mnt/sdb2/httpd/html mkdir /mnt/sdb2/httpd/cgi-bin mkdir /mnt/sdb2/httpd/icons 次 に HTMLドキュメントの 各 ファイルを 共 有 ディスクのマウントポイントの 下 のhttpdディレクトリ 配 下 に 配 置 します 5 クラスタ 化 のための 設 定 5.1 Apacheコンフィグファイルの 編 集 クライアント 側 からHTMLデータの 要 求 を 受 けたときに 共 有 ディスク 内 のファイルが 読 み 込 まれるように するため httpd.conf,access.conf,srm.conf 等 の 変 更 が 必 要 です それには コンフィグファイルを 直 接 編 集 する 方 法 と Management Consoleを 用 いて 設 定 する 方 法 の2 通 り の 方 法 があります なお 設 定 はクラスタを 構 成 する 全 てのサーバで 行 ってください 以 下 説 明 内 で 網 掛 け 斜 体 字 の 部 分 は 環 境 に 合 わせて 変 更 してください (1)Management Consoleを を 用 いて 設 定 を 行 う 場 合 1. 仮 想 サーバの 基 本 設 定 サービス - Webサーバ(Apache) で 仮 想 サーバ 設 定 の[ 編 集 ]ボタンを 押 します 仮 想 サーバの 基 本 設 定 で 以 下 のように 設 定 します サーバ 名 :_default_ 又 は フローティングIPアドレス ドキュメントルート:/mnt/sdb2/httpd/html 2.ディレクトリ 設 定 ディレクトリ 設 定 で 追 加 ボタンを 押 します 以 下 の 画 面 が 表 示 されます 2
ここで つぎのように 設 定 してください ディレクトリ 名 : /mnt/sdb2/httpd/html デフォルトファイル 名 : index.html CGIの 実 行 を 有 効 にする: OFF SSIを 有 効 にする: OFF ディレクトリリストを 表 示 する: OFF シンボリックリンクの 参 照 を 有 効 にする: OFF.htaccessの 使 用 を 許 可 する: OFF 最 後 に 設 定 ボタン を 押 し 設 定 を 確 定 します 同 様 に 以 下 の 二 つのディレクトリを 設 定 します ディレクトリ 名 : /mnt/sdb2/httpd/icons デフォルトファイル 名 : ( 空 欄 のまま) CGIの 実 行 を 有 効 にする: OFF SSIを 有 効 にする: OFF ディレクトリリストを 表 示 する: OFF シンボリックリンクの 参 照 を 有 効 にする: OFF.htaccessの 使 用 を 許 可 する: OFF ディレクトリ 名 : /mnt/sdb2/httpd/cgi-bin デフォルトファイル 名 : ( 空 欄 のまま) CGIの 実 行 を 有 効 にする: ON SSIを 有 効 にする: OFF ディレクトリリストを 表 示 する: OFF シンボリックリンクの 参 照 を 有 効 にする: OFF.htaccessの 使 用 を 許 可 する: OFF 最 終 的 に ディレクトリ 設 定 の 表 示 は 以 下 のようになります 3
3. 仮 想 パスの 設 定 仮 想 パス 設 定 で 以 下 の 項 目 を 追 加 してください 仮 想 パス 名 : /cgi-bin 実 ディレクトリ 名 : /mnt/sdb2/httpd/cgi-bin 仮 想 パス 名 : /icons 実 ディレクトリ 名 : /mnt/sdb2/httpd/icons (2)コンフィグファイルを 直 接 編 集 する 場 合 /etc/httpd/conf 内 の 設 定 ファイルを 編 集 します 以 下 に 設 定 例 を 示 します これを 参 考 に httpd.conf,srm.conf,access.conf 等 の 設 定 ファイルを 編 集 し てください ( 注 : 本 サンプルをそのまま 使 用 しないでください) なお ここでは 以 下 の 環 境 を 想 定 しています 共 有 ディスクパーティションのマウントポイント:/mnt/sdb2 フローティングIPのサーバ 名 :www.clusterpro.co.jp 4
ServerName www.clusterpro.co.jp DocumentRoot </mnt/sdb2/httpd/html> Alias /icons/ /mnt/sdb2/httpd/icons/ ScriptAlias /cgi-bin/ /mnt/sdb2/httpd/cgi-bin/ AddHandler cgi-script.cgi <Directory "/mnt/sdb2/httpd/html"> DirectoryIndex index.html Options -ExecCGI -Includes -Indexes FollowSymLinks AllowOverride None Order allow,deny Allow from all </Directory> <Directory "/mnt/sdb2/httpd/cgi-bin"> DirectoryIndex index.cgi Options +ExecCGI -Includes -Indexes FollowSymLinks AllowOverride None Order allow,deny Allow from all </Directory> <Directory "/mnt/sdb2/httpd/icons"> Options -ExecCGI -Includes -Indexes FollowSymLinks AllowOverride None Order allow,deny Allow from all </Directory> 5.2 CLUSTERPROの の 設 定 5.2.1 フェイルオーバグループの 作 成 HTTPサービスを 実 現 するフェイルオーバグループを 一 つ 作 成 します フェイルオーバグループに 設 定 するリソースは 次 のとおりです 切 り 替 えディスクパーティション フローティングIPアドレス スクリプト 5.2.2 スクリプトの 作 成 クラスタの 起 動 時 やフェイルオーバ 時 に Apacheのサービスを 適 切 に 起 動 停 止 させるために 以 下 のよう な 手 順 で フェイルオーバグループの 開 始 終 了 スクリプトを 編 集 する 必 要 があります 1. CLUSTERPROのマネージャ 内 のグループを 右 クリックし プロパティを 選 択 します 5
2. 処 理 選 択 ウインドウで 参 照 更 新 を 選 択 し OKボタンを 押 します 3. スクリプト タブを 選 択 し START.BATとSTOP.BATを 編 集 します 以 下 に スクリプトの 一 例 を 示 します 下 線 が 引 かれたところが デフォルトのスクリプトから 追 加 された 部 分 です START.BAT 6
#! /bin/sh #*************************************** #* START.BAT * #*************************************** if [ "$ARMS_EVENT" = "START" ] if [ "$ARMS_DISK" = "SUCCESS" ] armlog "NORMAL1" armlog "`/etc/rc.d/init.d/httpd start`" if [ "$ARMS_SERVER" = "HOME" ] armlog "NORMAL2" armlog "ON_OTHER1" armlog "ERROR_DISK from START" elif [ "$ARMS_EVENT" = "RECOVER" ] armlog "RECOVER" elif [ "$ARMS_EVENT" = "FAILOVER" ] if [ "$ARMS_DISK" = "SUCCESS" ] armlog "FAILOVER1" armlog "`/etc/rc.d/init.d/httpd start`" if [ "$ARMS_SERVER" = "HOME" ] armlog "FAILOVER2" armlog "ON_OTHER2" armlog "ERROR_DISK from FAILOVER" armlog "NO_ARM" armlog "EXIT" exit 0 STOP.BAT #! /bin/sh #*************************************** #* STOP.BAT * #*************************************** if [ "$ARMS_EVENT" = "START" ] if [ "$ARMS_DISK" = "SUCCESS" ] armlog "NORMAL1" armlog "`/etc/rc.d/init.d/httpd stop`" if [ "$ARMS_SERVER" = "HOME" ] armlog "NORMAL2" 7
armlog "ON_OTHER1" armlog "ERROR_DISK from START" elif [ "$ARMS_EVENT" = "FAILOVER" ] if [ "$ARMS_DISK" = "SUCCESS" ] armlog "FAILOVER1" armlog "`/etc/rc.d/init.d/httpd stop`" if [ "$ARMS_SERVER" = "HOME" ] armlog "FAILOVER2" armlog "ON_OTHER2" armlog "ERROR_DISK from FAILOVER" armlog "NO_ARM" armlog "EXIT" exit 0 5.2.3 注 意 事 項 CGI 等 を 用 いた 動 的 なページが 存 在 する 場 合 には クライアント 側 から 受 信 したデータなどを 保 存 するファイ ルを 共 有 ディスク 上 に 置 く 必 要 があります もしそうなっていない 場 合 は HTMLドキュメントを 書 き 換 える などして 対 応 してください 6 動 作 が 確 認 されたページ 下 記 のようなページで 動 作 を 確 認 しました 1. 静 的 なページ(サーバ 側 からクライアントに 情 報 を 提 供 するだけのページ) (Apacheのデフォルトページで 動 作 を 確 認 しました) 2. CGIを 用 いたページ 下 記 のようなカウンタプログラムで 正 常 動 作 フェイルオーバ 時 の 適 切 なデータの 引 継 ぎを 確 認 しました sample.cgi #!/usr/bin/perl print "Content-type: text/html n"; print " n"; open(in,"data/number.dat"); $number = <IN> + 0; $number++; close(in); open(out, ">data/number.dat"); print OUT $number; close(out); 8
print "<html> n"; print "$number n"; open(in, "/hostname"); print <IN>; close(in); print "</html> n"; 3. Cookieを 用 いたページ 下 記 のようなカウンタプログラムで 正 常 動 作 時 フェイルオーバ 時 における 動 作 確 認 を 行 いました cookie.html <html><head> <title>cookie sample</title></head> <body> <script language="javascript"> <!-- cookie = parseint(document.cookie.substring(5,8)); if (isnan(cookie)) { cookie=0; } { cookie++; } document.write(cookie + "<BR>"); document.cookie = "NAME=" + cookie; // --> </script> </body> </html> 9