Ajout d'une table à une réplication Slony-I
Par Sébastien Le Ray le vendredi 28 août 2009, 06:41 - Sysadmin - Lien permanent
Pourquoi j'irais faire ça alors que ça marche très bien ?
Quelque temps après la mise en place de votre réplication PostgreSQL, vos besoins évoluent et vous voulez avoir un nœud supplémentaire dans votre système de réplication. Voici quelques éléments qui devraient vous y aider.
Préparation du nouveau nœud
On commence, bien sûr, par installer tout ce qui est nécessaire à slony :
sebastien@newboiboite$ sudo aptitude install postgresql-8.3-slony1 slony1-bin
Puis on crée la base qui recevra la réplication :
sudo -u postgresl createdb labase -O [utilisateur quelconque]
Il faut ensuite créer la structure de la base, pour cela, soit vous avez un script (parce que vous êtes discipliné et que votre base ne s'est pas montée petit à petit à coup d'ALTER et de CREATE), soit vous pouvez l'extraire d'une base existante :
sebastien@boiboite:/tmp$ sudo -u postgres /usr/share/doc/slony1-bin/examples/slony1_extract_schema.sh labase lecluster unebasetemporaire > mondump.sql
Le chemin du script est valable pour Debian, il est possible que ça change pour d'autres distributions. L'utilisateur lançant la commande (ici, postgres) doit avoir le droit d'écrire dans le répertoire courant.
Pour récupérer le schéma, la commande procède comme suit :
- dump de la base (le dump contient les triggers nécessaires au bon fonctionnement de Slony qui ne devront pas apparaître dans le script final) ;
- injection dans une base temporaire ;
- UNINSTALL NODE (suppression des éléments nécessaires à la réplication) sur la base temporaire ;
- dump de la base temporaire (on obtient un dump sans les éléments propres à Slony).
Examinez le dump généré, il est possible que vous ayez à y effectuer des modifications en particulier si vous avez lancé la commande à partir d'un nœud sur lequel vous avez configuré des droits d'accès au niveau table qui ne sont pas pertinents sur la nouvelle machine.
On repasse maintenant sur notre nouveau nœud pour y créer l'utilisateur de réplication (il doit être superutilisateur) :
sebastien@newboiboite:~$ sudo -u postgres createuser vhffs_replication -P -s Saisissez le mot de passe pour le nouveau rôle : Saisissez-le à nouveau :
Maintenant, il va falloir modifier le fichier pg_hba.conf de tous les nœuds participant à la réplication pour autoriser notre nouveau nœud à s'y connecter tandis que sur le nouveau nœud, il faudra autoriser tous les autres nœuds à se connecter :
# sur le nouveau nœud hostssl baserepliquée usereplic ipnœud1/32 md5 hostssl baserepliquée userreplic ipnœud2/32 md5 hostssl baserepliquée userreplic ipnœud3/32 md5 # sur les autres # [...] hostssl baserepliquée userreplic ipnouveaunœud/32 md5
Dites à PostgreSQL d'écouter sur l'IP publique du nouveau nœud (paramètre listen_address dans le fichier postgresql.conf) et vous êtes prêt !
Slony
Maintenant que l'infrastructure est prête, on va pouvoir jouer avec Slony. Pour simplifier les choses, on commence par ajouter la déclaration du nouveau nœud au slon_tools.conf de la machine utilisée pour les opérations d'administration PostgreSQL :
&add_node(host => 'IP_nouveau_nœud', dbname => 'vhffs', port =>5432,
user=>'user_replic', password=>'papass', node=> [id_libre_suivant] , parent=>1);
N'oubliez pas que l'ID passé à node doit être unique au sein de votre ensemble de nœuds.
Maintenant vous pouvez soit lancer les commandes directement sur la machine disposant du slon_tools.conf ou les générer sur celle-ci et les passer au slonik sur la machine distante. Les exemples suivants prennent la première option :
sebastien@boiboite$ sudo slonik_store_node [id nouveau nœud]
Cette commande initialise le nouveau nœud et indique aux noœuds déjà existants comment le joindre et vice versa.
Nous allons maintenant démarrer le daemon slon sur le nouveau nœud. On crée un fichier /etc/slony1/cluster/slon.conf comme on l'a fait lors de la mise en place initiale :
cluster_name='cluster' conn_info='dbname=babase host=localhost user=replic password=papass'
et on démarre le daemon (sudo /etc/init.d/slony1 start). Normalement tout doit bien se passer.
À ce stade, votre nouveau nœud a son propre processus slon mais ne réplique encore rien, qu'à cela ne tienne, il suffit de l'inscrire :
sebastien@boiboite$ sudo slonik_subscribe_set [id_set] [id_nouveau_nœud] | slonik
et voila ! c'est fini ! Vous devriez voir la base de votre nouveau nœud se remplir et suivre les modifications du maître.