Conexão Negada no PostgreSQL

13 respostas
erico_kl

Olá…
estamos com um problema aqui na empresa que não sabemos mais o que fazer para tentar resolver…
Temos um servidor linux com PostgreSQL 8.4 sendo acessado remotamente pelos clientes com aplicações java swing distribuídas com JWS
o problema é o seguinte… os clientes acessam normalmente só que acontece que de vez em quando, em alguns acessos, acontece o erro de Conexão Negada: Verifique se o postmaster… Caused By connection timed out
lembrando que isso ocorre esporadicamente… e não a toda hora… mas um desses problemas serve para dar erro em alguma gravação ou não gerar um relatório etc…

Obs.: princípios básicos (primeiras coisas que pensamos ao ver esse erro tais como ajeitar pg_hba.conf, postgresql.conf, liberar ip, firewall, jdbc atualizado, conexões estáveis etc.) estão ok…

Se alguém já teve esse problema e puder ajudar ficaremos gratos… pois não sabemos mais pra onde atirar as pedras… já fizemos de tudo… nada resolve…
enquanto não resolvemos isso os clientes estão propensos a terem dados inconsistentes…

mais uma coisa… formatamos o servidor (antes era Kurumin, agora é Ubuntu) e instalamos novamente o postgre… também nao adiantou…

obrigado a todos…

13 Respostas

Roger75

Tente fazer um teste de carga para ver como a aplicação se comporta.

erico_kl

neste servidor temos poucos clientes acessando… e hoje de madrugada deixamos rodando uma rotina em 3 estações que gravava e buscava no banco 50 mil registros cada uma…
o erro aconteceu em média 4 vezes durante toda a madrugada por cada estação…

erico_kl

será que pode ser algo relacionado à login role?
pois todos os clientes possuem a mesma login role para acesso…
mas a login role está com connection limit -1 no banco :?

talvez tenha algo relacionado com acessos da mesma login role, no mesmo banco de dados, na mesma tabela… será que pode ser isso?

Obs.: só tenho como testar isso de madrugada fazendo um outro teste de carga… mas nem vou testar, caso eu esteja falando besteira…

erico_kl

estamos fazendo mais testes aqui com o firewall para ver se resolve… qualquer coisa eu posto aqui…
qualquer outra dica será bem vinda…

erico_kl

não é firewall… :?

neste link aqui eu posto a maneira de como a gente faz a conexão na aplicação… se alguém quiser olhar, agradeço…
nunca tivemos um problema que nos desgastasse tanto quanto esse… faz quase 1 mes que estamos trabalhando só para resolvê-lo e nada…

obrigado a todos…

aix

erico_kl:
não é firewall… :?

neste link aqui eu posto a maneira de como a gente faz a conexão na aplicação… se alguém quiser olhar, agradeço…
nunca tivemos um problema que nos desgastasse tanto quanto esse… faz quase 1 mes que estamos trabalhando só para resolvê-lo e nada…

obrigado a todos…

acredito que não seje firewall mesmo, é um iptables que você esta usando ? ou tem algum outro firewall entre esse linux e a wan ? sinceramente, eu coloca o JPA para cuidar das transações com o banco, do que esse monte de código SQL, outra coisa que eu não faria era deixar a autenticação a cargo do container, e para saber se é um problema do acesso de fora para o banco de dados, basta você executar os mesmos testes (numero de conexões ativas no banco e na rede) de dentro da rede se o erro persistir ta provado que não tem nada a ver com firewall, mas se ficar ok e os acessos externos não provável que tenha algo na rede bloqueando as conexões ou acesso ao bd etc…

erico_kl

obrigado pela resposta aix…
pois é… esse teste fizemos hoje de tarde e não foi reportado este erro… apenas em 1 estação que teve “a tentativa de conexão falhou… endereço já existente” mas nao é o mesmo erro que a gente tem online… entao nao levamos em conta esta estação…

mas quanto ao código não teria nada de errado nele que possa estar recusando conexões de fora? posso acessar pela WAN do mesmo jeito que acesso pela LAN?

obs.: não usamos hibernate ou jpa porque iniciamos os projetos sem, e já estamos acostumados a trabalhar assim… mas se tiver algum problema quanto a isso os sistemas serão readaptados (acredito que não haja…)

