PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 06/06/2012 12:11:39

genio
Membre

Erreur de reprise sur les wal apres switch de mes serveurs

Bonjour à tous...
j'ai deux serveurs en streaming :
1°)  Arrété mon ancienMAitre
2°) effectué un switch entre mon AncienMaitre et mon NouveauMaitre => OK
3°) Effectué des mises à jours sur mon nouveauMaitre => OK
4°) 'Ralumé'  AncienMaître afin qu'il devienne NouvelEsclave avec recovery.conf => OK
5°) Quand je starte mon nouvel esclave voici l'erreur qu'il me renvoie : 
Jun  6 11:54:50 vpfdipsql1 postgres[31151]: [2-1] LOG:  received fast shutdown request
Jun  6 11:54:50 vpfdipsql1 postgres[31161]: [2-1] LOG:  shutting down
Jun  6 11:54:50 vpfdipsql1 postgres[31161]: [3-1] LOG:  database system is shut down
Jun  6 11:54:52 vpfdipsql1 postgres[31337]: [1-1] LOG:  could not create IPv6 socket: Address family not supported by protocol
Jun  6 11:54:52 vpfdipsql1 postgres[31346]: [2-1] LOG:  database system was shut down in recovery at 2012-06-06 11:54:50 CEST
Jun  6 11:54:52 vpfdipsql1 postgres[31346]: [3-1] LOG:  entering standby mode
Jun  6 11:54:52 vpfdipsql1 postgres[31346]: [4-1] LOG:  redo starts at A9/79001FC8
Jun  6 11:54:52 vpfdipsql1 postgres[31346]: [5-1] LOG:  consistent recovery state reached at A9/7B000000
Jun  6 11:54:52 vpfdipsql1 postgres[31346]: [6-1] LOG:  unexpected pageaddr A9/19000000 in log file 169, segment 123, offset 0
Jun  6 11:54:52 vpfdipsql1 postgres[31348]: [2-1] FATAL:  timeline 2 of the primary does not match recovery target timeline 1
Jun  6 11:54:57 vpfdipsql1 postgres[31354]: [2-1] FATAL:  timeline 2 of the primary does not match recovery target timeline 1

Je suppose que le nouvel esclave attend un Wal de mon nouveau maitre (qui a eu des mises à jour)...
Voici les wal de mon NouveauMaitre :
-rw-------.  1 postgres postgres 16777216 Jun  1 10:17 00000001000000A900000078
-rw-------.  1 postgres postgres 16777216 Jun  1 11:17 00000001000000A900000079
-rw-------.  1 postgres postgres 16777216 Jun  1 11:29 00000001000000A90000007A
-rw-------.  1 postgres postgres 16777216 Jun  1 00:17 00000001000000A90000007B
-rw-------.  1 postgres postgres 16777216 Jun  1 01:17 00000001000000A90000007C
-rw-------.  1 postgres postgres 16777216 Jun  1 02:17 00000001000000A90000007D
-rw-------.  1 postgres postgres 16777216 Jun  1 03:17 00000001000000A90000007E
-rw-------.  1 postgres postgres 16777216 Jun  1 04:17 00000001000000A90000007F
-rw-------.  1 postgres postgres 16777216 Jun  1 05:17 00000001000000A900000080
-rw-------.  1 postgres postgres 16777216 Jun  1 06:17 00000001000000A900000081
-rw-------.  1 postgres postgres 16777216 Jun  1 07:17 00000001000000A900000082
-rw-------.  1 postgres postgres 16777216 Jun  1 08:17 00000001000000A900000083
-rw-------.  1 postgres postgres 16777216 Jun  1 09:17 00000001000000A900000084
-rw-------.  1 postgres postgres 16777216 Jun  1 12:16 00000002000000A90000007A
-rw-------.  1 postgres postgres 16777216 Jun  1 15:57 00000002000000A90000007B
-rw-------.  1 postgres postgres 16777216 Jun  1 16:10 00000002000000A90000007C
-rw-------.  1 postgres postgres 16777216 Jun  1 16:13 00000002000000A90000007D
-rw-------.  1 postgres postgres 16777216 Jun  1 16:15 00000002000000A90000007E
-rw-------.  1 postgres postgres 16777216 Jun  1 16:37 00000002000000A90000007F
-rw-------.  1 postgres postgres 16777216 Jun  1 17:15 00000002000000A900000080
-rw-------.  1 postgres postgres 16777216 Jun  6 11:55 00000002000000A900000081
-rw-------.  1 postgres postgres       56 Jun  1 12:16 00000002.history

