¿Cómo se configuran dos servidores idénticos para la conmutación por error automática en PostgreSQL 9.1?
OS
Centos 5
PostgreSQL 9.1 compilado desde la fuente
La cuenta de usuario de postgres existe en ambas máquinas y tiene una clave ssh sin contraseña para conectarse a ambas máquinas.
Mi configuración actual:
Configuración del servidor maestro:
postgresql.conf:
listen_address = '*'
wal_level = hot_standby
max_wal_senders = 3
checkpoint_segments = 16
wal_keep_segments = 8
archive_mode = on
archive_command = 'cp "%p" /opt/pgsql91/archive/"%f"'
pg_hba.conf:
host replication all 10.0.66.1/32 trust
host replication all 10.0.66.2/32 trust
Servidor en espera
postgresql.conf y pg_hba.conf son idénticos a los configurados en el servidor maestro.
recovery.conf:
standby_mode = 'on'
primary_conninfo = 'host=10.0.66.1'
trigger_file = '/opt/pgsql91/data/trigger.txt'
Gracias a hzRoot, ahora entiendo cómo cambiar el servidor del modo de espera al maestro.
Usando los siguientes comandos, puedo sincronizar el nuevo esclavo con el nuevo maestro y luego obtener una copia de seguridad de replicación y ejecutarla.
En el nuevo maestro (10.0.66.2)
- su - postgres
- toque trigger.txt en / opt / pgsql91 / data /
- recovery.conf se convierte en recovery.done
- psql -c "; SELECCIONAR pg_start_backup ('copia de seguridad', verdadero)";
- rsync -a -v -e ssh / opt / pgsql91 / data / 10.0.66.1:/opt/pgsql91/data/ --exclude postmaster.pid
- psql -c "; SELECCIONAR pg_stop_backup ()";
Sobre el nuevo esclavo (10.0.66.1)
- cree el recovery.conf: cp recovery.done para recovery.conf
- vi recovery.conf cambie la dirección IP: primary_conninfo = 'host = 10.0.66.2'
- iniciar postgresql
Entonces mis preguntas son ahora:
- ¿Es esta la forma correcta de cambiar de roles?
- ¿Alguien ha automatizado este proceso? De ser así, ¿qué hizo?
- Si la replicación sincrónica está habilitada, noté que el nuevo servidor maestro no confirmará ninguna transacción porque está esperando que el esclavo responda. Sin embargo, no hay esclavo porque el otro servidor, el viejo maestro, está inactivo. ¿Es correcto o necesito deshabilitar temporalmente la replicación síncrona mientras el nuevo esclavo está inactivo?