Clustering, HA, and Mnesia..

Hi,
For now, we are using openfire, but i am investigating ejabberd for a while and i successfully managed clustering work on ejabberd, now I run as many servers as i want/need.

The main question in my mind is: how is ejabberd highly available. In short, my development system includes one mysql machine (mysql-1.localdomain) ( just for testing purposes ) and two ejabberd machines (ejabberd-1.localdomain and ejabberd-2.localdomain)

I am directing all other machines to a single machine for mnesia tables by running that command :

erl -name ejabberd@ejabberd-2.localdomain \
    -mnesia extra_db_nodes "['ejabberd@ejabberd-1.localdomain']" \
    -s mnesia

All possible modules are changed to odbc ones.

In every place i search, i read that ejabberd does not have a single point of failure (SPOF) but isn't the ejabberd-1.localdomain become a SPOF itself ?

Is there any other workaround i can do for it ? ( Although i am not sure if they can find each other just using the same erlang-cookie file... ) Or is it the main thing that makes machines know about each other?

If this is the only way, what happens when ejabberd-1.localdomain fails? How do we change one of the existing machines to take that role again?

Thanks in advance.

rnkrygt wrote: Is there any

rnkrygt wrote:

Is there any other workaround i can do for it ? ( Although i am not sure if they can find each other just using the same erlang-cookie file... ) Or is it the main thing that makes machines know about each other?

If this is the only way, what happens when ejabberd-1.localdomain fails?

You can try to add in extra_db_nodes all the other nodes in the cluster, not just the one you consider the 'master'. Also, if each node has a local copy of each table, when one node (or a group of nodse) become isolated from the other nodes, they can still continue working. Of course, the tables content of the different nodes will start to diverge.

rnkrygt wrote:

How do we change one of the existing machines to take that role again?

ejabberd 2.1.3 has this command:

$ ejabberdctl help set_master

  Command Name: set_master

  Arguments: nodename::string

  Returns: res::restuple

  Tags: mnesia

  Description: Set master node of the clustered Mnesia tables

If you provie as nodename "self", this node will be set as its own master.

So, in the node you consider the master you run:

$ ejabberdctl set_master self

And in the other nodes:

$ ejabberdctl set_master ejabberd@ejabberd-1.localdomain
Syndicate content