web-dev-qa-db-fra.com

Lutter avec pgbouncer

J'ai Postgres 9.2 et PGbouncer (la version fournie avec le "Builder Stack"). J'ai une application .NET Connexion via NPGSQL version 2.0.12 sur une machine Win7.

Mon application peut heureusement se connecter directement au serveur Postgres, mais ne parvient toujours pas à se connecter via la PGBouncer.

Ma chaîne de connexion à NPGSQL (après une certaine substitution)

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

(J'ai également essayé de se connecter à PGbond avec le protocole = 3 explicitement et cela n'a pas fonctionné.)

La ligne de base de données de PGBounce Ini est la suivante:

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

et dans l'utilisateurlist.txt, j'ai "quelqu'un" "AAA" au besoin.

Lorsque mon application est exécutée, le NPGSQL dit "Connexion Fulliblement fermé" et le journal d'erreur PGBouncer indique:

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

L'exception NPGSQL indique: (à partir d'un fichier journal dans l'application, la plus haute exception fait suite aux exceptions imbriquées):

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)

En outre, le pare-feu de fenêtre est désactivé et anti-virus, j'ai désactivé temporairement.

Le fichier Conf de HBA pour Postgres a:

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

J'ai googlé et j'ai trouvé aucune solution. Aider! Merci.

Peter.

6
Peter pete

Ah! Zut! J'ai trouvé la réponse.

Ma chaîne de connexion avait SSLMode = préférer

J'ai enlevé ça, et voici! Le pgbouncer a travaillé !! Ma chaîne de connexion est maintenant:

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

Merci à tout le monde pour votre temps et vos efforts.

5
Peter pete

Le fichier userlist.txt contient les comptes de connexion de votre client to pgbouncer. Le [databases] La section contient les informations de connexion de la connexion à partir de pgbouncer au serveur Backend PostgreSQL. Vous semblez mélanger ces deux.

Lorsque vous vous connectez de votre client à PGBouncer, vous devez fournir un nom d'utilisateur et un mot de passe de userList.txt et un nom de base de données de something dans ce cas.

9
Peter Eisentraut