Table des matières

Installation d'un cluster ejabberd

Source : http://wblitz.free.fr/contrib/ejabberd/cluster_ejabberd.html

Présentation

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)

Installation du premier noeud

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']\""
...
}

jabber, jabber2 sont les noeuds de notre cluster.

On redémarre le serveur :

/etc/init.d/ejabberd start

Installation sur le second noeud

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

Configuration

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.

Le cookie .erlang.cookie se trouve dans le dossier /var/lib/ejabberd

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

Exportation de la base de données du noeud primaire

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
Assurez-vous que le démon ejabberd est effectivement arrêtez. La commande 'ps -aef | grep ejabberd' vous indiquera quels processus doivent éventuellement être tués (utilisez à cet effet 'kill <pid>'.

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']\""
...
}

jabber, jabber2 sont les noeuds de notre cluster.

Vérification

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 :-P