2011-03-01 4 views
2

Je voulais savoir s'il était possible de configurer un cluster ejabberd avec une base de données Postgres? (je trouve que la documentation de cluster ejbberd pour mnesia DB)Ejabberd clustering

Je cours cette configuration: ejabberd 2.1.2 (paquet ubuntu) Postgres 8.4

Répondre

18

ejabberd est comme toute autre application de Erlang. Afin de comprendre comment mettre en cluster ejabberd, vous avez besoin de bases de clustering erlang. La raison pour laquelle vous avez trouvé des docs sur la mise en cluster avec mnesia est que vous utilisez encore mnesia pour beaucoup d'ejabberd même lorsque vous configurez certains modules pour qu'ils fonctionnent avec postgres. Mnesia est utilisé pour stocker les informations de routage et de session de base. Cette information doit être disponible partout dans le cluster dans les formats de données erlang natifs, d'où l'utilisation de Mnesia. Mnesia conserve également des informations sur les autres nœuds mnesia dans la table de schéma, ce qui permet à un nœud de se souvenir des autres membres du cluster au démarrage. Lorsque vous créez un cluster ejabberd, vous devez toujours former la relation de cluster mnesia en procédant comme suit. Je suppose que vous avez déjà élaboré vos cookies erlang afin que net_adm: ping ('ejabberd @ node1') fonctionne à partir de votre noeud ejabberd @ node2 et que vous ayez le même ejabberd.cfg sur les deux noeuds.

  1. /etc/init.d/ejabberctl live Démarrez le nouveau noeud en mode 'live'.
  2. application:stop(ejabberd). Arrête l'application ejabberd.
  3. mnesia:stop(). Arrêtez l'application Mnesia.
  4. mnesia:delete_schema([node()]). Supprimez le schéma sur le noeud local. Cela place le nœud dans un état propre où il est prêt à rejoindre un cluster basé sur Mnesia.
  5. mnesia:start(). Démarrez votre instance mnesia vide et propre. Mnesia est maintenant dans un état où il peut accepter toutes les informations de table proposées par votre premier noeud ejabberd lorsque vous leur demandez de participer à l'étape suivante.
  6. mnesia:change_config(extra_db_nodes,['[email protected]']). Dites à votre nouveau noeud ejabberd où trouver son voisin de cluster. Dites à mnesia de se souvenir de son nouveau voisin de cluster à travers un nœud en redémarrant en conservant une copie locale de la table 'schema'.
  7. application:start(ejabberd). Démarrez l'application ejabberd afin qu'elle crée toutes les copies de table mnesia dont elle a réellement besoin.
  8. q(). Quittez Erlang vm et redémarrez pour vous assurer que le cluster s'est correctement formé. Lorsque je valide mon statut de cluster, j'appelle mnesia:info(). et regarde la valeur de running_db_nodes.

Vous vous demandez probablement pourquoi j'ai parcouru tout ça quand votre question concerne le clustering avec PostgreSQL. C'est parce qu'il n'y a pas de clustering avec PostgreSQL dans ejabberd car l'état de l'application est toujours en cluster avec mnesia. Lorsque vous utilisez Postgres comme backend de stockage pour des choses comme les utilisateurs et les messages hors ligne, vous êtes encore en train de mettre en cluster avec Mnesia, il vous arrive d'utiliser Postgres comme une banque de données pour certains services. C'est pour cette raison que la plupart des guides que vous voyez sur le clustering ejabberd ne traitent que de mnesia et ne mentionnent pas d'autres backends de base de données.

Le détail de la base de données SQL que vous utilisez dépend de votre fichier ejabberd.cfg, ce qui est une évidence pour la plupart des auteurs de guides de mise en cluster ejabberd.