PostgreSQL
La base de données la plus sophistiquée au monde.

Ouverture de session

Navigation

Contactez-nous

Administration du site :
"equipe chez postgresqlfr point org"

Contact presse :
"fr chez postgresql point org"

Contact association :
"bureau chez postgresqlfr point org"

Questions PostgreSQL :
 IRC :
  serveur irc.freenode.net
  canal #postgresqlfr

Recherche

Accéder aux archives

« Octobre 2008  
Lun Mar Mer Jeu Ven Sam Dim
  2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31  

Syndication

Flux XML

Sondage

Quelle est la version de PostgreSQL la plus répandue sur vos serveurs ?
8.3
10%
8.2
42%
8.1
40%
8.0
2%
7.4
6%
7.3 ou antérieure
0%
Nombre de votes: 48

Configuration de Slony-I pour le failover - fonctionne dans un sens mais pas dans l'autre !

Technique - interfaces | Configuration de Slony-I pour le failover - fonctionne dans un sens mais pas dans l'autre !

Par jerome le 09/06/2006 - 14:57

Bonjour,

J'essaye de configurer Slony v1.5.15 avec 2 noeuds PostgreSQL 8.1.4. Globalement, j'arrive Ă  mes fins, sauf dans le cas du failover "d'urgence".
Si la base maître était sur $MASTERHOST, et que $MASTERHOST ne répond plus, en exécutant la commande suivante de $SLAVEHOST, tout se passe bien: $MASTERHOST est retiré et la base maître "passe" sur $SLAVEHOST

#!/bin/sh

slonik <<_EOF_
cluster name= $CLUSTERNAME;
node 1 admin conninfo='dbname=$MASTERDBNAME host=$MASTERHOST port=5432 user=$REPLICATIONUSER password=slony';
node 2 admin conninfo='dbname=$SLAVEDBNAME host=$SLAVEHOST port=5432 user=$REPLICATIONUSER password=slony';
failover (id=1, backup node=2);
drop node (id=1, event node=2);
_EOF_

Une fois $MASTERHOST rétabli, à partir de ce dernier, je lance la commande suivante, et $MASTERHOST est réintégré au cluster, et redevient la base maître:

#!/bin/sh

slonik << _EOF_
cluster name= $CLUSTERNAME;
node 1 admin conninfo= 'dbname=$MASTERDBNAME host=$MASTERHOST port=5432 user=$REPLICATIONUSER password=slony';
node 2 admin conninfo= 'dbname=$SLAVEDBNAME host=$SLAVEHOST port=5432 user=$REPLICATIONUSER password=slony';

echo 'Creation Noeud 1';
try {
store node (id=1, comment= 'Noeud 1', event node=2);
}
on error {
echo 'Erreur creation Noeud 1';
exit -1;
}
echo 'OK';

try {
store path (server=2, client=1, conninfo='dbname=$SLAVEDBNAME host=$SLAVEHOST port=5432 user=$REPLICATIONUSER password=slony');
store path (server=1, client=2, conninfo='dbname=$MASTERDBNAME host=$MASTERHOST port=5432 user=$REPLICATIONUSER password=slony');
}
on error {
echo 'Erreur creation des chemins';
exit -1;
}
echo 'Creation des chemins OK';

try {
echo 'Creation des ecoutes';
store listen (origin=2, provider=2, receiver=1);
store listen (origin=1, provider=1, receiver=2);
}
on error {
echo 'Erreur creation des ecoutes';
exit -1;
}
echo 'OK';

subscribe set (id=1, provider=2, receiver= 1, forward= no);
lock set (id=1, origin=2);
move set (id=1, old origin=2, new origin=1);

_EOF_

C'est le résultat escompté. Parfait !!!

Mon problème est dans l'autre sens. Si, pour une raison quelconque, la base maître se trouvait sur $SLAVEHOST, et que celle-ci tombe, alors je lance de $MASTERHOST la commande suivante:

#!/bin/sh

