- PR -

DNSラウンドロビンとmod_proxy_balancerで簡易ロードバランス

投稿者投稿内容
Jumpin'' Jack Flash
大ベテラン
会議室デビュー日: 2006/01/24
投稿数: 198
投稿日時: 2007-02-07 11:57
簡易的にロードバランサーの導入を検討しています。
高価なロードバランサー機器の導入は考えていません。

段階的にテストしてみようと思い、まず、DNSラウンド
ロビンに設定しました。

nslookupで確認すると、IPアドレス2つが順序を入れ
替えながら表示されます。

ブラウザ(IE7)で確認すると、一方のサーバへのみ
集中します。
ブラウザの仕様がわからないのですが、おそらく一度
名前解決するとそのIPアドレスを憶えているのかと。
あくまでも推測ですが...

そこで、Apache2.2のmod_proxy_balancerを使用しよう
と思いいろいろ調べましたが、疑問点が出てきたので、
お知恵をお貸しください。

あるサイトで、サーバ構成を

   インターネット
    |   |
proxyサーバ1 proxyサーバ2
    | × |
 Webサーバ1 Webサーバ2

このようにすると書いてあったのですが、4台構成は、
ちょっと簡易的にやろうとしていることとコスト的に
見合わないので、これを2台で構成できないかと考えて
います。

proxyサーバはグローバルIPアドレスからのアクセスに
対してのみ働くようにし、ロードバランスするサーバ
は、同じサーバのローカルIPアドレスにすればできる
と思っているのですが、proxyの無限ループになりそう
な気もします。
どうでしょうか?ご意見をいただけないでしょうか?
具体的な設定方法など教えていただけると助かります。

やってみればよいのですが、Apacheのバージョンを2.0
から2.2へ上げられない(実は本番系でテストしている)
ので、まずはできるかできないかだけ知りたいのです。
できるのであれば、ちゃんとテストマシンを用意して
やってみます。
あしゅ
ぬし
会議室デビュー日: 2005/08/05
投稿数: 613
投稿日時: 2007-02-07 13:05
引用:

Jumpin' Jack Flashさんの書き込み (2007-02-07 11:57) より:
ブラウザ(IE7)で確認すると、一方のサーバへのみ
集中します。
ブラウザの仕様がわからないのですが、おそらく一度
名前解決するとそのIPアドレスを憶えているのかと。
あくまでも推測ですが...



DNSはキャッシュされるので1台ではラウンドロビンできません。
異なるPCからならラウンドロビン的な動作になるでしょう。

ipconfig /flushdnsでOSレベルのキャッシュはクリアできますが、
IEが自身でもメモリ上に保存している場合は無意味かもしれません。

引用:

proxyサーバはグローバルIPアドレスからのアクセスに
対してのみ働くようにし、ロードバランスするサーバ
は、同じサーバのローカルIPアドレスにすればできる
と思っているのですが、proxyの無限ループになりそう
な気もします。
どうでしょうか?ご意見をいただけないでしょうか?
具体的な設定方法など教えていただけると助かります。



同じサーバの場合はVirtual Hostで分ける必要がありそうです。

簡易ロードバランサの構築という事ですが、Linuxであれば、
IPVS(IP Virtual Server)を使った本物のロードバランサも
Ultra Monkey等を利用すれば比較的簡単に作れますよ。
angel
ぬし
会議室デビュー日: 2005/03/17
投稿数: 711
投稿日時: 2007-02-07 13:13
こんにちは。
引用:
4台構成は、
ちょっと簡易的にやろうとしていることとコスト的に
見合わないので、これを2台で構成できないかと考えて
います。

proxyサーバはグローバルIPアドレスからのアクセスに
対してのみ働くようにし、ロードバランスするサーバ
は、同じサーバのローカルIPアドレスにすればできる
と思っているのですが、proxyの無限ループになりそう
な気もします。


それはできるでしょうけど、有意義かどうかは何とも言えないところですね。
何のためにロードバランサを導入するのでしょうか? その目的や背景によるでしょう。
負荷を分散したいのか、耐障害性を確保したいのか。その両方か。
Webアプリケーション ( Java … Tomcat等, PHP, mod_XX, cgi 等 ) は絡むのか。絡むとして、セッション維持はどうするか。
4台はムリというのが、試験段階だからなのか、商用導入時もそうなのか。

