La replicación ha fallado; ¿Cómo empezar de nuevo?

10

Estoy ejecutando Postgres 9.1.6 en Ubuntu y tengo una configuración de replicación de transmisión entre un maestro y un esclavo. Todo ha estado funcionando sin problemas hasta que la base de datos se bloqueó y tuvimos que reiniciar ambos cuadros.

Ahora, la replicación se ha detenido y cuando reviso los registros en ambos cuadros, veo este mensaje:

CDT FATAL: el segmento WAL solicitado 0000000100000224000000FA ya se ha eliminado

Es el mismo segmento una y otra vez. Desde mi Google, parece que el servidor de replicación está tratando de recuperar este segmento del maestro, pero ya no está allí. Ok, pero ¿cómo solucionar esto? ¿Tengo que hacer una copia de seguridad nueva y sincronizarla con el esclavo? ¿Hay alguna manera fácil de volver a sincronizar al esclavo?

Mark Hoffman
fuente

Respuestas:

7

Sí, tendrá que darle al esclavo una nueva copia de seguridad base (para la replicación de transmisión solo los pasos 1 a 4) del maestro.

Su problema probablemente ha ocurrido porque el valor de wal_keep_segments es demasiado bajo. El valor debe ser lo suficientemente alto como para que cuando el esclavo esté inactivo durante algún tiempo, el maestro no comience a reciclar segmentos que el esclavo aún no haya procesado.

Eelke
fuente
1

Verifique que los WAL necesarios se encuentren en la ubicación desde la que está restaurando para la restauración inicial antes de conectar el esclavo al host primario en modo de transmisión

Su problema puede ocurrir cuando un segmento WAL no existe en la ubicación desde la cual está restaurando para la recuperación inicial.

Si todo está bien en este caso, entonces deberías verificar el comando restore_command recovery.conf.

Kishor Hargude
fuente
0

Otra solución es hacer wal backup_push desde primario e inmediatamente hacer un backip_fetch desde el esclavo en espera e iniciar el modo en espera.

Nathn
fuente
2
Expanda por qué funciona este proceso
RolandoMySQLDBA