Setting up a high-availability server

Greets all,

Before I dive into my question, let me say that after fiddling around with the likes of jabberd (v2) and casting about for something a little more straightforward, let me say that I was pleasantly surprised when I found, installed and tried out Jive Messenger.

Now for the question.

What would be the best way (assuming it’'s even possible) to set up an HA Jabber server cluster (assuming the use of Jive Messenger, of course)?

Starting with the first server, let’‘s assume this first server’‘s FQDN is flotsam.example.com and that the second server’‘s FQDN is jetsam.example.com. And let’'s assume that the virtual name (shared by both) is jabber.example.com.

This is where asking the question gets a little grey. It was incredibly straightforward to set up the first server, but I didn’'t see any (web-configurable) options for having it share the registered user data with a similarly configured peer.

As I envision it, flotsam and jetsam would be behind a load balancer which would present a VIP to the users. This would allow for maintenance on one host while the other host continues to provide service.

A ‘‘budget’’ approach to the above would be to have the users configure two identical accounts (one for each FQDN) and just connect to one of them arbitrarily (or with the help of a round-robin DNS server).

Assuming an external database (eg, MySQL, Oracle) sitting on a separate HA platform, it would seem both flotsam and jetsam could used the shared data on the database. However, the question then becomes one of how to virtualize the c2s conversations (are both users connected to the same host? if not, how to forward to the other host?).

At this point I’‘ll turn it over to the forum for comments and questions. Let me know if I’‘m making a mountain out of a molehill, or if given the current state of Jive whether it’‘s simply a matter of "you can’‘t get there from here". (I’'d also entertain thoughts of how other Jabber server solutions might address this.)

I should add that presently this is just a hypothetical question, as I don’'t currently have more than just the one server at my disposal. (But now that I think about it, there might be a possibility of breathing life into another old box…)

Thanks in advance.

Jim,

There’'s two levels of fault-tolerance relevant to Jive Messenger:

  1. Warm stand-by server. This can already be achieved with Jive Messenger. You’'d configure Messenger to use an external database (perhaps a clustered db). A load-balancer would detect primary server failure and then redirect traffic to the stand-by server. This solution provides only a small amount of down-time, is possible to configure now, and is fairly simple.

  2. Active cluster. An active clustering solution would require replicating session information between servers as well as other shared state. We’‘ve dealt with this problem extensively in our commercial products such as Jive Forums. The only good architecture we’‘ve found is Tangosol’'s Coherence product. I think that Coherence could be integrated with Messenger with a medium amount of efforts (although testing the clustering would be a very high amount of effort, as it always is). Because Coherence is a commercial product, that precludes us from making it an Open Source part of Messenger. JBoss Cache is Open Source and is somewhat like Coherence… but it might kill us to try using it after being treated to Coherence.

There’'s a couple of things you get with true clustering over warm standby:

  • Faster fail-over.

  • Only a portion of your connections would be cut at failure of a single node since connections would be spread of the cluster.

  • Clustering can potentially provide enhanced scalability.

I don’‘t know much about clustering support in other servers. However, ejabberd claims support for true clustering (I don’'t have any information to validate this).

If anyone wanted to work with us on clustring for Jive Messenger, we’'d be happy to discuss further.

Regards,

Matt

Hi Matt,

Thanks for your lucid response. Very cool. My comments:

  1. This makes sense. I was limiting myself to thinking that users would be connected to both servers, but this definitely makes sense. Occam’'s Razor, and all that.

  2. I’‘m not familiar with Coherence. But I did work supporting one client who was using JBoss/Linux (even got to take the official JBoss Admin training this past April) for a while, and have been shoulder-deep with ATG Dynamo (on Solaris) at another client. I’‘m not a developer, but have extensive (17 years) experience as a sysadmin. I’‘m not sure whether any help I could offer would provide the necessary synergy to help with a JBoss/Jive solution, but I’'ll certainly help where I can.

And (thinking out loud here) I know someone sharp who has solid experience load testing. I’‘m not sure if he’‘d be interested in this project or whether he and I can put together the necessary test bed, but if you’‘re interested, I’'ll check with him.

And (thinking out loud here) I know someone sharp who

has solid experience load testing. I’'m not sure if

he’'d be interested in this project or whether he and

I can put together the necessary test bed, but if

you’‘re interested, I’'ll check with him.

That would be great. It would be very helpful to have real measurements of current performance and scalability.

Regards,

Matt

please talking about jive messenger clustering!

This clustering solution:

Tangosol’'s Coherence product + Jive messenger 2.1

please talking about jive messenger clustering!

This clustering solution:

Tangosol’'s Coherence product + Jive messenger

senger 2.1

So, clustering with Coherence is an interesting question. Obviously, Coherence isn’‘t Open Source so we couldn’‘t roll clustering with Coherence into the Open Source release. Does that mean making a commercial extension to Jive Messenger with clustering support? Should a different (Open Source) solution than Coherence be found for clustering? We love using Coherence in our commercial products, but the right approach for Jive Messenger isn’'t clear. Any opinions?

-Matt

matt thanks!

please give me a jive messenger support cluster solution


I think change jive messenger micro container framework

and support tomcat5 ,using tomcat cluster .

IMHO JM should stay as it is right now: Open source and not split in both commercial “full/enterprise version” and a more or less crippled (compared to the full-blown build) free version. I really do appreciate the work you’‘ve done and I’'m not sure if it would maybe generate a little nice extra revenue for JIVE Software going the split way, though…

Anyway: I’‘d love to see a solution with open source means. If all solutions compareable to Coherence (admitted: I don’‘t know this one) seem to be worse, that’‘s a good starting point for enhancements (or enhancement requests, I don’'t expect you to start building everything on your own =) to the available free solutions.

Just my 2cc - you asked for more opinions.

Ben

The available free solutions, Agree

No forky forky!

I definitely think Jive Messenger should remain a one version opensource solution. I think the strongest point about being opensource is to foster open collaboration and support community improvement. If an opensource solution is lacking in features or ease of use to a commercial one, those issues should be addressed.

The JBoss avenue seems like it has some promise. I use JBoss to host a web app that pulls data from an as400 and it’‘s rock solid. For clustering, JBoss already supports session replication of Jetty and Tomcat so making some sort of similar adapter for Jive shouldn’'t be out of the question. I think they use JGroups for replication. See: http://www.jboss.org/developers/projects/jboss/clustering

I think I read somewhere else on the forum about incorporating jmx into the mix for management. If so, Jive could be wrapped into a JBoss service sar and hot deployed across a whole cluster.

That would be neat.

On the same note, I don’'t think Messenger should wed itself to any particular application server. Messenger should be able to run stand-alone, as a servlet or by any other means with just a simple wrapper. As much as I love JBoss, freedom to choose your environment is best.

If Messenger incorporates jmx and provides more interfaces for internal pluggable components, with the right implemented adapters, anything including clustering would be possible.

Just my 2C,

Rob

No forky forky!

I definitely think Jive Messenger should remain a one

version opensource solution. I think the strongest

point about being opensource is to foster open

collaboration and support community improvement. If

an opensource solution is lacking in features or ease

of use to a commercial one, those issues should be

addressed.

Thanks for the feedback.

The JBoss avenue seems like it has some promise. I

use JBoss to host a web app that pulls data from an

as400 and it’'s rock solid. For clustering, JBoss

already supports session replication of Jetty and

Tomcat so making some sort of similar adapter for

Jive shouldn’'t be out of the question. I think they

use JGroups for replication. See:

http://www.jboss.org/developers/projects/jboss/cluster

ing

Yes JBoss does a clustering solution based on JGroups. It’'s similar to Coherence although not nearly as full-featured.

One options would be to make the cache layer of Jive Messenger be pluggable. That way there could be plugins to provide a JBoss cache impl, one to provide Coherence, etc. That wouldn’'t require a forked code base and could provide several different options for people depending on their needs.

Regards,

Matt

see next reply (meant to reply Matt not Jim sorry)

Message was edited by:

Conor

I believe clustering as a commercial only option would really inhibit the uptake of Jive Messenger. Upfront Jive Messenger has a fantastic user interface and is simple to install and use. In this regard it beats its competitors in the XMPP open source server world.

However other open source XMPP servers already support clustering and in a larger production environment clustering is really a must.

I am thinking about a chat room spread over the cluster for example. This level of support in Jive Messenger would be superb and may even attract more devlopers to the cause!

Regarding a clustering strategy or design, certainly a cache plugin layer would probably meet everyones requirements. Just imagine deploying Jive Messenger into a clustered JBoss environment or being able to setup a cluster of JM instances!!

thank all

I believe clustering as a enterprise commercial only option would really inhibit the uptake of Jive Messenger

I hope jive messenger support clustering!