pgpool2 modo paralelo: Os não-superusuários devem fornecer uma senha na cadeia de conexão

1

Eu tenho dois nós postgres AWS RDS que fazem o backup de uma configuração pgpool no modo paralelo no EC2. Depois de usar o pgbench para preencher as tabelas de teste, obtenho um comportamento estranho das consultas de teste. Qualquer consulta que usa uma função produz o erro mencionado na linha de assunto, enquanto outras consultas funcionam conforme o esperado. Três exemplos mostrando sucesso, falha esperada e falha inesperada:

Sucesso - Fornece o conjunto de registros esperado:

psql -c "SELECT aid FROM pgbench_accounts" "host=localhost port=9999 user=pgpool password=pass dbname=bench_parallel"
# Giant record set is returned here.

Como os nós de apoio estão no RDS, a autenticação md5 é necessária. A autenticação parece estar funcionando bem no caso de consultas sem função, como pode ser visto substituindo a senha correta por uma incorreta.

Falha na autenticação esperada:

psql -c "SELECT aid FROM pgbench_accounts" "host=localhost port=9999 user=pgpool password=notmypass dbname=bench_parallel"
psql: FATAL:  password authentication failed for user "pgpool"

Aqui está a parte que me confundiu - Se eu colocar uma função como min () ou count () na consulta, obtenho problemas de autenticação:

psql -c "SELECT count(aid) FROM pgbench_accounts" "host=localhost port=9999 user=pgpool password=pass dbname=bench_parallel"
ERROR:  password is required
DETAIL:  Non-superusers must provide a password in the connection string.

Como pode ser visto nesta última consulta, a senha é fornecida na string de conexão (para o fronteado, de qualquer forma) e é a senha correta, conforme mostrado na primeira consulta.

Por que minha primeira consulta funciona bem sem problemas de autenticação, mas a terceira falha? Eu ignorei um cenário em algum lugar?

Editar 2014-10-23: Adicionar mais informações.

Eu adicionei privilégios de superusuário ao usuário pgpool no banco de dados do sistema (frontend) e não obtenho mais Non-superusers must provide a password in the connection string como erro. Agora eu recebo:

ERROR:  could not establish connection
DETAIL:  fe_sendauth: no password supplied

Ligando a depuração para pgpool e procurando no log, vejo a consulta sendo reescrita como a seguinte, que, na chamada dblink, não contém a senha especificada na string de conexão original:

2014-10-23 19:59:10 DEBUG: pid 1643: OneNode_do_command: Query:  SELECT 
    sum(pool_g$0) AS count FROM 
    dblink('host=ip-10-1-2-17 dbname=bench_parallel port=9999 user=pgpool',
    'SELECT pool_parallel("SELECT count(aid) FROM pgbench_accounts")',false) 
    AS pool_t$0g (pool_g$0 bigint )
    
por Penn Taylor 22.10.2014 / 20:46

2 respostas

0

Isso pode ser porque o pgpool vê essa consulta como somente leitura, mas como está realmente chamando uma função (que pode conter INSERT UPDATE ou DELETE instruções) ela quebra durante a conexão com o servidor somente leitura.

    
por 21.08.2015 / 19:42
0

Existe o Citus (pgShard) que deve funcionar com instâncias padrão do Amazon RDS. Tem capturas embora. Você terá um único ponto de falha se usar a versão de código aberto. O nó coordenador não é duplicado.

Você pode obter uma versão completa do failover do HA, mas é necessário comprar a licença corporativa, mas ela é muito cara. Custará facilmente US $ 50.000 a US $ 100.000 ou mais por ano.

Eles também estão REALMENTE empurrando sua versão para a nuvem agora, o que é ainda mais insanamente caro.

link

Existe também o Postgres-XL, mas também não tem failover. Se você perder algum nó, você perderá tudo.

    
por 24.03.2017 / 23:08