JBoss Community Archive (Read Only)

RHQ 4.9

Design - mod_cluster

RHQ Support for JBoss AS7 mod_cluster subsystem is under active development and not available in this release.

Introduction

What is mod_cluster?

mod_cluster is an httpd-based load balancer.

Like mod_jk and mod_proxy, mod_cluster uses a communication channel to forward requests from httpd to one of a set of application server nodes. Unlike mod_jk and mod_proxy, mod_cluster leverages an additional connection between the application server nodes and httpd. The application server nodes use this connection to transmit server-side load balance factors and lifecycle events back to httpd via a custom set of HTTP methods. This allows mod_cluster to offer a level of intelligence and granularity not found in other load balancing solutions. (adapted from mod_cluster documentation)

Integration Details

mod_cluster loads as a module in httpd. No JMX or rest interface is available to configure directly mod_cluster httpd module.

mod_cluster loads as a module in JBoss/Tomcat. A JMX interface is available to configure and monitor the module in all JBoss/Tomcat supported versions. The configuration updates are broadcast from the node where the action was performed to the httpd proxy. For example, the action to disable a context on a JBoss node is broadcast to the http proxy so that new clients are not routed to this node.

Goals & Design Details

Implement mod_cluster support as an RHQ plugin for JBoss AS4, AS6, AS7, and EAP5. The mod_cluster plugin will run in the context of an existing JBoss plugin.

For JBoss AS7:

  1. mod_cluster implementation will be part of the existing AS7 plugin.

  2. JSON based communication with mod_cluster module.

  3. Use exist RHQ AS7 plugin infrastructure for detection and communication with the mod_cluster subsystem.

For JBoss AS4, AS6, EAP5:

  1. A new plugin will be created to run as a service inside existing JBoss plugins (similar to hibernate or JBoss Cache). 

  2. Rely on and use the existing JMX plugin to discover, map  and use resources.

  3. Attempt to minimize the amount of custom code written. The existing JMX functionality is rich and mod_cluster configuration is not very complicated.

Goals

  1. Interact with mod_cluster httpd native module.

    1. It has not been done before (according to Jean-Frederic Clere, maintainer of mod_cluster).

    2. It is not possible to do the RHQ-apache of integration with JMX; which means this would only be possible with SNMP integration.

  2. Implement a single plugin for all the JBoss versions.

    1. JSON is used to communicate with AS7. JMX is used to communication AS 4.2 and AS6. The software design is cleaner and simple if separate plugins are created for each communication method.

TODO & Questions

  1. Explore more the metrics aspect of mod_cluster:

    1. the metrics are much richer in AS7. - False

    2. the metrics are not exposed externally for AS4 - True

    3. the metrics are exposed externally for AS6 - True, they can even be configured.

  2. Resolve any differences between the API for AS7 and earlier versions. The operations available should be the same but some differences could exist.

    1. Almost all operations implemented in AS7.

  3. Should Tomcat enabled mod_cluster be supported? - No

Prototype Screens

All mod_cluster properties are global so they can be configured from the service configuration:
images/author/download/attachments/73139320/mod_cluster_properties.png

Some mod_cluster operations are global so they can be executed from the service operations tab:
images/author/download/attachments/73139320/mod_cluster_global_operations.png

Some mod_cluster operations are applicable to available contexts, so they can be executed from the operations tab of each individual context:
images/author/download/attachments/73139320/mod_cluster_context_operation.png

Notes

Short introduction to mod_cluster: mod_cluster.pdf

JBoss.org Content Archive (Read Only), exported from JBoss Community Documentation Editor at 2020-03-13 08:11:29 UTC, last content change 2013-09-18 19:40:56 UTC.