#author("2017-12-20T23:33:49+09:00","default:haikikyou","haikikyou")
#author("2017-12-20T23:34:06+09:00","default:haikikyou","haikikyou")
#contents

&color(red){ストリーミングレプリケーションモードを前提とする。};

* 負荷分散 [#la555a5d]

- マスタースレーブモードとレプリケーションモードで動作
- 有効な場合、参照クエリの負荷分散を行なう。~
ただし、更新クエリはプライマリノードに送信される。

* 負荷分散先の決定 [#h0f33287]

Pgpoolは、クライアントからの接続があると、すべてのバックエンドに対してまずコネクション接続を行なう。続いて、負荷分散設定(&code(load_balance_mode);)が有効な場合、セッション初期化プロセスの中で負荷分散先を決定する。負荷分散先はセッション単位でありセッション中は変更されない。

&ref(./pgpool_select_load_balancing_node.png,88%);



&code(redirect_app_names);や&code(redirect_dbnames);パラメータでキーワード''standby''が使われた場合は、''%%%スタンバイノードの中で%%%''重みを考慮した選択が行われる。~
&label(warn){参考};
- [[child.c#select_load_balancing_node()>https://git.postgresql.org/gitweb/?p=pgpool2.git;a=blob;f=src/protocol/child.c;h=9cf1544ab0c2efd2b681cc32be729ddf55840752;hb=refs/heads/V3_7_STABLE#l1659]] - &size(11){&color(gray){on https://git.postgresql.org/gitweb/?p=pgpool2.git};};
-  [[pool_session_context.c#pool_init_session_context()>https://git.postgresql.org/gitweb/?p=pgpool2.git;a=blob;f=src/context/pool_session_context.c;h=5d4e2cbe15bd7170e825a329ef93bba7f45c2c80;hb=refs/heads/V3_7_STABLE#l95]] - &size(11){&color(gray){on https://git.postgresql.org/gitweb/?p=pgpool2.git};};

* セッション中の負荷分散先の確認 [#a64155ed]

showコマンドで確認できる。下の例では、node_idが0のstandbyが選択されている。

#geshi{{{
postgres=# show pool_nodes                                                                                                        ;
 node_id | hostname | port  | status | lb_weight |  role   | select_cnt | load_balance_node | replication_delay 
---------+----------+-------+--------+-----------+---------+------------+-------------------+-------------------
 0       | /tmp     | 11002 | up     | 0.500000  | primary | 0          | false             | 0
 1       | /tmp     | 11003 | up     | 0.500000  | standby | 0          | true              | 0
(2 rows)
}}}

** 負荷分散のプロセス詳細 [#z32cb803]
* 負荷分散のプロセス詳細 [#z32cb803]

セッション初期化でロードバランスノードが決定されるが、実際には送られてきたクエリの内容によって、選択されるノードが異なることがある。ざっくりと図示すると以下のようになっている。

#ref(./pgpool-decide-load-balance-node.png,80%)

- セッションの初期化でロードバランスノードは決定されるものの、クエリの内容によってはプライマリノードに送られたり、プライマリとスタンバイの両方に送られることもある。&label(warn){参考}; [[pool_where_to_send()>https://git.postgresql.org/gitweb/?p=pgpool2.git;a=blob;f=src/context/pool_query_context.c;h=d31966463d49bbeb6de668b2d04a921f06a53bd5;hb=eea86a381c51dc65e6979af32fa79a84aab26c87#l383]]
- クエリ実行過程で、いつくかのチェッククエリが投げられる。結果は、relcacheに入るので毎回クエリごとに投げられるわけではない。ただし、ローカルセッション中でのみキャッシュが有効なものもある(一時テーブルとか)。
-- 現在のトランザクション分離レベル(トランザクションごと)
-- その他、システムカタログチェック、一時テーブルチェック、unloggedテーブルチェックなど

&label(warn){参考}; http://www.pgpool.net/docs/latest/ja/html/runtime-misc.html
* 参考リンク [#sf64b881]

- https://git.postgresql.org/gitweb/?p=pgpool2.git
- [[Pgpool-II 3.7.0 文書>http://www.pgpool.net/docs/pgpool-II-3.7.0/doc/ja/html/runtime-config-load-balancing.html]] - &size(11){&color(gray){ http://www.pgpool.net/docs/pgpool-II-3.7.0/doc/ja/html/ };};

PR

トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
目次
ダブルクリックで閉じるTOP | 閉じる
GO TO TOP