Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
#26 Re : Réplication » Deux standby pour une réplication postgres9.1, la meilleure méthode? » 07/11/2011 17:45:05
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!
#27 Re : Réplication » Deux standby pour une réplication postgres9.1, la meilleure méthode? » 07/11/2011 17:43:22
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
#28 Re : Réplication » Deux standby pour une réplication postgres9.1, la meilleure méthode? » 07/11/2011 17:36:13
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....
#29 Réplication » Réplication hotstandby postges 9.1, Erreur transfert de WAL » 07/11/2011 17:34:49
- lolotte35
- Réponses : 33
Bonjour,
J'ai une réplication avec 1 maitre et 2 standby et l'autre jour en voulant ajouter une BDD j'ai eu une erreur de place sur le disque.
Suite à ça, j'ai diminué mon wal_keep_segment de 1000 à 100 (c'était un test justement sur ce paramètre) et j'ai supprimé des fichiers dans pg_xlog pour permettre à postgres de redémarrer et de supprimer cette BDD en trop.(Je ne pouvais pas agrandir l'espace disque.)
Ma 1ère BDD est bien complète (elle n'avait pas bouger entre temps), et postgres à redémarrer.
Par contre ,j'ai dû arrêté mes Standbys en créant le fichier définit dans trigger_file .
ça a fonctionné, le fichier recovery.conf s'est instantanément renommé recovery.done.
Par contre, je vois que le maitre est toujours en erreur sur un fichier :
2011-11-06 14:46:53.450 CET - - - - DÉTAIL: La commande d'archivage qui a échoué était : rsync -a pg_xlog/000000010000002A00000089 xxx.xxx.xx.xx:/data/archives_xlog/000000010000002A00000089 && rsync -az pg_xlog/000000010000002A00000089 xxx.xxx.xx.xx:/data/archives_xlog/000000010000002A00000089
2011-11-06 14:46:53.450 CET - - - - ATTENTION: le journal des transactions « 000000010000002A00000089 » n'a pas pu être archivé : trop d'échecs
rsync: link_stat "/data/pg_xlog/000000010000002A00000089" failed: No such file or directory (2)
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1039) [sender=3.0.6]
Est ce qu'il n'a pas compris que les Standbys n'existaient plus, ou est ce qu'il veut son fichier "000000010000002A00000089 " ?
Comment faire pour qu'il arrête de faire cette erreur ?
Quand je fais "ps" je vois qu'il est en erreur sur ce fichier :
[root@IFMSRVEURICABDD data]# ps -edf | grep postgres
postgres 19407 1 9 16:17 ? 00:00:00 /usr/pgsql-9.1/bin/postmaster -p 5432 -D /data
postgres 19412 19407 0 16:17 ? 00:00:00 postgres: logger process
postgres 19414 19407 0 16:17 ? 00:00:00 postgres: writer process
postgres 19415 19407 0 16:17 ? 00:00:00 postgres: wal writer process
postgres 19416 19407 0 16:17 ? 00:00:00 postgres: archiver process failed on 000000010000002A00000089
postgres 19417 19407 0 16:17 ? 00:00:00 postgres: stats collector process
root 19428 18012 0 16:17 pts/0 00:00:00 grep postgres
#30 Re : Réplication » Deux standby pour une réplication postgres9.1, la meilleure méthode? » 07/11/2011 17:02:31
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...
#31 Re : Général » Existe-t-il un outils pour suivre la réplication interne en postgres9? » 04/11/2011 11:14:18
Ah oui, ça doit être un bon indicateur.
Je vais pouvoir m'amuser avec tout ça!!!!
#32 Re : Général » Existe-t-il un outils pour suivre la réplication interne en postgres9? » 04/11/2011 10:43:17
Merci je regarde tout de suite!
#33 Général » Existe-t-il un outils pour suivre la réplication interne en postgres9? » 03/11/2011 18:41:56
- lolotte35
- Réponses : 4
Bonjour,
Je suis sur des tests entres 3 bases de données postgres9.1, dont 1 maitre qui est au Mans, 1 Standby qui est au Mans et 1 Standby qui est à Paris.
Pour ne pas saturer le réseau lors de mes tests je lance tout la nuit.
Donc par exemple, je ne sais pas combien ma sauvergarde mets à remonter du Mans vers Paris.
Je vois environ les temps en suivant le traffic réseau entre nos 2 sites.
Mais quand on passera en production, je sais qu'il faudra définir le retard du Standby de Paris par exemple, le temps lors d'un reindex de la base maitre, etc....
J'ai bien noté que l'on pouvait faire ça:
Pour un suivi des standbys, ils existent les fonctions pg_last_xlog_receive_location() et
pg_last_xlog_replay_location() qui indiquent respectivement la dernière position reçue et
la dernière position rejouée dans les journaux de transactions sur un serveur en Hot Standby.
Cette information est à comparer au résultat fourni par l'exécution de la fonction
pg_current_xlog_location() sur le serveur maître. C'est par exemple ce que fait pgPool-II
pour savoir si un esclave accuse un retard trop important.
Mais bon, comparer un "2A/2E07D1B0" et un "2A/2E07E380" c'est assez abstrait pour moi... àpart dire que c'est pas le même....
J'aimerai avoir un outils pour savoir si les standbys sont à jour et surtout savoir s'ils sont tombés....
Charlotte
#34 Re : Réplication » Deux standby pour une réplication postgres9.1, la meilleure méthode? » 28/10/2011 08:54:38
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!
#35 Réplication » Deux standby pour une réplication postgres9.1, la meilleure méthode? » 27/10/2011 09:38:08
- lolotte35
- Réponses : 22
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