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 27/10/2011 09:38:08

lolotte35
Membre

Deux standby pour une réplication postgres9.1, la meilleure méthode?

Bonjour,

J'ai mis en place une réplication avec postgres 9.1 au départ entre deux serveurs : 1 maitre et 1 standby, et j'ai testé hier soir entre 1 maitre et 2 standbys.

Pour cela j'ai fait:

echo "SELECT pg_start_backup('backup', true)" | su postgres -c psql

rsync -avz -e ssh /data/ IP_standby1:/data/ --exclude postmaster.pid --exclude postgresql.conf --exclude pg_hba.conf --exclude save/ --exclude logs/ --exclude files/ --exclude pg_log/ &&
rsync -a -v -e ssh /data/ IP_standby2:/data/ --exclude postmaster.pid --exclude postgresql.conf --exclude pg_hba.conf --exclude save/ --exclude logs/ --exclude files/ --exclude pg_log/

echo "SELECT pg_stop_backup()" | su postgres -c psql


Du coup il a synchronisé le premier standby, qui n'est pas sur le même site que le serveur maitre donc il a mis près de 2h-2h30, puis ensuite le deuxième standby, qui est sur même site que le maitre, il a mis 1h.

Est -il mieux de faire c'est deux "rsync" dans la même commande, en parallèle, l'un après l'autre?
Vaut il mieux faire le pg_start_backup, le rsync, le pg_stop_backup pour un standby puis refaire la même chose pour l'autre standby ?


Je me demandais aussi quelle est la méthode pour ajouter 1 standby à un maitre qui possède déjà un standby.
Si on fait le  pg_start_backup, il arrête la communication avec son 1er standby déjà mis en place depuis quelques temps?
ou alors il continue normalement avec lui et sait que ce n'est que pour le deuxième standby ?


Je voudrai aussi tester la commande qui est arrivée en 9.1:
pg_basebackup -D /tmp/newcluster -U replication –v

Cette commande évite de faire les 3 commandes "pg_start_backup, le rsync, le pg_stop_backup" d'après ce que j'ai compris.
Elle copie tout le répertoire data de postgres?
Peut on exclure des répertoires ou fichiers?
Car nous avons dans notre "data" des répertoires de sauvegardes, de fichiers qui ne doivent pas être copier sur les standbys (au pire nous ferons des umount de ces répertoires le temps de la copie).



Une dernière question :
est ce que ça sert à quelque chose de compresser nos wall pour les transferts entre serveurs ?
J'ai fait des tests hier et il me semblait que le rsync prenait le même temps avec ou sans l'option "z"...

Merci beaucoup pour vos réponses


Charlotte

Hors ligne

#2 27/10/2011 18:38:31

gleu
Administrateur

Re : Deux standby pour une réplication postgres9.1, la meilleure méthode?

Vaut il mieux faire le pg_start_backup, le rsync, le pg_stop_backup pour un standby puis refaire la même chose pour l'autre standby ?

J'aurais tendance à faire un tar en local (entre le pg_start_backup et le pg_stop_backup), puis d'envoyer le tar sur les deux serveurs.

Je me demandais aussi quelle est la méthode pour ajouter 1 standby à un maitre qui possède déjà un standby.

Comme pour le premier : pg_start_backup, copie, pg_stop_backup, ...

Si on fait le  pg_start_backup, il arrête la communication avec son 1er standby déjà mis en place depuis quelques temps?

Non.

ou alors il continue normalement avec lui et sait que ce n'est que pour le deuxième standby ?