Quel wal attend mon Nouvel esclave (A9/19000000 in log file 169 !!!!) ... et pourquoi ce plantage ?

Merci pour vos réponses...

Hors ligne

#2 06/06/2012 12:13:53

rjuju
Administrateur

Re : Erreur de reprise sur les wal apres switch de mes serveurs

Bonjour,
comment avez-vous effectué le switch entre les 2 maîtres ?
Le message indique que la timeline à changé, et qu'il faut donc recréer l'esclave (pg_basebackup ou pg_start backup puis copie)

Hors ligne

#3 06/06/2012 14:16:39

genio
Membre

Re : Erreur de reprise sur les wal apres switch de mes serveurs

Bonjour...
j'ai effectué le switch en :
- Arrêtant le serveurMaitre
- Création du fichier trigger_ha' pour que mon esclave devvienne le maître (ce qui a fait passer mon recovery.conf en recovery.done)
- J'ai ensuite effectué des m.a.j sur mon NouveauMaitre
- J'ai rallumé l'ancien ServeurMaitre pour qu'il deviene mon nouveau ServeurEsclave (evec le recovery.conf qui va bien !)
- Je pensais que les WAL de mon NouveauMaître seraient interceptées NouvauEsclave et que cela continuerait comme ça...

Questions :
1°) N'est-ce pas ce qu'il faut faire quand il y a une panne sur le serveur maitre, afin de passer sur l'esclave (comme le dit la doc d'ailleurs !)?
2°) Comment m'en sortir maintenant si je n'ai pas de dump ?

merci pour vos réponses...

Hors ligne

#4 06/06/2012 14:18:11

genio
Membre

Re : Erreur de reprise sur les wal apres switch de mes serveurs

Autre chose : Quel WAL manque t'il dans pg_xlog ? Que veut dire A9/19000000 in log file 169 ?

Hors ligne

#5 06/06/2012 14:33:12

rjuju
Administrateur

Re : Erreur de reprise sur les wal apres switch de mes serveurs

C'est la bonne façon de procéder, mais passer un esclave en maître change la timeline et cela nécessite donc de recréer le nouvel esclave.
Pour vous en sortir un dump ne servirait pas, il faut faire un pg_basebackup sur votre nouvel esclave.

Hors ligne

#6 06/06/2012 16:49:16

genio
Membre

Re : Erreur de reprise sur les wal apres switch de mes serveurs

Merci...
1°) mais alors, cela veut dire que  s'il y a un switch entre serveurs (et qu'il y a eu des m.a.j sur le nouveau maître), on est obligé d'effectuer une restauration sur le nouvel esclave(à partir d'un backup du nouveau maître), avant de le remettre en route ...
Moi qui croyait que le simple fait de réallumer le nouvel esclave, reprenait les wal du nouveau maître et repartait comme en l'an 40 en tant qu'esclave... je me suis bien trompé !!!
Ai-je raison dans ma première affirmation 1°)

Hors ligne

#7 06/06/2012 17:05:34

rjuju
Administrateur

Re : Erreur de reprise sur les wal apres switch de mes serveurs

Ce n'est pas le fait de faire des mises à jour sur le nouveau maître qui induit ce problème, mais la promotion d'un esclave en maître, cela fait partie des restrictions de la réplication postgres.
Normalement, cette promotion ne se fait qu'en cas d'incident sur le serveur maître ce qui nécessite alors logiquement la reconstruction d'un nouvel esclave.
Dans votre cas, je suppose que c'était pour valider des mises à jour et switcher rapidement d'un maître à l'autre en cas de réussite.

