[pgsql-jp: 37807] pgpoolでトランザクション中のSELECTをロードバランスしたい

TAKAO Kouji kouji @ netlab.jp
2006年 12月 18日 (月) 17:53:11 JST


高尾です。

先日リリースされましたpgpool-3.1.2を利用しています。
私の環境では次のような設定で運用しております。
* replication_strict = true
* load_balance_mode = true
* weight_master = 1
* weight_secondary = 0
* replication_stop_on_mismatch = false

pgpoolを導入している目的は、データベースのリアルタイムバックアップのた
めです。主側のPostgreSQLに異常が発生した場合、Heartbeatによって従側にフェ
イルオーバーさせ、サービスを継続させることを考えております。

それで、load_balance_modeについてご確認したいことがあります。

pgpoolでは、load_balance_modeがtrueの場合でも、トランザクション中の
SELECTは主従のPostgreSQLに送信され、不整合をチェックすると認識し
ております。

  # Load balancing mode, i.e., all SELECTs except in a transaction block
  # are load balanced.  This is ignored if replication_mode is false.
  load_balance_mode = true

しかしながら、トランザクション中のSELECTも主のPostgreSQLにのみ送信し、
不整合をチェックしないようにして運用できないか検討しております。
本メールに添付しているパッチを適用すれば、load_balance_modeがtrueの場合
に、トランザクション中のSELECTがロードバランスされるようになります。

load_balance_modeがtrueの場合に、トランザクション中のSELECTをロードバラ
ンスしないのには何か理由がありますでしょうか。

---
高尾 宏治 - TAKAO Kouji <kouji @ netlab.jp>
株式会社ネットワーク応用通信研究所 <http://www.netlab.jp/>

--- /home/kouji/local/src/pgpool/pgpool-3.1.2/pool_process_query.c	2006-12-18 16:16:37.896913529 +0900
+++ /home/kouji/local/src/pgpool/pgpool-3.1.2/pool_process_query.c.orig	2006-12-18 16:16:25.588515523 +0900
@@ -2910,7 +2910,8 @@
 {
 	if (pool_config.load_balance_mode &&
 		DUAL_MODE &&
-		MAJOR(backend) == PROTO_MAJOR_V3)
+		MAJOR(backend) == PROTO_MAJOR_V3) &&
+		TSTATE(backend) == 'I')
 	{
 		if (pool_config.ignore_leading_white_space)
 		{



pgsql-jp メーリングリストの案内