Vous êtes libres de redistribuer et/ou modifier cette création selon les conditions suivantes :
Paternité
Pas d'utilisation commerciale
Partage des conditions initiales à l'identique
Hot Standby
Warm Standby
apparue en 9.0
BSD
)SQL
DDL
SQL
md5
BSD
)BSD
)PgQ
PgQ
est robuste, fiable et flexibleBSD
)Points essentiels :
N'hésitez pas, c'est le moment !
pg_rewind
, archivage depuis un esclaversync
postgresql.conf
)
wal_level = replica
(ou logical
)archive_mode = on
(ou always
)archive_command = '... une commande ...'
archive_timeout
(optionnel)postgresql.conf
) - suite
wal_keep_segments
vacuum_defer_cleanup_age
max_replication_slots
( >= 9.4 )wal_level
ou archive_mode
changés)pg_switch_wal
pg_stat_archiver
restore_command
cp
, scp
, lftp
, rsync
, etc.restore_command = cp
ou scp
ou lftp
ou ...standby_mode = on
trigger_file = '/chemin/vers/fichier'
pg_basebackup
( >= 9.1 )recovery.conf
)
pg_basebackup
restore_command
avec rsync
standby_mode = on
postgresql.conf
wal_level = replica
postgresql.conf
hot_standby = on
postgresql.conf
max_wal_senders = X
wal_sender_timeout = 60s
pg_hba.conf
replication
recovery.conf
standby_mode
primary_conninfo
trigger_file
archive_cleanup_command
postgresql.conf
wal_receiver_timeout
synchronous_standby_names
synchronous_commit
on
, off
depuis toujourslocal
depuis la 9.1remote_write
depuis la 9.2remote_apply
depuis la 9.6N'hésitez pas, c'est le moment !
recovery.conf
sur le principalpg_hba.conf
ne bloque pas les clients en cas de basculetrigger_file
dans recovery.conf
promote
de pg_ctl
trigger_file
dans recovery.conf
promote
de pg_ctl
synchronous_commit
à local
rsync
recovery.conf
pg_stat_archiver
(9.4)pg_wal/archive_status/*.ready
pg_is_in_recovery()
pg_stat_replication
pg_wal_lsn_diff
write_lag
, flush_lag
, replay_lag
max_standby_archive_delay
max_standby_streaming_delay
vacuum_defer_cleanup_age
hot_standby_feedback
pg_wal_replay_pause()
pour mettre en pausepg_wal_replay_resume()
pour reprendrepg_is_wal_replay_paused()
N'hésitez pas, c'est le moment !
wal_level
wal sender
wal receiver
logical replication worker
à la placeTRUNCATE
UPDATE
/DELETE
postgresql.conf
wal_level = logical
pg_hba.conf
pg_dump -h serveur_origine -s -t la_table la_base | psql la_base
Ordre SQL
CREATE PUBLICATION nom
[ FOR TABLE [ ONLY ] nom_table [ * ] [, ...]
| FOR ALL TABLES ]
[ WITH ( parametre_publication [= valeur] [, ... ] ) ]
Ordre SQL
CREATE SUBSCRIPTION nom
CONNECTION 'infos_connexion'
PUBLICATION nom_publication [, ...]
[ WITH ( parametre_souscription [= value] [, ... ] ) ]
copy_data
create_slot
enabled
slot_name
synchronous_commit
synchronous_commit
connect
Création et configuration de l'utilisateur de réplication
CREATE ROLE logrepli LOGIN REPLICATION;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO logrepli;
Fichier postgresql.conf
wal_level = logical
Fichier pg_hba.conf
host replication logrepli 192.168.10.0/24 trust
trust
.pgpass
Création de l'utilisateur de réplication
CREATE ROLE logrepli LOGIN REPLICATION;
Création des tables répliquées (sans contenu)
createdb -h s2 b1
pg_dump -h s1 -s b1 | psql -h s2 b1
Création d'une publication de toutes les tables de la base b1 sur le serveur origine s1
CREATE PUBLICATION publi_complete
FOR ALL TABLES;
Souscrire sur s2 à la publication de s1
CREATE SUBSCRIPTION subscr_complete
CONNECTION 'host=192.168.10.1 user=logrepli dbname=b1'
PUBLICATION publi_complete;
Créer la publication partielle
CREATE PUBLICATION publi_partielle
FOR TABLE t1,t2;
Souscrire sur s3 à cette nouvelle publication de s1
CREATE SUBSCRIPTION subscr_partielle
CONNECTION 'host=192.168.10.1 user=logrepli dbname=b1'
PUBLICATION publi_partielle;
Créer la publication partielle sur s1
CREATE PUBLICATION publi_t3_1
FOR TABLE t3_1;
Souscrire sur s4 à cette nouvelle publication de s1
CREATE SUBSCRIPTION subscr_t3_1
CONNECTION 'host=192.168.10.1 user=logrepli dbname=b1'
PUBLICATION publi_t3_1;
Fichier postgresql.conf
wal_level = logical
Fichier pg_hba.conf
host all logrepli 192.168.10.0/24 trust
Créer la publication partielle sur s4
CREATE PUBLICATION publi_t3_2
FOR TABLE t3_2;
Souscrire sur s1 à cette publication de s4
CREATE SUBSCRIPTION subscr_t3_2
CONNECTION 'host=192.168.10.4 user=logrepli dbname=b1'
PUBLICATION publi_t3_2;
wal sender
logical replication launcher
logical replication worker
pg_replslot
state
dans le répertoirepg_logical
VACUUM
, ANALYZE
, REINDEX
pg_dumpall
et pg_dump
--no-publications
et --no-subscriptions
pg_publication
\dRp
sous psqlpg_publication_tables
pg_subscription
\dRs
sous psqlpg_stat_replication
pg_stat_subscription
pg_replication_origin_status
check_pgactivity
check_postgres
TRUNCATE
UPDATE
/DELETE
N'hésitez pas, c'est le moment !
généralement très court, inférieur à trois fois la valeur du paramètre wal_writer_delay
, soit 600 ms par défaut↩
Ceci afin d'éviter d'écraser un fichier journal si le maître était toujours actif. Avant la version 9.5, il pouvait y avoir un conflit entre l'ancien primaire et le secondaire promu archivant au même emplacement. Le fichier 00000001000000000000007A
aurait pu être écrasé. Voir : Archiving of last segment on timeline after promotion http://paquier.xyz/postgresql-2/postgres-9-5-feature-highlight-partial-segment-timeline/)↩