slonik <<_EOF_
cluster name= $CLUSTERNAME;
node 1 admin conninfo='dbname=$MASTERDBNAME host=$MASTERHOST port=5432 user=$REPLICATIONUSER password=slony';
node 2 admin conninfo='dbname=$SLAVEDBNAME host=$SLAVEHOST port=5432 user=$REPLICATIONUSER password=slony';
failover (id=2, backup node=1);
drop node (id=2, event node=1);
_EOF_

A priori, tout semble OK. Je peux travailler sur $MASTERHOST, et le noeud 2 semble bien exclus du cluster. Mais impossible de le réintégrer. Voici le script que je lance (à partir de SLAVEHOST)

#!/bin/sh

slonik << _EOF_
cluster name= $CLUSTERNAME;
node 1 admin conninfo= 'dbname=$MASTERDBNAME host=$MASTERHOST port=5432 user=$REPLICATIONUSER password=slony';
node 2 admin conninfo= 'dbname=$SLAVEDBNAME host=$SLAVEHOST port=5432 user=$REPLICATIONUSER password=slony';

echo 'Creation Noeud 2';
try {
store node (id=2, comment= 'Noeud 2', event node=1);
}
on error {
echo 'Erreur creation Noeud 2';
exit -1;
}
echo 'OK';

try {
store path (server=2, client=1, conninfo='dbname=$SLAVEDBNAME host=$SLAVEHOST port=5432 user=$REPLICATIONUSER password=slony');
store path (server=1, client=2, conninfo='dbname=$MASTERDBNAME host=$MASTERHOST port=5432 user=$REPLICATIONUSER password=slony');
}
on error {
echo 'Erreur creation des chemins';
exit -1;
}
echo 'Creation des chemins OK';

try {
echo 'Creation des ecoutes';
store listen (origin=2, provider=2, receiver=1);
store listen (origin=1, provider=1, receiver=2);
}
on error {
echo 'Erreur creation des ecoutes';
exit -1;
}
echo 'OK';

#subscribe set (id=1, provider=1, receiver= 2, forward= no);
lock set (id=1, origin=1);
move set (id=1, old origin=1, new origin=2);

_EOF_

Aucun message d'erreur n'apparait à l'exécution du script, mais Slony ne redémarre que sur un des 2 noeuds (a priori, le 1er lancé). Sur l'autre, j'obtiens le message suivant: FATAL localListenThread "select "_T1".cleanupNodeLock(): insert into "_T1".sl_nodeLock values (1,0,"pg_catalog".pg_backend_pid());" - ERREUR: une clé dupliquée rompt la contrainte unique "sl_nodelock-pkey"
Et tout est cassé ! Je n'arrive plus à redémarrer Slony sans dropper une des bases. Supprimer les schéma du Cluster et tout reprendre depuis le début.

Et je sèche, et je sèche.
Toute aide serait la bienvenue.

Cordialement,
JĂ©rĂ´me

Options d'affichage des commentaires

Sélectionnez la méthode d'affichage des commentaires que vous préférez, puis cliquez sur "Sauvegarder les paramètres" pour activer vos changements.

Re: failover avec Slony-I

alex/ = 12 Juin, 2006 - 09:21

Bonjour JĂ©rĂ´me,

Il me semble que tu n'as pas "droppé" ton noeud 2 avant de le ré-intégrer. Cette opération est nécessaire si tu utilises le failover sur un membre.

Cordialement

Alexandre

www.dalibo.com


Re: failover avec Slony-I

jerome/ = 12 Juin, 2006 - 18:01

Bonjour,

Et merci pour ta réponse. Mais j'avoue que pour l'instant, devant la relative complexité de mise en oeuvre de Slony, et face aux contraintes d'utilisation que cela implique (modification de schémas, etc), j'explore une voie, certe moins élégante, mais nettement plus simple à mettre en oeuvre, basée sur l'utilisation conjointe de HeartBeat et de DRBD.

Cordialement,

JĂ©rĂ´me


© PostgreSQLFr, tous droits rĂ©servĂ©s.
Site déclaré à la CNIL sous le numéro 1074678, conformément à la Loi en vigueur.