Hors ligne

#8 07/06/2012 11:35:24

genio
Membre

Re : Erreur de reprise sur les wal apres switch de mes serveurs

Je voulais tester un 'switchover'... car imaginons une panne d'une heure sur le ServeurMaître sans crash de disque... juste un problème par exemple de database arrétee (pour diverses raisons !)  sur mon AncienMaitre...
Je switche l'AncienEsclave en NouveauMaitre => OK
J'effectue des m.a.j sur le NouveauMaitre => OK
Et je voulais au bout d'une heure, 'rallumer' le NouvelEsclave (AncienMaitre) afin que les modifications effectuées sur le NouveauMaitre puissent être  envoyées via les WAL, sur le NouvelEsclave...
Vous semblez me dire que ce n'est pas possible et qu'il faut, à chaque fois et quelle que soit la panne, restaurer le NouvelEsclave avant de repartir... mais alors, cela implique que pendant la restauration du NouvelEsclave, il faut arrêter le NouveauMaitre, sous peine qu'il y ait des modifications dessus et qu'il faille recommencer la restauration... non ?
Vous voulez un cachet d'aspirine ?

Hors ligne

#9 07/06/2012 11:49:11

rjuju
Administrateur

Re : Erreur de reprise sur les wal apres switch de mes serveurs

Non, le processus de création d'un esclave se fait très bien base lancée.
En cas de perte totale, vous avez l'exécutable pg_basebackup qui se connecte au serveur maître et recréé un esclave. Dans votre cas, je vous conseillerais un select pg_start_backup, puis un rsync pour ne copier que les fichier modifiés puis un pg_stop_backup et l'esclave se reconnectera sans soucis (si bien sur tous les wal générés entre temps sont disponibles).

Hors ligne

#10 07/06/2012 11:49:42

gleu
Administrateur

Re : Erreur de reprise sur les wal apres switch de mes serveurs

cela implique que pendant la restauration du NouvelEsclave, il faut arrêter le NouveauMaitre, sous peine qu'il y ait des modifications dessus et qu'il faille recommencer la restauration... non ?

Non. Vous faites comme d'habitude pg_start_backup, scp (ou plus intelligemment rsync), pg_stop_backup.


Guillaume.

Hors ligne

#11 12/06/2012 10:19:07

genio
Membre

Re : Erreur de reprise sur les wal apres switch de mes serveurs

Rebonjour à tous...
je reprends mon post pour vous dire que j'ai bien fait ce qu'il fallait et que ça ne fonctionne toujours pas :
J'ai effectué sur mon NouveauMaitre :  pg_start_backup/rsync des xlog (vers l'esclave)/pg_stop_backup
premièrement le pg_stop backup ne s'arrête pas et me rend :
NOTICE:  pg_stop_backup cleanup done, waiting for required WAL segments to be archived
WARNING:  pg_stop_backup still waiting for all required WAL segments to be archived (60 seconds elapsed)
HINT:  Check that your archive_command is executing properly.  pg_stop_backup can be canceled safely, but the database backup will not be usable without all the WAL segments.

