MOD-CLUSTER discovery protocol

Intro


This document describes a proposed solution for JGRP-1322, the mod cluster discovery protocol which would allow JGroups nodes to discover each other in a httpd + JBoss AS setup. JGroups nodes would use httpd proxy as a point of reference for discovery as httpd already knows the list of JGroups/AS participating nodes and provides this information in a well known format!

 

Background

Before proceeding forward, a reader might start with a general mod cluster documentation overview, followed by mod cluster design details, finishing with details of MCMP protocol.

 

 

Proposed solution

 

Similar to other JGroups discovery protocols the communication roundtrip consists of a single discovery message sent from a joining JGroups cluster node to a cluster member node that will respond with a response consisting of addresses of existing cluster members.

The MCMP can be easly extented with 3 new messages:

 

ADDID:

The ADDID MCMP will create or update an existing JGroups record in mod_cluster, like the CONFIG is doing it for a node.

The request will look like the following:

+++

ADDID / HTTP/1.1
Host: myhttpd

Content-length: 128 (well the right value)

 

JGroupUuid=jgroupuuid&JGroupData=jgroupdata

+++

The max size of jgroupuuid is 80 and the max size of jgroupdata is 200. The data is base64 encoded.

 

REMOVEID:

The REMOVEID MCMP will remove an existing JGroups record in mod_cluster, like the REMOVE * is doing it for a node.

The request will look like the following:

+++

REMOVE / HTTP/1.1
Host: myhttpd

Content-length: 128 (well the right value)

 

JGroupUuid=jgroupuuid

+++

 

QUERY:

The QUERY MCMP will query existing JGroups records according the parameter JGroupUuid. The answer uses the same format of the INFO_RSP MCMP element. Something like the following:

+++

QUERY / HTTP/1.1
Host: myhttpd

Content-length: 128 (well the right value)

 

JGroupUuid=jgroupuuid

+++

jgroupuuid = * means all jgroup existing nodes.

 

The answer will be something like:

+++

HTTP/1.1 200 OK

Date: Wed, 25 Jan 2012 12:44:54 GMT

Server: Apache/2.2.21 (Unix) DAV/2 mod_jk/1.2.30 mod_ssl/2.2.21 OpenSSL/0.9.8r mod_cluster/1.1.x

Content-Length: 558

Content-Type: text/plain

 

JGroup: [9],JGroupUuid: node4, JGroupData: jgroupdata4

JGroup: [11],JGroupUuid: node6, JGroupData: jgroupdata6

+++