2012-06-11 30 views
5

Sto cercando di impostare la replica sincrona con Postgres 9.1, ma non riesco a farlo funzionare. Sono stato in grado di configurare la replica di streaming, ma non sincrono. Spero di non aver perso nulla di ovvio. Ho letto attentamente molte sezioni di ch 17, 18, 14, 25, 26 e 29 nella guida dell'amministratore.Come configurare la replica streaming sincrona in postgres?

Sono in esecuzione Ubuntu 12.04 e il mio padrone postgresql.conf ha queste, tra tutte le altre impostazioni standard:

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 

mio pg_hba.conf ha questo, oltre alla roba standard:

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

Il mio master db ha una sola sequenza, quindi è piccolo. Ho creato con successo un backup del maestro nel primario e la riconquistò:

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

Ho anche copiato i file di archivio WAL alla modalità standby. Il mio file standby.conf standby ha questo:

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' 

Entrambi i server si avviano senza problemi ei registri sembrano ok. Il mio standby ha questo:

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 

Il problema è che quando rilascio dichiarazioni contro il maestro, si bloccano per sempre. Mi sto perdendo qualcosa?

risposta

7

Sono stato il primo a mettere in produzione lo Streaming Replication (AKA "Binary Replication") quando uscito 9.0 due anni fa, ma ho saltato oltre il 9.1 perché la funzione di replica di Postgres era in uno stato di flusso. Ora, a partire dalla seconda settimana di settembre o giù di lì, 9.2 è uscito - VUOI saperlo!

Con 9.2, la replica è stata semplificata e OTTIMAMENTE migliorata!

Ora puoi avere la replica in cascata! In precedenza, dovevi fare in modo che il maestro servisse direttamente tutti gli schiavi. Ora puoi scaricare il master eseguendo lo streaming su un solo slave, e poi fare in modo che lo slave passi a tutte le volte che vuoi! Ciò ti consente di configurare il tuo slave di primo livello come un potenziale sistema hot-stand-by che prenderà il sopravvento nel caso in cui il tuo master fallisca.

L'intera strategia per la configurazione di questo è stata rinnovata e ho trovato la tua domanda perché io stesso stavo cercando un tipo di guida di installazione rapida perché conosco già tutte le basi. Tuttavia, si può iniziare con il nuovo 9.2 roba qui:

Postgres 9.2 High Availability, Load Balancing, and Replication

Nel frattempo, almeno un fornitore è venuto fuori con qualcosa per aiutare i comuni mortali fanno buon uso di questo: strumenti per le scienze annunciato "Dual Mode" è stato aggiunto al prodotto PolyglotSQL.PolyglotSQL consente a un'applicazione di operare contro la maggior parte dei database SQL e di ignorare le differenze dialettali. Allo stesso modo, la funzione "dual mode" ti permette di avere una sola connessione di sola lettura e un'altra connessione per le scritture, senza dover riscrivere l'applicazione (!!), così puoi approfittare della replica sincrona Postgres, scaricando il master di tutto scrive e mette quel carico su qualunque lettore tu abbia configurato.

Consiglio vivamente di passare a Postgres v 9.2.

1

Non vedo nulla su synchronous_standby_names: è necessario indicare quali server è in attesa sul master.

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 - non dimenticare di modificare le impostazioni wal_level se si desidera eseguire query sul server slave.

+0

sì, certo. Ho perso queste righe che ho nella configurazione. Per postgresql.sql ho questo: . Ho anche inserito l'indirizzo IP senza fortuna. In standby, ho

0

Ho avuto problemi simili, - per Postgres 9.3, ho dovuto aggiungere hot_standby = on al file postgresql.conf del server di database di standby prima che il mio server di standby potesse accettare query/client di lettura.

3

È troppo tardi per rispondere ma Here è un ottimo tutorial video che copre il processo passo passo per eseguire la replica del flusso per postgresql. Questo è stato davvero utile.

+0

Questo è stato un buon tutorial. Grazie per la condivisione –

Problemi correlati