[pgcluster: 692] ロードバランサの可用性を確保するには?

Yoshiaki Kawazu kawaz-pgcluster=ml.postgresql.jp @ 7cho-me.com
2005年 2月 25日 (金) 12:03:00 JST


河津です。

ちょっとリリースの話題からはそれるので別スレッドにします。

> > その際にクライアントの Windows 側に pglb のみ搭載しておけば、
> > クライアント側からは無停止(もしくは一度の再接続)で利用を
> > 継続できる点はメリットだと思います。
> pglbにはクラスタDBへの最大接続数を設定しますので,
> pglbを大量に立てると,個々のロードバランサに対する
> クラスタDBへの接続数の割り当てが減りますので,
> 現状の構成では,かえって運用が難しくなるのではないかと思います.
> 
> しかし,クライアント側にロードバランサを持たせるというのは
> おもしろいアイデアですね.

クライアント側にロードバランサってそんなに珍しいんでしょうか?
僕は PGCluster を初めてみたときにまずロードバランサをクライアント
側に立てることを考えたのですが…。

理由は、アプリケーションの可搬性とロードバランサの可用性の為です。

例えば以下のような構成でシステムを構築したいとします。
・WEB+アプリケーションサーバ2台(APP1,APP2)
・DBサーバ3台(DB1,DB2,DB3)
3台のDBサーバではpostmasterとpgreplicateが動いています。
DBサーバの可用性の為にロードバランサをどこかに立てようと思います。
そのときロードバランサを何処に立てるの良いかを考えると、
クライアント側の APP1 と APP2 にそれぞれ立てるのが良いと考えました。

localhost に pglb が起動していればアプリケーションは
常にDBの接続先としてlocalhostを指定しておけばDBサーバの一部が
メンテナンス中でも稼働中のDBサーバに振り分けられるので
アプリケーションからDBの生死を気にしなくて良くなります。
新たにアプリケーションサーバを増やす時もそのサーバの localhost で
pglb が動いていさえすれば、アプリケーションは設定を変えることなく
新しいサーバにデプロイするだけで動作します。
(アプリケーションの可搬性)

  pglb が1つの別のサーバ(LB1)で起動しているとした場合、
アプリケーションは接続先として LB1 を固定で設定すれば良いが、
LB1 は一つしか無いのでサービスを無停止で LB1 を止めることが出来ません。
  ロードバランサを冗長化する為 LB2 を更に作ったとします。
その場合アプリケーションには「複数の接続先のどれかを選んで接続して、
DBへの接続に異常があれば別のDBに接続しなおす」という機能を入れなければ
なりません。しかしこれはそもそもpglbの役目ですのでpglbが全く役に
たっていないことになります。
  しかし、各アプリケーションサーバにpglbを起動する構成の場合、
仮にAPP1をメンテナンスでpglbごと停止しても、APP2では自分の pglb 経由で
DBにアクセス出来るのでサービスは継続できます。
(ロードバランサの可用性)

逆にみなさんにお聞きしたいのですが、これ以外にロードバランサの可用性を
確保する PGCluster の構成はあるのでしょうか?
(PGCluster の構成の工夫以外でどうにかする方法は沢山あると思いますが…)


-----
KaWaZ <kawaz @ kawaz.jp>
http://www.kawaz.jp/



pgcluster メーリングリストの案内