A replicação falhou; como continuar novamente?

10

Estou executando o Postgres 9.1.6 no Ubuntu e tenho uma configuração de replicação de streaming entre um mestre e um escravo. Tudo funcionou sem problemas até o banco de dados travar e tivemos que reiniciar as duas caixas.

Agora, a replicação parou e, ao verificar os logs nas duas caixas, vejo esta mensagem:

CDT FATAL: o segmento WAL solicitado 0000000100000224000000FA já foi removido

É o mesmo segmento repetidamente. Pelo meu Google, parece que o servidor de replicação está tentando recuperar esse segmento do mestre, mas não está mais lá. Ok, mas como contornar isso? Preciso fazer um novo backup e sincronizar isso com o escravo? Existe uma maneira fácil de recuperar o escravo em sincronia?

Mark Hoffman
fonte

Respostas:

7

Sim, você terá que dar ao escravo um novo backup básico (para replicação de streaming apenas as etapas 1 a 4) do mestre.

Seu problema provavelmente ocorreu porque o valor de wal_keep_segments é baixo. O valor precisa ser alto o suficiente para que, quando o escravo estiver inativo por algum tempo, o mestre não inicie a reciclagem dos segmentos que o escravo ainda não processou.

Eelke
fonte
1

Verifique se os WALs necessários estão no local a partir do qual você está restaurando para restauração inicial antes de conectar o escravo ao host principal no modo de streaming

Seu problema pode ocorrer quando um segmento WAL existe no local a partir do qual você está restaurando para a recuperação inicial.

Se tudo estiver bem nesta instância, você deve verificar o comando restore_ recovery.conf.

Kishor Hargude
fonte
0

Outra solução é executar wal backup_push do primário e executar imediatamente um backip_fetch do escravo em espera e iniciá-lo.

Nathn
fonte
2
Por favor, expanda por que esse processo funciona #
RolandoMySQLDBA