[pgcluster: 563] Re: 負荷分散の検証方法

mitani mitani_hiroshima @ ybb.ne.jp
2004年 9月 28日 (火) 05:48:49 JST


三谷@広島です.

> 実際にデータベースを持っていないロードバランサがSQL文を受けたとき、
> どのようにしてクラスタサーバ3台にそのクエリを振り分けるのでしょうか?
PGClusterのロードバランサはクエリーの中身に関係なく,セッションの新・旧
で振り分けています.
新しいセッションの場合は負荷率(接続数/最大接続数)の低いクラスタDBにセッ
ションを振り分け,既存のセッションの場合は,接続中のクラスタDBとのセッショ
ンを維持します.

> つまり、クラスタサーバ1、2、3のデータベースからデータを参照したいときは
> それぞれクラスタサーバ1、2、3で select 〜 from〜 を行うしかない、
> という具合です
PGClusterはレプリケーションシステムですので,クラスタDBが3台ある場合,
3台とも同じデータを持っていることになります.ですので,どのクラスタDBの
データを参照しても同じ結果が返ってきます.

部分レプリケーション機能を使った場合は,クラスタDB毎にデータがの異なるテー
ブルが出来ますので,使い方によってはロードバランサを経由せず,直にクラス
タDBにアクセスする必要があると思います.その場合はアプリケーション側でコ
ントロールしてもらう必要があります.

> 今回のようにロードバランサと3台のクラスタサーバがある場合、
> ロードバランサによって100回のクエリがおよそ3分の1ずつ (理想ですが)
> 各サーバに振り分けられているのかを検証したい場合、
> 『select * from hoge;』 というクエリはどのマシン上で実行すればよいのでしょう
>SELECT文の負荷分散を検証されたいのであれば,100回のクエリーを別々のセッ
ションで発行する必要があります.これはpgbenchかpgcbenchで可能です.

まず,DBを初期化します.
$ pgcbench -i -h (ロードバランサのホスト名) -p(ロードバランサのポート番号) DB名

次に同時接続数100でSELECTのみのトランザクションを1000件実行します.
$ pgcbench -S -c 100 -t 1000 -h (ロードバランサのホスト名) -p(ロードバラ
ンサのポート番号) DB名

ちなみに,オプションの
-S はSELECTのみ
-I だとINSERTのみ,
-U だとUPDATEのみ,
指定しないと全部を混ぜたトランザクションになります.

> 負荷分散を検証するための大量の参照クエリはどのマシンで実行するのか、
> ということが一番の疑問点です。
ロードバランサになります.
ロードバランサはlibpqプロトコルを理解していますので,フロントエンド(ユー
ザの端末)からみると,ロードバランサがバックエンド(DB)に見えます.

ちなみに,このロードバランサのコアの部分は石井さんが作られたpgpoolのソー
スを使わせて頂いております.

-- 
mitani <mitani_hiroshima @ ybb.ne.jp>




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