2012-06-11 37 views
5

Estoy tratando de configurar la replicación sincrónica con Postgres 9.1, pero no puedo hacer que funcione. Pude configurar la replicación de transmisión, pero no sincrónica. Espero no haberme perdido nada obvio. He leído detenidamente muchas secciones de los capítulos 17, 18, 14, 25, 26 y 29 en la guía de administración.¿Cómo configurar la replicación de transmisión síncrona en postgres?

estoy usando Ubuntu 12.04 y mi postgresql.conf principal tiene éstos, entre todos los demás ajustes estándar:

listen_addresses = '*'    # what IP address(es) to listen on; 
wal_level = archive     # minimal, archive, or hot_standby 
archive_mode = on     # allows archiving to be done 
archive_command = 'test ! -f /data/pgWalArchive/%f && cp %p /data/pgWalArchive/%f' 
wal_keep_segments = 100    # in logfile segments, 16MB each; 0 disables ??? What should this be ???? 
max_wal_senders = 3     # max number of walsender processes 

Mi pg_hba.conf tiene esta, además de las cosas estándar:

host all    all    XX.6.35.0/24   md5 
host replication  postgres  XX.6.35.0/24   md5 

Mi db maestro tiene una sola secuencia, por lo que es muy pequeña. He creado con éxito una copia de seguridad del maestro en la primaria y la restituyó:

sudo -u postgres pg_basebackup -D ~/backup -F tar -x -z -l ~/backup/base1 -v -h XX.6.35.51 -U postgres 

También he copiado los ficheros de archivo WAL a la espera. Mi archivo recovery.conf de espera tiene esta:

restore_command = '/usr/lib/postgresql/9.1/bin/pg_standby /data/pgWalArchive %f %p %r' 
archive_cleanup_command = '/usr/lib/postgresql/9.1/bin/pg_archivecleanup /data/pgWalArchive %r' 
standby_mode = on 
primary_conninfo = 'host=XX.6.35.51 port=5432' # e.g. 'host=masterIpAddressOrName port=5432' 

Ambos servidores puesta en marcha sin problemas y los registros parecen estar bien. Mi standby tiene esto:

2012-06-08 10:23:51 MDT LOG: shutting down 
2012-06-08 10:23:51 MDT LOG: database system is shut down 
2012-06-08 10:23:53 MDT LOG: database system was shut down in recovery at 2012-06-08 10:23:51 MDT 
2012-06-08 10:23:53 MDT LOG: entering standby mode 
2012-06-08 10:23:53 MDT LOG: consistent recovery state reached at 0/1D000078 
2012-06-08 10:23:53 MDT LOG: record with zero length at 0/1D000078 
2012-06-08 10:23:53 MDT LOG: streaming replication successfully connected to primary 
2012-06-08 10:23:53 MDT LOG: incomplete startup packet 
2012-06-08 10:23:54 MDT FATAL: the database system is starting up 
2012-06-08 10:23:54 MDT FATAL: the database system is starting up 
2012-06-08 10:23:55 MDT FATAL: the database system is starting up 
2012-06-08 10:23:55 MDT FATAL: the database system is starting up 
2012-06-08 10:23:56 MDT FATAL: the database system is starting up 
2012-06-08 10:23:56 MDT FATAL: the database system is starting up 
2012-06-08 10:23:57 MDT FATAL: the database system is starting up 
2012-06-08 10:23:57 MDT FATAL: the database system is starting up 
2012-06-08 10:23:58 MDT FATAL: the database system is starting up 
2012-06-08 10:23:58 MDT FATAL: the database system is starting up 
2012-06-08 10:23:59 MDT FATAL: the database system is starting up 
2012-06-08 10:23:59 MDT LOG: incomplete startup packet 
2012-06-08 10:24:40 MDT LOG: redo starts at 0/1D000078 

El problema es que cuando emito declaraciones contra el maestro, cuelgan para siempre. ¿Me estoy perdiendo de algo?

Respuesta

7

Fui la primera persona en poner en producción la replicación de streaming (también conocida como "Binary Replication") cuando salió 9.0 hace dos años, pero omití 9.1 porque la función de replicación de Postgres estaba en un estado de cambio. Ahora, aproximadamente a partir de la segunda semana de septiembre, el 9.2 está fuera. ¡QUIERES saberlo!

¡Con 9.2, la replicación se ha simplificado y ha sido GRANMENTE mejorada!

¡Ahora puede tener una cascada de replicación! Antes, tenías que hacer que el maestro sirviera directamente a todos los esclavos. Ahora puede descargar el maestro mediante la transmisión a solo UN esclavo, y luego tener esa secuencia esclava a tantos como quiera. Esto le permite configurar su esclavo de primer nivel como un sistema potencial de espera activa que se hará cargo en caso de que su maestro falle.

Toda la estrategia para configurar esto se ha mejorado y encontré su pregunta porque yo mismo estaba buscando un tipo de guía de configuración rápida porque ya conozco todos los conceptos básicos. Sin embargo, se puede empezar con el nuevo 9.2 cosas aquí:

Postgres 9.2 High Availability, Load Balancing, and Replication

Mientras tanto, al menos un proveedor ha salido con algo para ayudar a los simples mortales hacen un buen uso de este: Science Tools anunciaron "modo dual" ha sido agregado a su producto PolyglotSQL.PolyglotSQL permite que una aplicación funcione contra la mayoría de las bases de datos SQL e ignora las diferencias dialectales. Del mismo modo, la función "modo dual" le permite tener una conexión de solo lectura y otra conexión para escribir, sin tener que volver a escribir su aplicación (!!), para que pueda aprovechar la replicación síncrona de Postgres, descargando el maestro de todas las escrituras, y poner esa carga en los lectores que haya configurado.

Le recomiendo que se mude a Postgres v 9.2.

1

No veo nada acerca de synchronous_standby_names; necesita indicar en qué servidores esperará el maestro.

http://www.postgresql.org/docs/9.1/static/warm-standby.html#SYNCHRONOUS-REPLICATION

http://www.postgresql.org/docs/9.1/static/runtime-config-replication.html#GUC-SYNCHRONOUS-STANDBY-NAMES

Oh - no se olvide de ajustar su configuración wal_level si desea ejecutar consultas en el servidor esclavo.

+0

sí, por supuesto. Eché de menos estas líneas que tengo en la configuración. Para postgresql.sql tengo esto: . También puse la dirección IP sin suerte. En el modo de espera, tengo

0

Tuve problemas similares, - para Postgres 9.3, tuve que agregar hot_standby = on al archivo de servidor de base de datos en espera postgresql.conf antes de que mi servidor en espera pudiera aceptar consultas/clientes de lectura.

3

Demasiado tarde para responder pero Here es un gran video tutorial que cubre el proceso paso a paso para hacer la replicación de secuencias para postgresql. Esto fue realmente útil.

+0

Este fue un buen tutorial. Gracias por compartir –

Cuestiones relacionadas