Il continue normalement (et se fout de savoir pour qui c'est smile ).

Elle copie tout le répertoire data de postgres?

Oui.

Peut on exclure des répertoires ou fichiers?

Non (sauf à modifier son code source, ce qui n'est pas très compliqué).

Car nous avons dans notre "data" des répertoires de sauvegardes, de fichiers qui ne doivent pas être copier sur les standbys (au pire nous ferons des umount de ces répertoires le temps de la copie).

Vous ne devriez pas avoir ça dans le répertoire des données de PostgreSQL, c'est une très mauvaise pratique. PostgreSQL est seul maitre à bord de ce répertoire.


Guillaume.

Hors ligne

#3 28/10/2011 08:54:38

lolotte35
Membre

Re : Deux standby pour une réplication postgres9.1, la meilleure méthode?

Merci guillaume, je vais tenter le tar alors pour le 1er transfert du répertoire data.

Les répertoires ajoutés dans notre 'data' sont des points de montage, donc je pense que je les démonterai (umount"erai") le temps du rsync.

Bon alors je retourne à mes tests!

Hors ligne

#4 07/11/2011 17:02:31

lolotte35
Membre

Re : Deux standby pour une réplication postgres9.1, la meilleure méthode?

J'aurai une petite question technique sur l'ajout d'un Standby :

Mon maitre possède déjà un Standby, il copie chez lui les WAL dans un répertoire "archives_xlog".

Si j'ajoute un Standby :
1-faut il redémarrer postgres sur le maitre pour qu'il prenne en compte les modifications de :
archive_command et max_wal_senders ?

2-On fait le pg_start_backup, ça créé un fichier backup_label, est ce que cela à une influence sur le Standby en cours, par exemple ça le met en pause ?
Car je sais que pour mon 2ème standby la copie de data va prendre 3h....et que je lance ça la nuit, donc je ne ferai la commande pg_stop_backup que 12 heures plus tard.

3-Pendant le pg_start_backup, il commence déjà à envoyer les nouveaux fichiers avec mon archive_command? et quand le 2ème Standby est prêt, il pourra les "avaler"...

4- Mon 2ème standby étant plus lent, il a été très en retard l'autre nuit suite à un reindex du maitre.
J'avais mis le wal_keep_segments à 10, donc quand le Standby est venu 3h après, dire au maitre que pour tel fichier WAL c'était ok, le maitre lui a répondu que c'était déjà supprimé.

Est ce une erreur grave? est ce que cela veut dire que sans la confirmation, le Standby n'a pas fait la maj du WAL ?
Du coup, là j'ai passé le paramètre à 100...

Dernière modification par lolotte35 (07/11/2011 17:04:29)

Hors ligne

#5 07/11/2011 17:29:30

kenrio
Membre

Re : Deux standby pour une réplication postgres9.1, la meilleure méthode?

lolotte35 a écrit :

2-On fait le pg_start_backup, ça créé un fichier backup_label, est ce que cela à une influence sur le Standby en cours, par exemple ça le met en pause ?
Car je sais que pour mon 2ème standby la copie de data va prendre 3h....et que je lance ça la nuit, donc je ne ferai la commande pg_stop_backup que 12 heures plus tard.

je peux pas répondre à vos questions désolé, mais pourquoi douze heures plus tard ?

Hors ligne

#6 07/11/2011 17:36:13

lolotte35
Membre

Re : Deux standby pour une réplication postgres9.1, la meilleure méthode?

parce que je dois lancer mon start à 18h en partant pour ne pas saturer notre réseau, ainsi que la copie du data (qui met prêt de 3h) , puis je ne lance le stop que le lendemain matin quand je reviens au travail! ça doit faire dans les 12h....

Hors ligne

#7 07/11/2011 17:39:35

kenrio
Membre

Re : Deux standby pour une réplication postgres9.1, la meilleure méthode?

Pourquoi c'est pas un script .sh qui lance le start backup, la copie et ensuite le stop ?

Hors ligne

#8 07/11/2011 17:43:22

lolotte35
Membre

Re : Deux standby pour une réplication postgres9.1, la meilleure méthode?

Je n'ai jamais fait de script comme ça alors je ne m'y suis pas lancée...

Mais je suis d'accord que pour la mise en production il faudra que je m'y colle...

D'ailleurs j'ai trouvé sur un post un script que je commençais à mettre à ma sauce, mais pas testé encore:

#!/bin/bash
PSQL_BIN=/usr/bin #Binary folder
PSQL_DATA=/data #Folder containing all the configuration files
IP_SLAVE=XXX.XXX.XX.XX

#Initialize standby
service postgresql-9.1 stop
rm -rf /data/pg_*
rm -f /data/postmaster*
rm -rf /data/PG_VERSION
rm -rf /data/base
rm -rf /data/global
rm -rf /data/archives_xlog

sleep 1
cp $PSQL_DATA/postgresql.conf.slave $PSQL_DATA/postgresql.conf
cp $PSQL_DATA/recovery.conf.slave $PSQL_DATA/recovery.conf
echo "Le Standby est pret pour la copie"
sleep 1

$PSQL_BIN/psql postgres -c "select pg_start_backup('backup')"
rsync -a -v -e ssh /$PSQL_DATA/ $IP_SLAVE:/$PSQL_DATA/ --exclude postmaster.pid --exclude postgresql.conf --exclude save/ --exclude logs/ --exclude files/
$PSQL_BIN/psql postgres -c "select pg_stop_backup()"
sleep 1
echo "La copie est finie"

sleep 1
service postgresql-9.1 start
sleep 1
echo "Le standby est actif"

exit 0

Hors ligne

#9 07/11/2011 17:45:05

lolotte35
Membre

Re : Deux standby pour une réplication postgres9.1, la meilleure méthode?

Mais j'aimerai quand même comprendre le mécanisme pour répondre aux questions possibles de la hiérarchie et être sûre pour la mise en prod!

Hors ligne

#10 07/11/2011 17:49:39

kenrio
Membre

Re : Deux standby pour une réplication postgres9.1, la meilleure méthode?

lolotte35 a écrit :

$PSQL_BIN/psql postgres -c "select pg_start_backup('backup')"
rsync -a -v -e ssh /$PSQL_DATA/ $IP_SLAVE:/$PSQL_DATA/ --exclude postmaster.pid --exclude postgresql.conf --exclude save/ --exclude logs/ --exclude files/
$PSQL_BIN/psql postgres -c "select pg_stop_backup()"

c'est ce que je disais : start backup, rsync, stop backup. smile

c'est le script que je fais pour mes sauvegardes pitr.

en prod faut oublier le "je ferais ça chaque matin et chaque soir" toujours utiliser le cron et des scripts smile et le mieux c'est de les tester en test ^^

Dernière modification par kenrio (07/11/2011 17:49:57)

Hors ligne

#11 07/11/2011 17:53:31

lolotte35
Membre

Re : Deux standby pour une réplication postgres9.1, la meilleure méthode?

oui en prod on nele ferai qu'une seule fois, le jour J ensuite normalement y aura pas de problème!

là justement je suis en test donc je tue souvent mes bases et mes réplications pour tout refaire!

Hors ligne

#12 07/11/2011 17:56:03

kenrio
Membre

Re : Deux standby pour une réplication postgres9.1, la meilleure méthode?

lolotte35 a écrit :

oui en prod on nele ferai qu'une seule fois, le jour J ensuite normalement y aura pas de problème!

là justement je suis en test donc je tue souvent mes bases et mes réplications pour tout refaire!

"avale", "tue" postgres n'est pas une bête sauvage big_smile

Hors ligne

#13 07/11/2011 17:57:20

lolotte35
Membre

Re : Deux standby pour une réplication postgres9.1, la meilleure méthode?

un peu quand même , vu ce que je lui fais faire en ce moment, le pauvre!
lol

Dernière modification par lolotte35 (07/11/2011 17:57:39)

Hors ligne

#14 07/11/2011 21:09:45

gleu
Administrateur

Re : Deux standby pour une réplication postgres9.1, la meilleure méthode?

Pour répondre aux premières questions :

1-faut il redémarrer postgres sur le maitre pour qu'il prenne en compte les modifications de : archive_command et max_wal_senders ?

archive_command, non. max_wal_senders, oui.

2-On fait le pg_start_backup, ça créé un fichier backup_label, est ce que cela à une influence sur le Standby en cours, par exemple ça le met en pause ? Car je sais que pour mon 2ème standby la copie de data va prendre 3h....et que je lance ça la nuit, donc je ne ferai la commande pg_stop_backup que 12 heures plus tard.

Non, ça ne le met pas en pause. Aucun soucis, vous pouvez lancer pg_stop_backup bien plus tard.

3-Pendant le pg_start_backup, il commence déjà à envoyer les nouveaux fichiers avec mon archive_command? et quand le 2ème Standby est prêt, il pourra les "avaler"...

Rien à voir avec le pg_start_backup. L'envoi des journaux se fait dès que le archive_command est configuré.

4- Mon 2ème standby étant plus lent, il a été très en retard l'autre nuit suite à un reindex du maitre. J'avais mis le wal_keep_segments à 10, donc quand le Standby est venu 3h après, dire au maitre que pour tel fichier WAL c'était ok, le maitre lui a répondu que c'était déjà supprimé. Est ce une erreur grave? est ce que cela veut dire que sans la confirmation, le Standby n'a pas fait la maj du WAL ? Du coup, là j'ai passé le paramètre à 100...

Grave... oui, quand même. Faut refaire l'esclave.


Guillaume.

Hors ligne

#15 09/11/2011 17:47:22

lolotte35
Membre

Re : Deux standby pour une réplication postgres9.1, la meilleure méthode?

J'ai testé le pg_basebackup  pour éviter de faire le start, le rsync et le stop, mais ce n'est pas possible dans mon cas car mon maitre et mes standby sont sur des serveurs différents et le  pg_basebackup croit que l'ip que je lui donne est un répertoire en local!

Je crois que ça ne peut fonctionner que si le maitre et le standby sont sur le même serveur, non?

Hors ligne

#16 09/11/2011 18:22:47

Marc Cousin
Membre

Re : Deux standby pour une réplication postgres9.1, la meilleure méthode?

Non, pg_basebackup marche parfaitement entre deux machines distinctes. C'est même le but.

Donnez votre ligne de commande, il doit y avoir un problème de ce côté là.


Marc.

Hors ligne

#17 09/11/2011 18:30:07

lolotte35
Membre

Re : Deux standby pour une réplication postgres9.1, la meilleure méthode?

/usr/pgsql-9.1/bin/pg_basebackup -D 192.168.13.36:/data/ -U replication_role –v

J'ai exécuté cette commande sur le maitre
l'ip est celle d'un standby
le répertoire où il doit copier est "/data"
l'utilisateur de réplication est replication_role

Hors ligne

#18 09/11/2011 18:34:33

Marc Cousin
Membre

Re : Deux standby pour une réplication postgres9.1, la meilleure méthode?

-D 192.168.13.36:/data/ n'est pas le bon format, à moins que vous ayez un répertoire appelé "192.168.13.36:" sur votre machine.

Par contre, la commande pg_basebackup doit être exécutée sur la machine esclave (il faut bien que pg_basebackup puisse écrire). Je présume que c'est ça votre problème ?

(pour préciser le host, le port, l'utilisateur, etc, c'est les options habituelles, -h, -p -U …)


Marc.

Hors ligne

#19 09/11/2011 18:39:29

lolotte35
Membre

Re : Deux standby pour une réplication postgres9.1, la meilleure méthode?

ah donc sur l'esclave je dois faire

/usr/pgsql-9.1/bin/pg_basebackup -D /data/ -U replication_role –v
et il sait tout seul où est son maitre! mais quel homme !

Hors ligne

#20 09/11/2011 19:01:01

gleu
Administrateur

Re : Deux standby pour une réplication postgres9.1, la meilleure méthode?

Non, il ne sait pas tout seul qui est le maître, désolé de vous décevoir smile

Vous devez lui indiquer le maître avec les options de connexion habituelles (-h, -p, -U). À priori, vous cherchez à faire ça :

/usr/pgsql-9.1/bin/pg_basebackup -h 192.168.13.36 -D le_repertoire_local_ou_installer_l_esclave -U replication_role –v


Guillaume.

Hors ligne

#21 10/11/2011 18:44:22

lolotte35
Membre

Re : Deux standby pour une réplication postgres9.1, la meilleure méthode?

En effet, je suis si déçue!

ok donc sur l'esclave je lance :

/usr/pgsql-9.1/bin/pg_basebackup -h IP_MAITRE -D /data -U replication_role –v

j'essayerai dès lundi, en arrêtant un de mes standbys!
Pour le week end, je vais les laisser se reposer.

Hors ligne

#22 14/11/2011 16:52:46

lolotte35
Membre

Re : Deux standby pour une réplication postgres9.1, la meilleure méthode?

ça fonctionne!

Hors ligne

#23 14/11/2011 17:01:25

gleu
Administrateur

Re : Deux standby pour une réplication postgres9.1, la meilleure méthode?

Cool smile


Guillaume.

Hors ligne

Pied de page des forums