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.