Son architecture lui permet de fonctionner sur un cluster de machines avec la possibilité d'ajouter ou de supprimer des noeuds sans arrêter le service. Le cluster comportera 2 noeuds :
ejabberd@jabber (noeud primaire) et ejabberd@jabber2 (noeud secondaire)
L'installation est expliquée ici : http://mdl29.net/doku.php?id=braveo:docinstallejabberd
Pour que les noeuds soient pris en compte, nous devons modifier le script d'init du server ejabberd.
Editons le fichier /etc/init.d/ejabberd
start() { mkrundir cd /var/lib/ejabberd # su $EJABBERDUSER -c "$EJABBERD -noshell -detached" su $EJABBERDUSER -c "$EJABBERD -noshell -detached extra_db_nodes \"['ejabberd@jabber', 'ejabberd@jabber2']\"" ... }
où jabber, jabber2 sont les noeuds de notre cluster.
On redémarre le serveur :
/etc/init.d/ejabberd start
Pour que notre serveur fonctionne correctement, il est important de bien configurer le serveur dns (bind).
jabber2 IN A 92.xxx.xxx.xxx # ip publique _jabber._tcp.mdl29.net. IN SRV 0 0 5269 jabber2 _jabber._tcp IN SRV 5 0 5269 jabber2 _xmpp-server IN SRV 5 0 5269 jabber2 _xmpp-client._tcp IN SRV 5 0 5222 jabber2
Une fois cette configuration faite, nous lançons une installation «classqiue» :
apt-get install ejabberd
Avant de faire les manipulations suivantes, il est important de bien stopper les serveurs destinés à faire partie du cluster.
La première étape consiste à recopier le cookie du serveur primaire vers le serveur secondaire. En effet, ce cookie est utilisé par les différents noeuds pour l'appartenance ou non au cluster.
On récupère le cookie depuis notre serveur primaire :
scp user@noeud.primaire:~ejabberd/.erlang_cookie ~ejabberd sudo chown ejabberd: ~ejabberd/.erlang_cookie
Note: ~ejabberd ⇒ /var/lib/ejabberd
C'est au tour du fichier de configuration d'être copié :
scp user@noeud.primaire:/etc/ejabberd.cfg . sudo mv /etc/ejabberd/ejabberd.cfg{,.dist} sudo mv ejabberd.cfg /etc/ejabberd sudo chown ejabberd: /etc/ejabberd/ejabberd.cfg
Pensez à faire une sauvegarde de vos fichiers de configuration
Une fois ces étapes finies, théoriquement il est conseillé d'éditer le fichier /etc/default/ejabberd et de modifier la valeur de la variable ERLANG_NODE. ERLANG_NODE=ejabberd@`hostname -s`. Il sert à définir le nom de notre noeud.
Mais je laisse par le réglage par défaut qui fonctionne très bien, c'est à dire #ERLANG_NODE=ejabberd
La dernière étape concerne la base de données «internes» du noeud primaire. En effet, ejabberd utilise une base de données mnesia pour stocker diverses informations relatives à la dernière activité des utilisateurs, aux messages hors ligne, aux historiques des salons, etc… Il convient donc de la rapatrier sur nos second noeud.
Nous stoppons le serveur ejabberd :
/etc/init.d/ejabberd stop
Savegarde de la base courante
Nous allons sauvegarder la base courante dans un répertoire save.
sudo mkdir /var/lib/ejabberd/save sudo mv /var/lib/ejabberd/* /var/lib/ejabberd/save
Un petit message d'erreur va apparaître, normal on essaie de le déplacer dans lui même. Maintenant on doit se trouver avec un dossier /var/lib/ejabberd qui contient juste un dossier save.
Recopions la base de données depuis le serveur primaire
mkdir /tmp/ejabberd cd /tmp/ejabberd scp user@noeud.primaire:/var/lib/ejabberd/* . sudo cp * /var/lib/ejabberd/ sudo chown ejabberd: /var/lib/ejabberd/*
Une fois la base recopiée, il nous faut modifier le fichier /etc/init.d/ejabberd.
Editons enfin le script d'init de manière à modifier la commande lancée lors de l'appel de la fonction start :
start() { mkrundir cd /var/lib/ejabberd # su $EJABBERDUSER -c "$EJABBERD -noshell -detached" su $EJABBERDUSER -c "$EJABBERD -noshell -detached extra_db_nodes \"['ejabberd@jabber', 'ejabberd@jabber2']\"" ... }
où jabber, jabber2 sont les noeuds de notre cluster.
Nous allons faire un tour dans l'interface web et vérifier si nos noeuds sont bien actifs.
Et voilà, nos 2 noeuds sont bien actifs