Mais, me suis-je dit, étant donné que les wal sont passés du coté de mon NouvelEsclave, je peux restarter mon nouvealEsclave afin qu'il fonctionne... et bé non, il semblerait qu'il lui manque des wal (mais lequels ?)  !
Voici ce que me dit mon fichier log dans /var/log/ :
LOG:  could not create IPv6 socket: Address family not supported by protocol
Jun 12 10:17:40 vpfdipsql1 postgres[8116]: [2-1] LOG:  database system was shut down in recovery at 2012-06-12 10:16:59 CEST
Jun 12 10:17:40 vpfdipsql1 postgres[8116]: [3-1] LOG:  entering standby mode
Jun 12 10:17:40 vpfdipsql1 postgres[8116]: [4-1] LOG:  redo starts at A9/79001FC8
Jun 12 10:17:40 vpfdipsql1 postgres[8116]: [5-1] LOG:  consistent recovery state reached at A9/7B000000
Jun 12 10:17:40 vpfdipsql1 postgres[8116]: [6-1] LOG:  unexpected pageaddr A9/6E000000 in log file 169, segment 123, offset 0
Jun 12 10:17:40 vpfdipsql1 postgres[8118]: [2-1] FATAL:  timeline 2 of the primary does not match recovery target timeline 1
Jun 12 10:17:45 vpfdipsql1 postgres[8122]: [2-1] FATAL:  timeline 2 of the primary does not match recovery target timeline 1
Jun 12 10:17:50 vpfdipsql1 postgres[8123]: [2-1] FATAL:  timeline 2 of the primary does not match recovery target timeline 1
Jun 12 10:17:51 vpfdipsql1 postgres[8107]: [2-1] LOG:  received fast shutdown request


Suis-je clair..
Merci pour vos réponses...

Hors ligne

#12 12/06/2012 11:30:46

rjuju
Administrateur

Re : Erreur de reprise sur les wal apres switch de mes serveurs

Il faut faire le rsync sur tout le répertoire data et pas uniquement le répertoire pg_xlog, car il faut reconstruire entièrement l'esclave.
Ensuite il semble que vous ayez un problème sur l'archivage des wals. Vérifiez dans votre postgresql.conf du nouveau maitre le paramètre archive_command pour voir la commande effectuée et pourquoi elle ne fonctionne pas (pas d'autorisation sur le répertoire cible, plus de place ...)

Hors ligne

#13 13/06/2012 13:57:19

genio
Membre

Re : Erreur de reprise sur les wal apres switch de mes serveurs

Merci pour vos explications... je comprends mieux maintenant .. moi qui croyait que seuls les WAL basculés d'un serveur à l'autre suffiraient à remettre le bazar en marche, je me suis bien trompé ... ok aussi pour le archive_command, son emplacement était géré par 'root' et donc je ne pouvais pas écrire dessus...

Maintenant j'ai une autre erreur sur mon NouveauMaitre... en effectuant un stop (Ok) et un start (non Ok)de l'instance, le start part en 'failure' et me répond ceci dans ma log...
Jun 13 13:50:48 vpfdipsql2 postgres[16626]: [2-1] LOG:  could not create IPv6 socket: Address family not supported by protocol
Jun 13 13:50:48 vpfdipsql2 postgres[16626]: [3-1] WARNING:  could not create listen socket for "*"
Jun 13 13:50:48 vpfdipsql2 postgres[16626]: [4-1] FATAL:  could not create any TCP/IP sockets

Pouvez-vous m'expliquer pourquoi ?

Merci encore ...

Hors ligne

#14 13/06/2012 14:11:03

rjuju
Administrateur

Re : Erreur de reprise sur les wal apres switch de mes serveurs

A priori votre serveur est configuré pour écouter sur une adresse en ipV6 et votre kernel ne le supporte pas.


Vous pouvez vérifier dans le pg_hba.conf la présence d'une ligne contenant une adresse de la forme ::1/128 par exemple (localhost en ipv6) et les  commenter. Vous pouvez aussi regarder dans le fichier /etc/hosts pour voir si localhost ne redirige pas vers une ipv6 (::1 en ipv6 et 127.0.0.1 en ipv4).

Hors ligne

#15 14/06/2012 10:22:42

genio
Membre

Re : Erreur de reprise sur les wal apres switch de mes serveurs

Merci encore pour vos réponses...
en fait, mon esclave n'était pas bien configuré...
J'en  encore une petite erreur sur mon NouveaEsclave ... il starte correctement mais la log me rends un message du type :

