Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#1 Re : Réplication » Slony » 26/03/2009 10:53:48
Voila le script modifié
Comme je ne suis pas un pro des scripts j'ai modifié celui d'origine livré avec la Débian. Il prend en compte l'ensemble des clusters maintenant.
Le code est surement perfectible mais bon au moins ca marche
bye.
#!/bin/bash
### BEGIN INIT INFO
# Provides: slony1
# Required-Start: $local_fs $remote_fs $network
# Required-Stop: $local_fs $remote_fs $network
# Should-Start: $time postgresql
# Should-Stop: $time postgresql
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: start Slony-I daemon
# Description: Slony-I is a replication system for PostgreSQL.
### END INIT INFO
PATH=/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/bin/slon
if [ -r /etc/default/slony1 ]; then
. /etc/default/slony1
fi
instances() {
ls /etc/slony1/*/slon.conf 2>/dev/null | sed -n 's,^/etc/slony1/\(.*\)/slon.conf$,\1,p'
}
conffile() {
echo "/etc/slony1/$1/slon.conf"
}
conffiletool() {
echo "/etc/slony1/$1/slon_tools.conf"
}
pidfile() {
echo "/var/run/slony1/node$1.pid"
}
prepare_start() {
mkdir -p /var/run/slony1 \
&& chown postgres:postgres /var/run/slony1/ \
&& chmod 2775 /var/run/slony1/
}
d_start() {
slon_start --config=$(conffiletool $1) --nowatchdog $SLON_TOOLS_START_NODES >/dev/null
}
d_stop() {
ps -edf | grep node$SLON_TOOLS_START_NODES | grep -v "grep" | cut -d " " -f7
}
case $1 in
start)
status=0
echo "Starting Slony-I daemon"
prepare_start
if [ -f $(pidfile $SLON_TOOLS_START_NODES) ]; then
echo "Deamon Slony is already running clusters node $SLON_TOOLS_START_NODES"
else
for x in $(instances); do
echo "Deamon Slony is running cluster $x node $SLON_TOOLS_START_NODES"
d_start $x
status=$(($status || $?))
sleep 1
done
fi
;;
stop)
status=0
echo "Stopping Slony-I daemon"
if [ -f $(pidfile $SLON_TOOLS_START_NODES) ]; then
for i in $(d_stop); do
kill $i 1>/dev/null 2>/dev/null
done
status=$(($status || $?))
echo "Deamon Slony is stopping all clusters for node $SLON_TOOLS_START_NODES"
sleep 1
else
echo "Deamon Slony no current job running on cluster"
fi
;;
status)
status=0
if [ -f $(pidfile $SLON_TOOLS_START_NODES) ]; then
echo "Slony-I daemon clusters on node $SLON_TOOLS_START_NODES are running."
else
echo "Slony-I daemon clusters on node $SLON_TOOLS_START_NODES aren't running."
fi
status=$(($status || $?))
sleep 1
;;
restart)
status=0
echo "Restarting Slony-I daemon"
if [ -f $(pidfile $SLON_TOOLS_START_NODES) ]; then
for i in $(d_stop); do
kill $i 1>/dev/null 2>/dev/null
done
sleep 1
for x in $(instances); do
echo "Deamon Slony is restarting cluster $x node $SLON_TOOLS_START_NODES"
d_start $x
status=$(($status || $?))
sleep 1
done
echo "Done"
status=$(($status || $?))
else
echo "Deamon Slony is not running, try to start..."
for x in $(instances); do
echo "Deamon Slony is running cluster $x node $SLON_TOOLS_START_NODES"
d_start $x
status=$(($status || $?))
sleep 1
done
echo "Done"
fi
;;
*)
echo "Usage: $0 {start|stop|status|restart}"
exit 2
;;
esac
#2 Re : Réplication » Slony » 25/03/2009 17:48:00
J'ai un peu progressé sur le sujet entre temps.
En fait effectivement il y a 2 petits soucis.
Le premier est directement le /etc/init.d/slony1 qui est le script bash qui lance de facon automatique les differents cluster.
Ensuite le deuxieme est directement lié aux outils perl en effet, ou il se trouve que le slon_start créé un fichier pid avec le nom du noeud.
Pour bien faire les choses il aurait fallu qu'il puisse prendre en parametre non seulement le noeud mais aussi le cluster ce qui n'est pas le cas
J'ai donc modifié avec mes connaissances bien faible le script bash /etc/init.d/slony1 pour qu'il prenne en compte le lancement automatique de l'ensemble des clusters (tant pis pour le fichier pid ecrasé). Apres installation de ce dernier sur l'ensemble de mes serveur, j'arrive a avoir mes 2 clusters de bases de données synchronisées. Pour stopper correctement les processus je kill directement apres avoir cherché avec un ps c'est pas élégant mais c'est la seul facon vu que le script perl ne génere qu'il seul fichier pid pour mes 2 clusters.
Pas evident toutefois de comprendre qu'il faut 1 cluster / base de donnée a répliquer... surtout quand on a pris l'habitude de démarer a la main avec des slon_starts
Enfin tout a l'air de fonctionner comme il faut pour le moment.
Y a t-il un endroit ou je peux le posterle script si ca peut servir a quelqu'un?
#3 Réplication » Slony » 25/03/2009 14:23:15
- simson
- Réponses : 4
Bonjour,
Je viens voir un peu la communauté histoire d'avoir quelques infos.
Je suis en train de travailler sur un cluster de base de donnée avec réplication asynchrone utilisant slony en version 1.
J'ai installé 3 serveurs.
J'ai une premiere base de donnée répliquée sans problème. Tout mes prérequis sont en place en ce qui concerne ma base de donnée avec clé primaire déclarée explicitement.
J'ai bien compris le système avec le slon.conf et slon_tools.conf qui sont par défaut dans /etc/slony1/ ainsi que le numéro du noeud qui se trouve dans /etc/default/slony1
Quand je lance mes démons a la main avec slon_start 1 , 2 , et 3 sur chaqu'un de mes serveurs pas de problème.
Maintenant je me suis penché sur la problèmatique de mettre une deuxieme base de donné et d'avoir un système entierement automatisé grace au script de démarrage/etc/init.d/slony1. Je précise que ma distribtion est une Débian Lenny
Apres avoir étudié un peu le script je me suis appercu que l'on pouvait avoir plusieurs fichiers de configurations de slon_tools pour chacun des clusters. J'en ai déduit en regardant qu'il s'appuyait sur un sous répertoire de /etc/slony1/X/slon_tools.conf mais qu'il s'appuyait toujours sur un seul et unique slon.conf toujours present dans /etc/slony1 a sa racine. Je me suis dit que deja la y avait peut etre un problème. En effet meme pour le démon on s'appuie sur quand meme 2 variables qui sont cluster_name et conn_info, qui changes si on a 2 base de données différente a répliquer ( a moins que je n'ai pas bien compris )
Ma question est donc deja dans un premier temps pour chacune des bases de donnée que je veux répliquer faut-il bien 2 slon.conf et slon_tools.conf différents?
Ensuite j'ai un peu poussé ce qui se passait avec le scrip perl, Slon_start. En le disséquant je me suis appercu que pour gerer le fichier contenant le process mémoire correspondant a slon j'avais en passage de parametre le Numéro du noeud. Or si j'ai bien 2 bases a répliqués avec le meme numéro de noeud mon fichier pid contenant les numéros de process sont ecrasés. Je n'ai que le dernier de lancé. Cela entraine un gros problème lorsque je veux arreter mes process apparement.
Ma deuxième question est donc la suivante, est-ce que si j'ai 2 base de donnée a répliquer, est-ce que je dois avoir donc 2 clusters avec 3 noeuds?
serveur 1
cluster n°1
noeud 1
etc/slony/1/slon.conf
/etc/slony/1/slon_tools.conf
cluster n°2
noeud 1
etc/slony/2/slon.conf
/etc/slony/2/slon_tools.conf
server 2
cluster n°1
noeud 2
etc/slony/1/slon.conf
/etc/slony/1/slon_tools.conf
cluster n°2
noeud 2
etc/slony/2/slon.conf
/etc/slony/2/slon_tools.conf
server 3
cluster n°1
noeud 3
etc/slony/1/slon.conf
/etc/slony/1/slon_tools.conf
cluster n°2
noeud 3
etc/slony/2/slon.conf
/etc/slony/2/slon_tools.conf
Voila j'espere avoir été clair. j'attends d'avoir un peu de bille pour mieux comprendre comment tout cela fonctionne.
Cordialement,
Pages : 1