Resultó que mi script no pudo ejecutar reload
postgresql debido a un error de autenticación. Entonces todo lo que aparece a continuación es unproblema falsode postgresql. Después de solucionar el error, postgresql me permitió escribir en el servidor principal en solitario sin ningún problema. Agradezca a Nikita Kipriyanov por su ayuda, pero puede omitir las palabras siguientes.
Mi objetivo es permitir que el servidor maestro aún pueda procesar la solicitud de escritura mientras el modo de espera falla. He notado synchronous_commit =
que se puede configurar manualmente off
y luego recargar el servidor principal.
Otra configuración incluye repmgr.conf
para repmgr
:
use_replication_slots=yes
Por lo tanto, el servidor en espera creado repmgr
solicita al servidor primario que le reserve registros de pared mientras falla. Las cosas no salen exactamente como se esperaba: puedo enviar la operación de escritura al primario y el modo de espera puede clonar eso desde el primario, pero con un error: el comando de escritura siempre se queda aquí:
postgres=# CREATE DATABASE ANYTHING;
El mensaje no volvió a aparecer hasta que presioné Ctrl
+ D
, con estas líneas:
^CCancel request sent
WARNING: canceling wait for synchronous replication due to user request
DETAIL: The transaction has already committed locally, but might not have been replicated to the standby.
CREATE DATABASE
postgres=#
Por lo tanto, siempre terminaba congelado cada vez que intentaba escribir en el archivo principal mientras estaba synchronous_commit = off
. ( psql -c ...
también resultará en una congelación del shell) ¡Esto significa que este cambio temporal en la configuración de replicación no alcanza mi objetivo de evitar que el primario sufra un "ataque" mientras el modo de espera encuentra un problema!
¿Hay alguna manera de evitar este congelamiento? Gracias.