Jun 13 16:28:20 vpfdipsql1 postgres[16616]: [2-1] FATAL:  timeline 2 of the primary does not match recovery target timeline 1
Jun 13 16:28:25 vpfdipsql1 postgres[16617]: [2-1] FATAL:  timeline 2 of the primary does not match recovery target timeline 1

et je n'ai pas réussi à comprendre sur les posts, si ce problème était grave...

Pouvez-vous encore m'aider en m'expliquant le truc ?

Hors ligne

#16 14/06/2012 14:41:14

genio
Membre

Re : Erreur de reprise sur les wal apres switch de mes serveurs

Désolé, j'ai envoyé le message un peu vite...
Lors de l'ouverture de mon slave j'ai effectivement :
Jun 14 14:18:31 vpfdipsql1 postgres[23515]: [2-1] LOG:  received fast shutdown request
Jun 14 14:18:31 vpfdipsql1 postgres[23525]: [2-1] LOG:  shutting down
Jun 14 14:18:31 vpfdipsql1 postgres[23525]: [3-1] LOG:  database system is shut down
Jun 14 14:31:47 vpfdipsql1 postgres[23628]: [1-1] LOG:  could not create IPv6 socket: Address family not supported by protocol
Jun 14 14:31:47 vpfdipsql1 postgres[23637]: [2-1] LOG:  database system was shut down in recovery at 2012-06-14 14:18:31 CEST
Jun 14 14:31:47 vpfdipsql1 postgres[23637]: [3-1] LOG:  entering standby mode
Jun 14 14:31:47 vpfdipsql1 postgres[23637]: [4-1] LOG:  redo starts at A9/79001FC8
Jun 14 14:31:47 vpfdipsql1 postgres[23637]: [5-1] LOG:  consistent recovery state reached at A9/7B000000
Jun 14 14:31:47 vpfdipsql1 postgres[23637]: [6-1] LOG:  unexpected pageaddr A9/6E000000 in log file 169, segment 123, offset 0
Jun 14 14:31:47 vpfdipsql1 postgres[23639]: [2-1] FATAL:  timeline 2 of the primary does not match recovery target timeline 1
Jun 14 14:31:52 vpfdipsql1 postgres[23645]: [2-1] FATAL:  timeline 2 of the primary does not match recovery target timeline 1
il semble dire qu'à partir du A9/7B000000 la restauration peut s'effectuer => OK
Mais qu'il y a un problème sur une page adresse A9/6E00000 => ok
Or voici le pg_xlog du serveur que je veux starter (qui d'ailleurs a été rsyncé avec le serveur maître=> pg_xlog identiques)
drwx------. 17 postgres postgres     4096 Jun 14 14:32 ..
drwx------.  3 postgres postgres    20480 Jun 14 14:30 .
-rw-------.  1 postgres postgres 16777216 Jun 14 14:30 00000002000000A90000008B
-rw-------.  1 postgres postgres 16777216 Jun 14 14:30 00000002000000A90000008C
drwx------.  2 postgres postgres    20480 Jun 14 14:30 archive_status
-rw-------.  1 postgres postgres 16777216 Jun 14 14:01 00000002000000A90000008A
-rw-------.  1 postgres postgres      293 Jun 14 14:01 00000002000000A90000008A.00000020.backup
-rw-------.  1 postgres postgres 16777216 Jun 14 13:56 00000002000000A900000089
-rw-------.  1 postgres postgres 16777216 Jun 13 12:38 00000002000000A900000088
-rw-------.  1 postgres postgres 16777216 Jun 12 10:12 00000002000000A900000087
-rw-------.  1 postgres postgres 16777216 Jun 12 10:12 00000002000000A900000086
-rw-------.  1 postgres postgres 16777216 Jun 12 10:05 00000002000000A900000085
-rw-------.  1 postgres postgres 16777216 Jun 12 10:02 00000002000000A900000084
-rw-------.  1 postgres postgres 16777216 Jun 12 10:00 00000002000000A900000083
-rw-------.  1 postgres postgres 16777216 Jun 12 09:56 00000002000000A900000082
-rw-------.  1 postgres postgres 16777216 Jun 12 09:54 00000002000000A900000081
-rw-------.  1 postgres postgres 16777216 Jun  1 17:15 00000002000000A900000080
-rw-------.  1 postgres postgres 16777216 Jun  1 16:37 00000002000000A90000007F
-rw-------.  1 postgres postgres 16777216 Jun  1 16:15 00000002000000A90000007E
-rw-------.  1 postgres postgres 16777216 Jun  1 16:13 00000002000000A90000007D
-rw-------.  1 postgres postgres 16777216 Jun  1 16:10 00000002000000A90000007C
-rw-------.  1 postgres postgres 16777216 Jun  1 15:57 00000002000000A90000007B
-rw-------.  1 postgres postgres 16777216 Jun  1 12:16 00000002000000A90000007A
-rw-------.  1 postgres postgres       56 Jun  1 12:16 00000002.history
-rw-------.  1 postgres postgres 16777216 Jun  1 11:29 00000001000000A90000007A
-rw-------.  1 postgres postgres 16777216 Jun  1 11:17 00000001000000A900000079
-rw-------.  1 postgres postgres 16777216 Jun  1 10:17 00000001000000A900000078
-rw-------.  1 postgres postgres 16777216 Jun  1 09:17 00000001000000A900000084
-rw-------.  1 postgres postgres 16777216 Jun  1 08:17 00000001000000A900000083
-rw-------.  1 postgres postgres 16777216 Jun  1 07:17 00000001000000A900000082
-rw-------.  1 postgres postgres 16777216 Jun  1 06:17 00000001000000A900000081
-rw-------.  1 postgres postgres 16777216 Jun  1 05:17 00000001000000A900000080
-rw-------.  1 postgres postgres 16777216 Jun  1 04:17 00000001000000A90000007F
-rw-------.  1 postgres postgres 16777216 Jun  1 03:17 00000001000000A90000007E
-rw-------.  1 postgres postgres 16777216 Jun  1 02:17 00000001000000A90000007D
-rw-------.  1 postgres postgres 16777216 Jun  1 01:17 00000001000000A90000007C
-rw-------.  1 postgres postgres 16777216 Jun  1 00:17 00000001000000A90000007B
Soit des log 000000001nnnn  et des logs 0000002nnn .
1°) Question : Ou se trouve ma A9/6E000000 que je ne vois pas dans mon pg_xlog ...
2°) les timelines définissent-elles les 0000001nn (pour timeline 1)  et 000002nn (pour les timeline2
3°) Comment m'en sortir ?
Merci pour vos réponses...

