===== 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