Streaming Replication (replicación en flujo)

Anuncio
WikiPrint - from Polar Technologies
Streaming Replication (replicación en flujo)
A partir de la versión 9.0, PostgreSql soporta replicación en flujo, lo que permite a los servidores en espera estar más actualizados que con los métodos
anteriores de tranferencia de archivos. Los servidores secundarios se conectan al primario, que envía los registros de WAL cuando son generados, sin
esperar a que los archivos de WAL se llenen.
Ver RespaldoContinuo para más información.
Configurar seguridad y acceso
Crear un usuario para replicación:
CREATE USER repuser
SUPERUSER
LOGIN
CONNECTION LIMIT 1
ENCRYPTED PASSWORD 'secreto';
En pg_hba.conf habilitar al usuario:
host replication repuser 127.0.0.1/0 md5
Adicionalmente configurar log_connections = on en postgresql.conf para detectar los intentos de replicación.
Configurar replicación en el primario
Establecer los parámetros necesarios en el servidor primario:
max_wal_senders = 1
archive_mode = on
wal_level = hot_standby
archive_command = 'cd .'
wal_keep_segments = 10000 # por ej. para 160 GB
Para replicación sincrónica, configurar synchronous_standby_names (PostgreSQL 9.1+):
synchronous_standby_names = '*'
Ajustar los parámetros para Hot-Standby vistos en RespaldoContinuo, por ejemplo, para linux:
archive_command = 'scp "%p" $SLAVE_IP:"/var/lib/postgresql/9.1/archive/"'
Reiniciar el servidor principal para que actualice los cambios:
$PGBIN/pg_ctl -D data90 restart
Realizar el backup inicial físico
Similar RespaldoContinuo:
$PGBIN/psql postgres -c "SELECT pg_start_backup('replica');"
mkdir replica
chmod 700 replica
cd $PGDATA ; cp -rvdpaf !(pg_xlog) ../replica; cd ..
$PGBIN/psql postgres -c "select pg_stop_backup(), current_timestamp"
Configurar replicación en el esclavo
1
WikiPrint - from Polar Technologies
En recovery.conf cambiar:
standby_mode = 'on'
primary_conninfo = 'host=127.0.0.1 port=5485 user=repuser password=secreto'
#restore_command = 'cp /var/lib/postgresql/9.1/archive/%f %p'
trigger_file = '/tmp/postgresql.trigger.5485'
Descomentar el restore command para recuperación continua.
En el esclavo, revisar pg_hba.conf y postgresql.conf (cambiar port, habilitar hot_standby, deshabilitar archive_mode, wal_level,
wal_keep_segments, etc.). Revisar postmaster.opts (directorio data).
Iniciar la replicación
Limpiar e Iniciar el servidor secundario:
rm replica/postmaster.pid # borrar pid del principal
rm replica/pg_xlog -Rv
mkdir replica/pg_xlog
# recrear directorio WAL
$PGBIN/pg_ctl -D replica restart
La salida esperada debería indicar que se está replicando:
LOG:
LOG:
LOG:
LOG:
LOG:
LOG:
LOG:
el sistema de bases de datos fue interrumpido; última vez en funcionamiento en 2010-12-28 04:28:13 ART
entrando al modo standby
conexión recibida: host=127.0.0.1 port=46320
conexión de replicación autorizada: usuario=repuser host=127.0.0.1 port=46320
la replicación en flujo se ha conectado exitosamente al primario
redo comienza en 0/3A000020
el estado de recuperación consistente fue alcanzado en 0/3B000000
Probar servidores
$PGBIN/psql -p
$PGBIN/psql -c
$PGBIN/pgbench
$PGBIN/psql -c
$PGBIN/psql -p
$PGPORTNEW -c "select count(*) from pgbench_history"
"select count(*) from pgbench_history"
-t 1000 -p 5485 correo
"select count(*) from pgbench_history"
$PGPORTNEW -c "select count(*) from pgbench_history"
Si al intentar conectarse al secundario aparece un error, verificar el modo de hot_standby:
FATAL:
el sistema de base de datos está iniciándose
Bibliografía
Para mayor información dirigirse a:
•
Documentación Oficial
•
PostgreSQL 9 Administration Cookbook, Simon Riggs - Hannu Krosing, Packt Publishing, 2010
2
Descargar