[pgsql-jp: 32718] Re: pgpoolはFreeBSD のjail環境で動作しません

Tatsuo Ishii t-ishii @ sra.co.jp
2004年 4月 8日 (木) 12:06:35 JST


石井です.

> あさかわです。
> 
> pgpoolがFreeBSDー5.2/4.9のjail環境で動作しません。
> 
> 現象は
> 
>  pgpoolは起動します。
> 
> ところが  pgpool は「postmasterが認証に失敗した」とエラーを返しますが、
>    postmaster の方のログには、そもそも認証のためのコネクション
>    があった記録もない。

postmasterが認証を拒否した場合には,postmasterのログにも残らないと思い
ます.

> 	という現象で、0.2.0、0.2.2、1.0a2 共通の症状です。
> 
> もちろん、実環境では、問題ありません
> 問題ないどころか、劇的な、性能向上が見られました。ありがとうございます。

こちらこそご報告ありがとうございます.

> 関係あるかどうかわかりませんが参考までに。
> 
> jail環境では自身をアクセスする様なプログラムには
> localhost = jail環境のIPとする必要がありました。
> (fmlが、jail環境内のMTAをlocalhostでアクセスするとおかしな動作をした)
> 
> jail内で動作する、bindにたいして
> 
> /etc/resolv.conf
>> nameserver      127.0.0.1
>> nameserver      0.0.0.0
> は、駄目です。
> どうも、実環境の方の127.0.0.1をアクセスしてる気がします。

私はjail環境も持っていませんし,このへんのことはあまり良く分かっていな
いのですが,何かpgpoolに問題があれば対処させていただきますので,是非お
知恵をお貸し下さい.

ところで,

> FreeBSD 5.2.1-RELEASE-p3の環境なので微妙に違うのかも知れませんが、
> jail上のpgpool 0.2.2 経由で問題なくDBにアクセスできています。
> (問題はなんか微妙にユーザー認証が実環境より遅いぐらいかな)

の件と関係があるかどうか分かりませんが,現状のpgpoolでは,pgpoolのクラ
イアントとpgpoolの間の接続がUNIX domainソケットでない場合,極端にパフォー
マンスが落ちることが分かっています.以下のパッチで直ると思うのですが,
よければお試し下さい.問題なければ0.2.3としてリリースしたいと思います.
--
Tatsuo Ishii

-----------------------------------------------------------------------
Index: child.c
===================================================================
RCS file: /home/t-ishii/repository/pgpool/child.c,v
retrieving revision 1.15
diff -c -r1.15 child.c
*** child.c	24 Mar 2004 12:27:04 -0000	1.15
--- child.c	8 Apr 2004 02:41:39 -0000
***************
*** 27,32 ****
--- 27,35 ----
  #include <sys/socket.h>
  #include <netinet/in.h>
  #include <sys/un.h>
+ #ifdef HAVE_NETINET_TCP_H
+ #include <netinet/tcp.h>
+ #endif
  
  #include <signal.h>
  
***************
*** 356,361 ****
--- 359,365 ----
  	socklen_t addrlen;
  	int fd = 0;
  	int afd;
+ 	int inet = 0;
  	POOL_CONNECTION *cp;
  
  	FD_ZERO(&readmask);
***************
*** 390,395 ****
--- 394,400 ----
  	if (FD_ISSET(inet_fd, &readmask))
  	{
  		fd = inet_fd;
+ 		inet++;
  	}
  
  	/*
***************
*** 404,409 ****
--- 409,437 ----
  		return NULL;
  	}
  	pool_debug("I am %d accept fd %d", getpid(), afd);
+ 
+ 	/* set NODELAY and KEEPALIVE options if INET connection */
+ 	if (inet)
+ 	{
+ 		int on = 1;
+ 
+ 		if (setsockopt(afd, IPPROTO_TCP, TCP_NODELAY,
+ 					   (char *) &on,
+ 					   sizeof(on)) < 0)
+ 		{
+ 			pool_error("do_accept: setsockopt() failed: %s", strerror(errno));
+ 			close(afd);
+ 			return NULL;
+ 		}
+ 		if (setsockopt(afd, SOL_SOCKET, SO_KEEPALIVE,
+ 					   (char *) &on,
+ 					   sizeof(on)) < 0)
+ 		{
+ 			pool_error("do_accept: setsockopt() failed: %s", strerror(errno));
+ 			close(afd);
+ 			return NULL;
+ 		}
+ 	}
  
  	if ((cp = pool_open(afd)) == NULL)
  	{



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