質問: ### 前提・実現したいこと 毎日決まった時間帯に、別のWEBサーバにてWEBサービスを提供したいと考えています。良い方法がないか教えてください。 ### 詳細 現在 LBに、InterSec/LBを、FWにFortigateを使用しています WEBサーバーはWindows IIS8.0を2台使用し LBで1台のWEBサーバーが停止した時に、他のもう一台のWEBサーバーに切り替わるようにしています。 LB配下のWEBサーバーを夜間用に一台追加(LB配下でなくても可)して、 夜間の決まった時間帯だけ、追加したサーバーにてサービスを行うようにしたいのです。 実際には、日中に行うWEBのサービスを、営業時間外は、ただ今サービス時間外ですという、ページを出す、夜間用のWEBサーバーに切り替えたい。(将来的には、夜間用のサービスを行うことも想定。) サービス時間外に、日中にサービスを行っているWEBサーバーのプログラムを入れ替えたり、メンテナンスをしたりを行いたいので、同一のWEBサーバーでAPで時間をみて、別のページを出すという対処でなく、別のサーバーに切替を行いたい。と考えています。 Sorryサーバーを通信の停止をトリガーでなく、スケジュールした時間帯で実行することができれば、現時点の要求には対応できそうに思うのですが、 LBではスケジュールでの切替はできないようです。 FWにて、ポリシに対してスケジュールを設定し、該当時間帯にLBへの接続を遮断してしまうということはできるようなのですが、スケジュールで他のIPアドレスのサーバーにNATするという設定は見つけられませんでした。 別のアイディアも含め、良い方法はないでしょうか? 宜しくお願いします。 ### 補足情報(FW/ツールのバージョンなど) FW:Fortigate (FortiOS5.4)Ver4.0 lb:InterSec/LB Ver4.0 IIS 8.0
回答: LBと実際のウェブサーバとの間にもう一台HTTPサーバ(apache)をはさんで、mod_rewriteの時間指定を利用するという手があります。 構成としてはこんな感じ。 ``` +------+ +------+ +---+ ->+ LB +->+apache+->+IIS+ +------+ +------+ +---+ ``` 間に挟むapacheでmod_rewriteで時間指定でsorryページへのリダイレクトをいれます。 以下では23時〜4時まではすべてのリクエストをsorry.htmlへリダイレクト。 4時〜23時までは、IISへリクエストをプロクシしています。 ``` RewriteEngine On RewriteCond %{REQUEST_URI} .* RewriteCond %{TIME_HOUR}%{TIME_MIN} > 2300 [OR] RewriteCond %{TIME_HOUR}%{TIME_MIN} < 0400 RewirteRule .* /sorry.html [R,L] RewriteCond %{REQUEST_URI} .* RewriteCond %{TIME_HOUR}%{TIME_MIN} < 2300 RewriteCond %{TIME_HOUR}%{TIME_MIN} > 0400 RewirteRule .* http://iis_server_address%{REQUEST_URI} [P,L] ``` 上記構成でのapacheは別の機械じゃなくてもIISが動作している機器上でポートを変えて動作させてもいいかと思います。機器のリブートや停止が頻繁に行われるのだったら別機器の方がいいかもしれません。 IISを停止して、アプリケーションの入れ替え、テストを行うくらいだったら別の機器をいれるまでもないかと。