Re: pgbouncer y conexiones rotas

From: Jose Ramon Hermosilla Moreno <jrhermosilla(at)uci(dot)cu>
To: "Alejandro D(dot) Burne" <alejandro(dot)dburne(at)gmail(dot)com>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: pgbouncer y conexiones rotas
Date: 2009-06-30 18:03:49
Message-ID: 1063564334.1413731246385029167.JavaMail.root@ucimail1.uci.cu
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Para dar un poco más de información es preciso aclarar la situación real en que debo usar el pgbouncer. El asunto es que junto a otro compañero estoy desarrollando un redirector para squid en C++, hay una BD, y dicho redirector debe conectarse a ella para consultar determinada información y en dependencia permitir o denegar el acceso a la solicitud del usuario. Si en algún momento se cayera la conexión pasaría lo que he descrito anteriormente, y el usuario no podría navegar.

A continuación un ejemplo de programa y, adjunto, el fichero de configuración:

#include <iostream>
#include <pqxx/pqxx>
#include <vector>

int main() {
std::vector<pqxx::connection*> connections;

for (unsigned int i = 0; i < 100; ++i) {
try {
connections.push_back(new pqxx::connection("host=localhost dbname=fcweb port=6432 user=postgres password=postgres"));

pqxx::work t(*connections[i], "DemoTransaction");

t.commit();
connections[i]->disconnect();
delete connections[i];
}
catch(std::exception &e) {
std::cout << e.what() << std::endl;
}
}
return 0;
}

Para probar que pasaría si se cae la conexión lo que hacemos es parar el gestor de base de datos. Cuando ello sucede no ejecuta nada más luego de la línea:

connections.push_back(new pqxx::connection("host=localhost dbname=fcweb port=6432 user=postgres password=postgres"));

sino que se queda en un ciclo infinito en ella, pero nunca el programa recibe noticias de cual es el problema.

Se que no debemos conectarnos directamente con el usuario postgres. Cuando el servidor está corriendo funciona bien.

Saludos, José R.

----- Original Message -----
From: Alejandro D. Burne <alejandro(dot)dburne(at)gmail(dot)com>
To: Jose Ramon Hermosilla Moreno <jrhermosilla(at)uci(dot)cu>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Sent: Tue, 30 Jun 2009 13:24:45 -0400 (CDT)
Subject: Re: [pgsql-es-ayuda] pgbouncer y conexiones rotas

El 30 de junio de 2009 13:41, Jose Ramon Hermosilla
Moreno<jrhermosilla(at)uci(dot)cu> escribió:
> Gracias por la respuesta, he seguido el consejo pero el problema continúa (client_idle_timeout = 1). Muestro un fragmento del log para que se vea el asunto con más claridad:
>
> 2009-06-30 12:33:05.809 3717 LOG S-0x93b3018: fcweb/postgres(at)127(dot)0(dot)0(dot)1:5432 new connection to server
> 2009-06-30 12:33:05.810 3717 LOG S-0x93b3018: fcweb/postgres(at)127(dot)0(dot)0(dot)1:5432 closing because: connect failed (age=0)
> 2009-06-30 12:33:06.818 3717 LOG S-0x93b3018: fcweb/postgres(at)127(dot)0(dot)0(dot)1:5432 new connection to server
> 2009-06-30 12:33:06.819 3717 LOG S-0x93b3018: fcweb/postgres(at)127(dot)0(dot)0(dot)1:5432 closing because: connect failed (age=0)
> 2009-06-30 12:33:07.825 3717 LOG S-0x93b3018: fcweb/postgres(at)127(dot)0(dot)0(dot)1:5432 new connection to server
> 2009-06-30 12:33:07.826 3717 LOG S-0x93b3018: fcweb/postgres(at)127(dot)0(dot)0(dot)1:5432 closing because: connect failed (age=0)
>
> pgbouncer reintenta conectarse continuamente y no veo la forma de evitarlo.
> ¿Cómo evitar este comportamiento o detectar que no hay conexión?
>
> Saludos, José R.

Me parece que el problema aquí no es la nueva conexión, simplemente
que no se puede conectar "closing because: connect failed"
Me llama la atención tambien que utilices el usuario postgres, has
creado el archivo pgbounceruserlist.txt, y parametrizado correctamente
pgbouncer.ini?

Mira un log funcionando:

2009-06-30 14:09:09.789 14648 LOG C-0x156e5df0:
AMR/auth(at)xxx(dot)xxx(dot)xxx(dot)xxx:42890 login successful: db=AMR user=auth
2009-06-30 14:09:17.236 14648 LOG C-0x156e42a0:
AMR/auth(at)xxx(dot)xxx(dot)xxx(dot)xxx:42891 login successful: db=AMR user=auth
2009-06-30 14:09:18.192 14648 LOG C-0x156e8070:
AMR/auth(at)xxx(dot)xxx(dot)xxx(dot)xxx:54576 closing because: client close request
(age=323)
2009-06-30 14:09:25.223 14648 LOG C-0x156e8070:
AMR/amrweb(at)xxx(dot)xxx(dot)xxx(dot)xxx:49701 login successful: db=AMR user=amrweb
2009-06-30 14:09:26.551 14648 LOG C-0x156e8070:
AMR/amrweb(at)xxx(dot)xxx(dot)xxx(dot)xxx:49701 closing because: client close request
(age=1)
2009-06-30 14:09:30.860 14648 LOG C-0x156e5df0:
AMR/auth(at)xxx(dot)xxx(dot)xxx(dot)xxx:42890 closing because: client close request
(age=21)
2009-06-30 14:09:31.369 14648 LOG C-0x156e5df0:
AMR/amrweb(at)xxx(dot)xxx(dot)xxx(dot)xxx:49706 login successful: db=AMR user=amrweb
2009-06-30 14:09:31.372 14648 LOG C-0x156e5df0:
AMR/amrweb(at)xxx(dot)xxx(dot)xxx(dot)xxx:49706 closing because: client close request
(age=0)
2009-06-30 14:09:33.690 14648 LOG C-0x156e5df0:
AMR/auth(at)xxx(dot)xxx(dot)xxx(dot)xxx:42892 login successful: db=AMR user=auth
2009-06-30 14:09:34.552 14648 LOG C-0x156e8070:
AMR/auth(at)xxx(dot)xxx(dot)xxx(dot)xxx:42893 login successful: db=AMR user=auth
2009-06-30 14:09:38.401 14648 LOG C-0x156e5c80:
AMR/auth(at)xxx(dot)xxx(dot)xxx(dot)xxx:54583 closing because: client close request
(age=288)
2009-06-30 14:09:42.149 14648 LOG C-0x156bd0a0:
AMR/auth(at)xxx(dot)xxx(dot)xxx(dot)xxx:51630 closing because: client close request
(age=708)

Attachment Content-Type Size
userlist.txt text/plain 22 bytes
pgbouncer.ini application/octet-stream 4.2 KB

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Edwin Quijada 2009-06-30 18:49:18 RE: duda
Previous Message Alejandro D. Burne 2009-06-30 17:24:45 Re: pgbouncer y conexiones rotas