7.1. JGroups Configuration

7.1. JGroups Configuration

The JGroups framework provides services to enable peer-to-peer communications between nodes in a cluster. It is built on top a stack of network communication protocols that provide transport, discovery, reliability and failure detection, and cluster membership management services. Figure 7.1, “Protocol stack in JGroups” shows the protocol stack in JGroups.

Protocol stack in JGroups

Figure 7.1. Protocol stack in JGroups


JGroups configurations often appear as a nested attribute in cluster related MBean services, such as the PartitionConfig attribute in the ClusterPartition MBean or the ClusterConfig attribute in the TreeCache MBean. You can configure the behavior and properties of each protocol in JGroups via those MBean attributes. Below is an example JGroups configuration in the ClusterPartition MBean.

<mbean code="org.jboss.ha.framework.server.ClusterPartition"
	name="jboss:service=${jboss.partition.name:DefaultPartition}">
	 
	 ... ...
	 
	 <attribute name="PartitionConfig">
		 <Config>
			 
			 <UDP mcast_addr="${jboss.partition.udpGroup:228.1.2.3}" 
			      mcast_port="${jboss.hapartition.mcast_port:45566}"
			      tos="8"
			      ucast_recv_buf_size="20000000"
			      ucast_send_buf_size="640000"
			      mcast_recv_buf_size="25000000"
			      mcast_send_buf_size="640000"
			      loopback="false"
			      discard_incompatible_packets="true"
			      enable_bundling="false"
			      max_bundle_size="64000"
			      max_bundle_timeout="30"
			      use_incoming_packet_handler="true"
			      use_outgoing_packet_handler="false"
			      ip_ttl="${jgroups.udp.ip_ttl:2}"
			      down_thread="false" up_thread="false"/>
			 
			 <PING timeout="2000"
			       down_thread="false" up_thread="false" num_initial_members="3"/>
			 
			 <MERGE2 max_interval="100000"
				 down_thread="false" up_thread="false" min_interval="20000"/>
			 <FD_SOCK down_thread="false" up_thread="false"/>
			 
			 <FD timeout="10000" max_tries="5" 
			     down_thread="false" up_thread="false" shun="true"/>
			 <VERIFY_SUSPECT timeout="1500" down_thread="false" up_thread="false"/>
			 <pbcast.NAKACK max_xmit_size="60000"
					use_mcast_xmit="false" gc_lag="0"
					retransmit_timeout="300,600,1200,2400,4800"
					down_thread="false" up_thread="false"
					discard_delivered_msgs="true"/>
			 <UNICAST timeout="300,600,1200,2400,3600"
				  down_thread="false" up_thread="false"/>
			 <pbcast.STABLE stability_delay="1000" desired_avg_gossip="50000"
					down_thread="false" up_thread="false"
					max_bytes="400000"/>
			 <pbcast.GMS print_local_addr="true" join_timeout="3000"
				     down_thread="false" up_thread="false"
				     join_retry_timeout="2000" shun="true"
				     view_bundling="true"/>
			 <FRAG2 frag_size="60000" down_thread="false" up_thread="false"/>
			 <pbcast.STATE_TRANSFER down_thread="false" 
						up_thread="false" use_flush="false"/>
		 </Config>
	 </attribute>
</mbean> 

All the JGroups configuration data is contained in the <Config> element under the JGroups config MBean attribute. This information is used to configure a JGroups Channel; the Channel is conceptually similar to a socket, and manages communication between peers in a cluster. Each element inside the <Config> element defines a particular JGroups Protocol; each Protocol performs one function, and the combination of those functions is what defines the characteristics of the overall Channel. In the next several sections, we will dig into the commonly used protocols and their options and explain exactly what they mean.