Contexto: por vários motivos, estou trocando o PostgreSQL Slave de uma replicação Streaming para uma replicação de espera passiva.
A replicação de streaming foi configurada usando este guia: http://technology.trapeze.com/journal/postgresql-streaming-replication-ubuntu-1004/
Para mudar para um modo de espera morno: estou seguindo as instruções para o modo de espera morno aqui (1) https://wiki.postgresql.org/wiki/Warm_Standby e aqui (2) http://www.postgresql.org/docs/ current/static/pgstandby.html
Estou descobrindo que no escravo há mais arquivos de log do pg_xlog/
que em wal_archive/ (arquivos enviados do mestre). Como isso é possível? Acho que está atrapalhando minha configuração quente.
- em /var/lib/postgresql/9.3/main/pg_xlog/ do Master tenho arquivos de 000000010000000000000001 a 00000001000000000000001A.backup a 00000001000000000000001C
- em /var/lib/postgresql/wal_archive/ do Slave tenho arquivos de 000000010000000000000001 a 00000001000000000000001A.backup a 00000001000000000000001B
- em /var/lib/postgresql/9.3/main/pg_xlog/ do Slave tenho arquivos de 00000001000000000000001C a 000000010000000000000023
recovery.conf
contém:
restore_command = 'pg_standby -d -s 2 -t /tmp/pgsql.trigger.5442 [/wal_archive] %f %p %r 2>>standby.log'
quando eu reinicio o Slave ele reclama que está faltando o xxx1C
arquivo de log
Primeira pergunta, como é possível o Escravo ter mais pg_xlog/
arquivos de log que o Mestre?
Segunda pergunta, para ressincronizar os servidores em modo de espera quente: tenho que fazer pg_basebackup
novamente (para copiar essencialmente o mestre /data
e o /pg_xlog
diretório) para o escravo?
Apenas tentando entender PostgreSQL :) Obrigado antecipadamente!!
Encontrei uma pergunta muito semelhante aqui, que parece nunca ter sido respondida: http://www.postgresql.org/message-id/CAE7ByhgTJ6xOe4f3aa42Kn0_5gfEzWW1FZ9QQqsC6RP-Fnh_ow@mail.gmail.com
O objetivo de arquivar o WAL no mestre em algum local externo é permitir que o mestre o exclua para liberar espaço em seu arquivo
pg_xlog
, enquanto as réplicas ainda podem precisar dele.Uma réplica pode ter mais arquivos do
pg_xlog
que o mestre e os mais antigos, se estiver atrasada em relação ao mestre devido à falha em acompanhar a reprodução. No entanto,pg_standby
isso não deveria acontecer - o arquivo pode conter mais xlogs, mas a réplica deve apenas lê-los sob demanda.É difícil ser específico, porque você forneceu uma descrição ampla do problema em vez de listas de diretórios reais e não explicou as etapas exatas que seguiu para configurar a réplica. Ou mostra a saída exata do arquivo de log da réplica. Portanto, o melhor que posso fazer é "parece que a configuração da réplica está quebrada de alguma forma".
Assumindo que aqui
/data
está o datadir principal, contendoglobal
,base
,pg_clog
, etc, e quepg_xlog
são os logs de transação de um disco diferente: Sim, está certo.Você deve usar o
pg_basebackup
comando, no entanto, ou seguir as instruções no manual para cópias corretas no nível do sistema de arquivos usandopg_start_backup()
e rsync/cp.Você também deve certificar-se de que interrompeu a réplica primeiro. Sobrescrever seu datadir enquanto estiver em execução o deixará bastante perturbado.
Replicação de streaming versus espera passiva
Hot vs espera morna é ortogonal para streaming vs replicação de envio de log.
O que você está tentando fazer é usar o envio de logs em vez da replicação de streaming. Não importa para este propósito se a réplica é um hot standby ou um warm standby, ou seja, se está aceitando consultas ou não.
Pessoalmente, recomendo usar os dois métodos - use streaming e volte para o envio de logs se houver um problema com o streaming. O PostgreSQL faz isso automaticamente se ambos estiverem configurados.