===== 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']\""
...
}
où **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 '.
**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.
===== Vérification =====
Nous allons faire un tour dans l'interface web et vérifier si nos noeuds sont bien actifs.
{{ :braveo:plateforme:cluster_jabber.png?nolink&660 |}}
Et voilà, nos 2 noeuds sont bien actifs :-P