ストリーミングレプリケーションモードを前提とする。

負荷分散

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

負荷分散先の決定

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

pgpool_select_load_balancing_node.png

redirect_app_namesredirect_dbnamesパラメータでキーワードstandbyが使われた場合は、スタンバイノードの中で重みを考慮した選択が行われる。
参考

セッション中の負荷分散先の確認

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

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)

負荷分散のプロセス詳細

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

pgpool-decide-load-balance-node.png
  • セッションの初期化でロードバランスノードは決定されるものの、クエリの内容によってはプライマリノードに送られたり、プライマリとスタンバイの両方に送られることもある。参考 pool_where_to_send()
  • クエリ実行過程で、いつくかのチェッククエリが投げられる。結果は、relcacheに入るので毎回クエリごとに投げられるわけではない。ただし、ローカルセッション中でのみキャッシュが有効なものもある(一時テーブルとか)。
    • 現在のトランザクション分離レベル(トランザクションごと)
    • その他、システムカタログチェック、一時テーブルチェック、unloggedテーブルチェックなど

参考 http://www.pgpool.net/docs/latest/ja/html/runtime-misc.html

参考リンク


添付ファイル: filepgpool_select_load_balancing_node.png 79件 [詳細] filepgpool-decide-load-balance-node.png 72件 [詳細]
[PR]

トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-02-04 (日) 13:34:36 (286d)
GO TO TOP