mais uma vez obrigado…

aix

erico_kl:
obrigado pela resposta aix…
pois é… esse teste fizemos hoje de tarde e não foi reportado este erro… apenas em 1 estação que teve “a tentativa de conexão falhou… endereço já existente” mas nao é o mesmo erro que a gente tem online… entao nao levamos em conta esta estação…

mas quanto ao código não teria nada de errado nele que possa estar recusando conexões de fora? posso acessar pela WAN do mesmo jeito que acesso pela LAN?

obs.: não usamos hibernate ou jpa porque iniciamos os projetos sem, e já estamos acostumados a trabalhar assim… mas se tiver algum problema quanto a isso os sistemas serão readaptados (acredito que não haja…)

mais uma vez obrigado…

Erico com certeza não tem nenhum problema em usar JDBC, depois desse teste me leva a crer que pode ser alguma coisa bloqueando, eu iria verificar os logs de acesso no LINUX tipo um tail -f /var/log e logs de acesso ao banco, qual é o firewall ? não vejo nada de errado no código que pudesse fazer recusar conexoes externas.

erico_kl

antes era o kurumin firewall mas depois que formatamos e colocamos o ubuntu nao colocamos nenhum ainda pra ter certeza que nao era firewall…

e nos logs do postgre só constam alguns EOF e alguns outros que não batem no mesmo horário desses erros…
também temos certeza que não é banco de dados…

e agora descartamos a possibilidade de ser o sistema…

estamos realizando outro teste de carga esta madrugada e assim que realizarmos eu posto aqui o que aconteceu…
muito obrigado…

erico_kl

bom dia…

o teste de carga desta madrugada foi feito em outro servidor, com outro link (também link dedicado mas nao da mesma empresa)…
Largamos uma rotina em 2 estações e notamos os mesmos erros… “conexão negada, verifique se o postmaster… connection timed out…”

já trocamos TUDO… e o erro continua… é incrível… nunca vimos algo parecido…
a única coisa que não trocamos ainda é a linguagem de programação…

vamos ao que já foi feito testado:

  • JDBC
  • Firewall
  • S.O
  • Placa de Rede
  • Link
  • Versão do Banco de Dados
  • Servidor INTEIRO
  • Estações de teste
  • Link do cliente (quando não sabíamos mais o que fazer…)

tem alguma lógica em mesmo depois de trocar/testar tudo isso ainda continuar dando esse problema?

erico_kl

tive uma ideia… não sei se isso ajudaria…
será que se eu conseguisse diminuir o tempo do time out no postgre e achar uma forma de setar um auto_reconnect nao resolveria nosso problema?

pois assim se desse esse problema novamente, a conexão seria restabelecida criando um novo processo…

o problema é setar o auto_reconnect… sei que no mysql tem como, mas ainda não achei uma forma de fazer isso no postgre…
entendo que muitas vezes isso pode não ser uma boa opção, mas como já tentamos de tudo, não custa tentar mais isso…

qualquer ajuda é bem-vinda
abraço a todos…

erico_kl

outra coisa…
isso realmente serve para um sistema rodando online?

falei com algumas pessoas que me disseram para criar algo na aplicação que gerencie pool de conexões…

tenho como fazer isso numa aplicação swing utilizando jdbc?
se sim, terei que mudar muita coisa a partir dessa estrutura apresentada no link anterior?

obrigado

erico_kl

talvez se eu modificar a estrutura para todos os clientes fazerem acesso nao diretamente ao banco, mas sim à um web service que estaria no servidor e este pegaria as informações do banco (então localhost) e enviasse de volta para o cliente… seria uma saída?

foi uma das maneiras que a gente está cogitando…

caso façamos por web service, deveríamos modificar todas as DAOs? ou a estrutura MVC utilizada permitiria uma troca de estrutura que não afete tanto o código?
o nosso medo é esse… ter que “jogar fora” o modelo de acesso aos dados para trabalhar com web service (que sem dúvida consumiria meses de trabalho para readaptar todos os fontes…)

Criado 6 de outubro de 2010
Ultima resposta 13 de out. de 2010
Respostas 13
Participantes 3