[Web][BLOG] Webサーバの冗長化に挑んでみた。

自分自身、エンプラ方面でWebサーバの構築に携わったことはないんだけど、今後関わることもあろうかと思い、ひっそりと勉強していたりするわけなんですが。とりあえず、自宅のWebサーバをもう少し可用性向上を図りたいなーなんて考え、それまでシングルサーバで構成してたBLOGサーバを色々組み替えることにしました。

blog_infra_design_20161215a今までは、一応WWWサーバのフロントにWAF(UTM)をおいて構成しており、不具合発生時に備えてコールドスタンバイサーバを構成するという感じにしてました。今回は上図のように、

  • WebサーバをActive/Activeで構成する
  • 上位にロードバランサを配置する
  • DBサーバは外出し構成にする
  • 各種共有すべきデータ領域は、NFSで賄う

という感じに組み替えることにしました。

WWW1サーバやWWW2サーバ、DBサーバの組み換え自体は実はそんなに難しくなくて、

  • Conf領域:/etc/httpd
  • Contents領域:/home
  • DB Data領域:/var/lib/mysql

をNFSストレージにおいて双方のWWWサーバからNFSマウントするだけ。ストレージが障害となった場合の影響が大きくなる構成ではありますが、個人サイトだしそこは良いかなと思ったり。障害時はUnity VSAの機能で手動Failoverさせればちゃんと復帰できるしということで。

苦労したのはLoad Balancerでした。今回、以下のような形でSSL終端を構成しようとしてました。

ssl-offload_20161216aこれをしようとすると、何故か以下の通りになるんすよね。

  • 自宅からのアクセスに対して、CSSがお陀仏になる。
  • CSSお陀仏時、証明書ステータスがおかしな状態になる。
  • 外からアクセスした場合、とあるリンクをクリックすると内部アドレスが漏洩する

最終的に取った施策は以下のとおりです。

【ApacheのListen設定・NameVirtualServer設定・VirtualServer設定を変更】

ポート80とは別のVirtualHostを構成し、ここに明示的にhttps://www.bluecore.net:443を返すように構成をしました。

Listen 80
Listen 8443


NameVirtualHost *:80
NameVirtualHost *:8443


<VirtualHost *:80>
ServerName https://www.bluecore.net:80

(その他もろもろの設定を追加)
</VirtualHost>

<VirtualHost *:8443>
ServerName https://www.bluecore.net:443
(その他もろもろの設定を追加)

</VirtualHost>

【wp-config.phpに以下の設定を追加】

if (isset($_SERVER[‘HTTP_X_FORWARDED_PROTO’]) && $_SERVER[‘HTTP_X_FORWARDED_PROTO’] === “https”) {
$_SERVER[‘HTTPS’] = ‘on’;
}

【ロードバランサにRewriteプロファイルを突っ込む】

今回はf5のbig-ip veを使ってるのですが、VirtualServer設定に以下の設定を追加します。

001

続いて、LocalTraffic⇒Profile⇒Services⇒Rewriteを選択した後、「rewrite-uri-translation」を指定して、「URI Translation」⇒「Setting」を指定、「Insert X-Forwarded-Proto Header」を追加002

【LB上のデフォルトプールは、8443ポートを指定したものを指定する】

以上で、外からも内からもなんとかまともに参照できるよう構成できました。もしかしたら手順の中に蛇足とかがあったりするのかもしれません。ただそれにしても、wordpressをLB配下においてSSLオフロードするだけで、こんなに手間がかかるとは思いませんでした。てっきりお手軽に冗長化できるんじゃないかと思ってたんだけど、あまかったですなー。

実はこの手の構築、自宅でそこそこやってるのにどーして仕事でできないの?と言われると、自宅でやってるのは「とりあえず動けばいい&最低限のセキュリティが備わってればいい」と考えて組んでたからです。

なので、どうしても「早く動かしたい」という思いが先行して、参考サイトの手順をそのまんま何も考えずに実行しちゃうんですねー。なので、何度手を動かしても頭に入らない。動かしたあとのカスタマイズとかは多少頭にはいるんですけどね。

そういう意味で、構築は繰り返し実施するけど、設計がおざなりなのです。そういうところをちゃんと組み立てて着手していけば、もっとノウハウ溜まっていくのになーと思うんですが、なかなか難しいもんですね^^;継続して勉強したいと思います。

あ、ちなみに今回使ったロードバランサ、f5 NetworksのBIG-IP VEですが、生まれて初めて触りました。BIG-IPといえばかなりメジャーなロードバランサですが、ロードバランサだけはなかなか触る機会がなく・・・気づけばこの歳まで全く触ったことがありませんでした。

今回、30日評価版(機能制限なし)を使って組んでいるのですが、10Mbps規制以外は期限含めて無制限というLABライセンスなるものの存在を知り、なんと価格が衝撃の2万円ポッキリ。NTT-X Storeで購入に踏み切りました。納期は2016年12月末頃らしい・・・

ちなみに、30日評価版の他に、もっと簡易的な90日評価版(機能制限あり)がありますが、こいつはあまりおすすめしません。というのも、

  • 帯域が1Mbpsに縛られていて、Monitoringもままならないことがちょいちょい発生する
  • clientsslプロファイルを新規追加できない
  • clientsslプロファイルで使用できる暗号方式の設定値が「DEFAULT」以外選択できない

という問題があるためです。alertdにメール通知の設定入れたら、アホみたいに障害メールが飛んできてビビりました^^;評価するのなら、30日評価版をおすすめしますです。あと、末永く検証してみるのなら、LABライセンスの導入をおすすめします。

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.