DNSラウンドロビン + mod_proxy_balancer ではなく、LVS の方が合っている話かもしれないですし。
Jumpin'' Jack Flash
大ベテラン
会議室デビュー日: 2006/01/24
投稿数: 198
投稿日時: 2007-02-07 15:14
あしゅさん、angelさん、ありがとうございます。
IPVS、Ultra Monkey、LVS。
どれも、今回の調査の中で目にしたキーワードです。
そちらも、まだ理解できていないので、調べてみます。

ちなみに目的は、負荷分散と耐障害性確保の両方ですが、
DNSラウンドロビンではヘルスチェックできないことも
理解しております。
最近のブラウザは一方のWebサーバのHTTPポートの応答
がなければ、次のWebサーバを見に行くようです。

Webアプリは、PHPとCGIとSSIを使っていますが、
セッション維持は行いません。

4台はムリというのは、商用導入時もそうです。

VirtualHostは、既に名前ベースのものを利用していて、
今回の要件ですと、IPアドレスベースになるでしょうか。
共存可能かな?
ローカルIPアドレスにhostsかなんかで、名前を付けて
あげればよいですね。
できそうな気がしてきました。

ipconfig /flushdnsしても、一方のサーバへのみ集中
します。IEが憶えてるかな。
lapahack
会議室デビュー日: 2007/02/07
投稿数: 7
投稿日時: 2007-02-07 23:36
やってみるだけであれば、
それぞれのサーバにプロキシとアパッチ設定して
Nicに二つのIPアドレスを設定するのは?

出来たとしてもFirewallなぃ気持ち悪いけど。。
angel
ぬし
会議室デビュー日: 2005/03/17
投稿数: 711
投稿日時: 2007-02-08 02:38
負荷分散をどのレベルで考えるか、ですが…。
単に冗長性を確保するなら、2台1組のHAクラスタが分かりやすいでしょうね。
DNSラウンドロビンで耐障害性は良しとするなら、何も考えず2台並べるだけで O.K.

このケースで第一感は、APの処理が相対的に負荷が高いと見て、各サーバにApacheのインスタンスを2種類用意する構成を考えました。

1. リバースプロキシ
 静的コンテンツは直接処理、AP は後背の AP用Apacheに、mod_proxy_balancer の機能で振り分ける。セッション維持の必要がないので、そのまま振り分けるだけ。

2. APサーバ
 PHP, CGI, SSI 処理専門。クライアントからの直アクセスはさせず、あくまでリバースプロキシを通した接続に限る。

冗長化は、1のリバースプロキシを HAクラスタ化したいところ。これは、静的コンテンツ+ プロキシなら1台でも十分に捌けるという想定の時です。

ちなみに、最初から LVS で負荷分散するなら、こういう分け方は考える必要はないでしょうね。
以上、ご参考まで。
Jumpin'' Jack Flash
大ベテラン
会議室デビュー日: 2006/01/24
投稿数: 198
投稿日時: 2007-02-08 12:31
apacheのインスタンスを2つ持つのはなるほどです。

LVSを調べていて、これがやろうとしていることに
向いているように思えました(途中で話を変えて
すいません)。

ただ、やっぱり、

   インターネット
    |   |
 LVSサーバ1 LVSサーバ2
    | × |
 Webサーバ1 Webサーバ2

このようにしないといけないのでしょうか?
2台で、ロードバランサもWebサーバも冗長化したいです。
あしゅ
ぬし
会議室デビュー日: 2005/08/05
投稿数: 613
投稿日時: 2007-02-08 13:00
引用:

Jumpin' Jack Flashさんの書き込み (2007-02-08 12:31) より:
2台で、ロードバランサもWebサーバも冗長化したいです。



できますよ。

http://ultramonkey.jp/2.0.1/topologies/
ここの「高可用性と負荷分散の効率化」を参考にして下さい。

スキルアップ/キャリアアップ(JOB@IT)