Hors ligne

#17 15/06/2012 10:13:22

genio
Membre

Re : Erreur de reprise sur les wal apres switch de mes serveurs

Bonjour à tous...
Pour plus d'infos, j'ai reconstitué l'esclave avec un rsync des répertoires 'pg_xlog' et 'base' du nouveau maître vers le nouvel esclave... Mais le problème est que, quand je suis sur mon nouvel esclave, le pg_start_backup ne fonctionne pas car il me dit que mon nouvel esclave est en cours de démarrage (voir la log du message précédent avec le timeline !)... et donc je ne peux pas faire, comme sur le post : 'Mise en place de la réplication avec PostgreSQL 9.0 - 2/2' => pg_start_backup, cp (ici je fais un rsync) et pg_stop_backup... est-ce la raison de mon problème ?
Merci encore pour vos réponses...

Hors ligne

#18 15/06/2012 11:05:40

genio
Membre

Re : Erreur de reprise sur les wal apres switch de mes serveurs

J'ai trouvé !
En fait, vous me l'aviez déjà dit : il faut que TOUS les repertoires du serveur maitre soient rsynqués vers le serveur esclave... ça fonctionne !
Le problème est que je ne travaille pas à temps complet sur ce projet...

Merci encore pour vos réponses..

Hors ligne

Pied de page des forums