Comment puis-je résoudre un PostgreSQL 9.3 de l'Esclave qui Ne peut pas Tenir avec le Maître?

Nous avons un maître-esclave de réplication de configuration comme suit.

Sur le maître:

postgresql.conf a réplication configuré comme suit (en commentaire de la ligne pour des raisons de concision):

max_wal_senders = 1            
wal_keep_segments = 8          

Sur l'esclave:

Même postgresql.conf que sur le maître. recovery.conf ressemble à ceci:

standby_mode = 'on'
primary_conninfo = 'host=master1 port=5432 user=replication password=replication'
trigger_file = '/tmp/postgresql.trigger.5432'

Quand il a d'abord été de l'installation, nous avons effectué quelques tests simples et confirmé la réplication a de travail. Cependant, quand nous avons fait la première de chargement des données, seules les données de fait à l'esclave.

Esclave du journal est maintenant rempli avec des messages qui ressemblent à ceci:

< 2015-01-23 23:59:47.241 EST >LOG:  started streaming WAL from primary at F/52000000 on timeline 1
< 2015-01-23 23:59:47.241 EST >FATAL:  could not receive data from WAL stream: ERROR:  requested WAL segment 000000010000000F00000052 has already been removed

< 2015-01-23 23:59:52.259 EST >LOG:  started streaming WAL from primary at F/52000000 on timeline 1
< 2015-01-23 23:59:52.260 EST >FATAL:  could not receive data from WAL stream: ERROR:  requested WAL segment 000000010000000F00000052 has already been removed

< 2015-01-23 23:59:57.270 EST >LOG:  started streaming WAL from primary at F/52000000 on timeline 1
< 2015-01-23 23:59:57.270 EST >FATAL:  could not receive data from WAL stream: ERROR:  requested WAL segment 000000010000000F00000052 has already been removed

Après une analyse et une aide sur l' #postgresql canal IRC, je suis venu à la conclusion que l'esclave ne peut pas tenir avec le maître. Ma solution proposée est la suivante.

Sur le maître:

  1. Ensemble max_wal_senders=5
  2. Ensemble wal_keep_segments=4000 . Oui je sais c'est très élevée, mais je tiens à surveiller la situation et voir ce qui se passe. J'ai de la place sur le maître.

Sur l'esclave:

  1. Enregistrer des fichiers de configuration dans le répertoire de données (c'est à dire pg_hba.conf pg_ident.conf postgresql.conf recovery.conf)
  2. Effacer le répertoire de données (rm -rf /var/lib/pgsql/9.3/data/*) . Cela semble être requis par pg_basebackup.
  3. Exécutez la commande suivante:
    pg_basebackup -h master -D /var/lib/pgsql/9.3/data --username=replication --password

Ai-je raté quelque chose ? Est-il un meilleur moyen d'apporter de l'esclave à jour w/o avoir à recharger toutes les données ?

Toute aide est grandement appréciée.

Vous avez vraiment répondu à votre propre question -- set wal_keep_segments assez haut pour permettre à l'esclave de se rattraper après une rafale de wal mises à jour.
Ce sujet de recréer de l'esclave, est ma procédure proposée est-elle valide ?

OriginalL'auteur Oleg Dulin | 2015-01-28