web-dev-qa-db-ja.com

pgBouncerの問題

Postgres 9.2とPgBouncer(「スタックビルダー」に付属するバージョン)があります。 win7マシンでNpgsqlバージョン2.0.12を介して接続する.netアプリケーションがあります。

私のアプリケーションはpostgresサーバーに直接接続できますが、常にpgbouncer経由で接続できません。

Npgsqlへの接続文字列(置換後)

Sslmode=Prefer;Timeout=40;Server={0};Port={3};User Id={4};Password={1};Database={2};Pooling=False;

(私はProtocol = 3でPgBounceに明示的に接続しようとしましたが、うまくいきませんでした。)

PgBounce iniのデータベース行は次のとおりです。

[databases]
something = Host=localhost port=5433 dbname=somethingelse user=someone password=aaa

そして、userlist.txtには、必要に応じて「誰か」「aaa」があります。

私のアプリを実行すると、npgsqlは「接続を強制的に閉じました」と言い、pgbouncerエラーログは次のように言います。

2013-02-06 20:16:57.594 2444 LOG File descriptor limit: -1 (H:-1), max_client_conn: 1000, max fds possible: 1030
2013-02-06 20:16:57.649 2444 LOG listening on ::/6433
2013-02-06 20:16:57.657 2444 LOG listening on 0.0.0.0:6433
2013-02-06 20:16:57.659 2444 LOG process up: pgbouncer 1.5.2, libevent 2.0.19-stable (win32), adns: evdns2
2013-02-06 20:17:22.066 2444 LOG C-01819410: something/someone@fe80::997b:396e:eacc:dd2b:3013 login attempt: db=somethingelse user=someone
2013-02-06 20:17:22.130 2444 LOG S-01836648: something/[email protected]:5433 new connection to server
2013-02-06 20:17:24.069 2444 LOG C-01819410: something/someone@fe80::997b:396e:eacc:dd2b:3013 closing because: client close request (age=2)
2013-02-06 20:17:26.319 2444 LOG C-01819410: (nodb)/(nouser)@fe80::997b:396e:eacc:dd2b:3023 closing because: bad packet header (age=0)
2013-02-06 20:17:26.322 2444 WARNING C-01819410: (nodb)/(nouser)@fe80::997b:396e:eacc:dd2b:3023 Pooler Error: bad packet header

Npgsql例外は言う:(アプリのログファイルから、一番上の例外はネストされた例外をたどります):

Exception message:  Unable to read data from the transport connection: An established connection was aborted by the software in your Host machine.
Exception source:  Npgsql
Exception stacktrace:     at Npgsql.NpgsqlClosedState.Open(NpgsqlConnector context) in Z:\Projectdirectory\Npgsql2.0.12.0.src\src\Npgsql\NpgsqlClosedState.cs:line 232
at Npgsql.NpgsqlConnector.Open() in Z:\Projectdirectory\Npgsql2.0.12.0.src\src\Npgsql\NpgsqlConnector.cs:line 695
at Npgsql.NpgsqlConnectorPool.GetNonPooledConnector(NpgsqlConnection Connection) in Z:\Projectdirectory\Npgsql2.0.12.0.src\src\Npgsql\NpgsqlConnectorPool.cs:line 346
at Npgsql.NpgsqlConnectorPool.RequestConnector(NpgsqlConnection Connection) in Z:\Projectdirectory\Npgsql2.0.12.0.src\src\Npgsql\NpgsqlConnectorPool.cs:line 185
at Npgsql.NpgsqlConnection.Open() in Z:\Projectdirectory\Npgsql2.0.12.0.src\src\Npgsql\NpgsqlConnection.cs:line 543
at *snip* the thing in my code that goes and opens the connection *snip*
-----------------------------------------------------
Exception message:  Unable to read data from the transport connection: An established connection was aborted by the software in your Host machine.
Exception source:  System
Exception stacktrace:     at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)
at System.IO.Stream.ReadByte()
at Npgsql.NpgsqlClosedState.Open(NpgsqlConnector context) in Z:\Projectdirectory\Npgsql2.0.12.0.src\src\Npgsql\NpgsqlClosedState.cs:line 184
-----------------------------------------------------
Exception message:  An established connection was aborted by the software in your Host machine
Exception source:  System
Exception stacktrace:     at System.Net.Sockets.Socket.Receive(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags)
at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)

また、ウィンドウファイアウォールがオフになっていて、ウイルス対策ソフトウェアが一時的にオフになっています。

PostgresのHBA confファイルには次のものが含まれます。

Host    all             all             127.0.0.1/32            md5
Host    all             all           192.168.0.1/16            md5
# IPv6 local connections:
Host    all             all             ::1/128                 md5
Host    all             all         fe80::1/16                  md5

私はググってみましたが、解決策は見つかりませんでした。助けて!ありがとう。

ピーター。

6
Peter pete

ああ!くそー!答えを見つけました。

私の接続文字列にはSslMode = Preferがありました

私はこれを削除し、出来上がり! pgBouncerが動作しました!!私の接続文字列は今です:

Timeout=40;Server={0};Port={3};User Id=someone;Password={1};Database={2};Pooling=False;Protocol=3;

皆さんの時間と努力に感謝します。

5
Peter pete

Userlist.txtファイルには、クライアントから接続するためのアカウントto PgBouncerが含まれています。 [databases]セクションには、バックエンドPostgreSQLサーバーへの接続from PgBouncerのログイン情報が含まれています。あなたはこれら2つを混ぜているように見えます。

クライアントからPgBouncerに接続するときは、userlist.txtからのユーザー名とパスワード、およびこの場合はsomethingのデータベース名を指定する必要があります。

9