"Replica in streaming" si riferisce all'invio continuo di record WAL su una connessione TCP / IP tra il master e la replica, utilizzando il protocollo walsender su replicationconnessioni. Il master legge il proprio WAL pg_xloge lo invia alla replica su richiesta. È configurato con una primary_conninfodirettiva in recovery.confe pg_hba.confvoci sul master per consentire le replicationconnessioni. È inoltre necessario wal_keep_segmentse alcune altre opzioni coperte nei documenti.
"Log shipping" si riferisce all'invio periodico di record WAL come interi archivi WAL tramite un protocollo di trasferimento file in una posizione di archivio da cui la replica può quindi recuperarli. È configurato con una restore_commanddirettiva in recovery.confe un archive_commandnel master. A PostgreSQL non importa dove sono i file o come vengono trasferiti, solo che archive_commandli mette lì e restore_commandrecupera l'archivio richiesto; ciò consente la costruzione di sistemi come PgBarman e WAL-E.
La replica in streaming non ha lo stesso ritardo, poiché i record vengono inviati e generati. Tuttavia, richiede che sia il master sia la replica siano online e siano in grado di comunicare direttamente. Richiede inoltre che la replica mantenga abbastanza bene che il master abbia ancora copie su disco del WAL di cui ha bisogno la replica e generalmente richiede di dedicare pg_xlogspazio extra per conservare il WAL aggiuntivo per la replica.
La replica della distribuzione dei log presenta un ritardo maggiore poiché la replica vede WAL solo quando viene inviato un intero archivio. Tuttavia, può funzionare anche quando il master e la replica non possono comunicare direttamente su TCP / IP utilizzando un percorso di archiviazione condiviso. Continua a funzionare anche se la replica è inattiva da un po ', perché il master avrà scartato il WAL pg_xlogsolo dopo averlo archiviato, quindi il WAL è ancora nell'archivio e utilizzabile dalla replica anche se il master non può inviarlo in streaming più. Si noti che archive_commandnon si arrende mai, quindi pg_xlogpuò riempire se l'archiviazione non riesce; per questo motivo è meglio archiviare in una posizione affidabile e quindi recuperare il server di replica da quella posizione.
In generale, in realtà si combinano i due, cioè si usano entrambi. In tal caso, la replica in streaming viene utilizzata quando tutto va bene. Se la replica è troppo indietro e il master ha scartato gli xlog richiesti, si presenta un problema di connettività, ecc., La replica passa alla lettura dell'archivio WAL fino a quando non viene raggiunta. Riprova periodicamente a tornare allo streaming fino a quando non riesce.
Se hai intenzione di usarne solo uno, usa la distribuzione dei log, perché la replica in streaming senza fallback della spedizione dei log è (fino a PostgreSQL 9.4) potenzialmente soggetta a ritardo di replica causando errori che impongono la ricostruzione di una replica.
PostgreSQL 9.4 cambia un po 'questo, perché la replica in streaming ora può usare "slot di replica". Ciò consente al master di tenere traccia di quanto WAL ha bisogno di una replica ed evitare di buttarlo via fino a quando la replica non l'ha riprodotta. Quindi non è più necessario wal_keep_segmentsse si utilizza uno slot di replica (non quello predefinito).
Vedi il mio articolo slot di replica streaming in PostgreSQL 9.4 .
9.4 introduce anche le basi per lo streaming della replica logica , che è ancora un altro meccanismo, progettato per l'uso da parte di sistemi di replica logica come Londiste, Slony-I e la nuova funzionalità di replica multi-master asincrona bidirezionale .