11.2. Run Red Hat JBoss Data Grid in a Cluster
11.2.1. Compile the Project
$ mvn clean compile dependency:copy-dependencies -DstripVersion
11.2.2. Run the Clustered Cache with Replication Mode
Procedure 11.1. Run the Clustered Cache with Replication Mode
- Use the following command to launch the first node:
$ java -cp target/classes/:target/dependency/* org.infinispan.quickstart.clusteredcache.replication.Node0
- Use the following command to launch the second node:
$ java -cp target/classes/:target/dependency/* org.infinispan.quickstart.clusteredcache.replication.Node1
JGroups and JBoss Data Grid initialized on both nodes. After approximately fifteen seconds, the cache entry log message appears on the console of the first node.
11.2.3. Run the Clustered Cache with Distribution Mode
Procedure 11.2. Run the Clustered Cache with Distribution Mode
- Use the following command to launch the first node:
$ java -cp target/classes/:target/dependency/* org.infinispan.quickstart.clusteredcache.distribution.Node0
- Use the following command to launch the second node:
$ java -cp target/classes/:target/dependency/* org.infinispan.quickstart.clusteredcache.distribution.Node1
- Use the following command to launch the third node:
$ java -cp target/classes/:target/dependency/* org.infinispan.quickstart.clusteredcache.distribution.Node2
JGroups and JBoss Data Grid initialized on the three nodes. After approximately fifteen seconds, the ten entries added by the third node are visible as they are distributed to the first and second nodes.
11.2.4. Configure the Cluster
Procedure 11.3. Configure the Cluster
- Add the default configuration for a new cluster.
- Customize the default cluster configuration according to the requirements of your network. This is done declaratively (using XML) or programmatically.
- Configure the replicated or distributed data grid.
11.2.4.1. Add the Default Cluster Configuration
Example 11.2. Default Configuration
new ConfigurationBuilder() .clustering().cacheMode(CacheMode.REPL_SYNC) .build()
Note
GlobalConfigurationBuilder().clusteredDefault()
to quickly create a preconfigured and cluster-aware GlobalConfiguration
for clusters. This configuration can also be customized.
11.2.4.2. Customize the Default Cluster Configuration
Use the following GlobalConfiguration code to specify the name of the file to use for JGroups configuration:
new GlobalConfigurationBuilder().transport().addProperty("configurationFile", "jgroups.xml") .build()
jgroups.xml
with the desired file name.
jgroups.xml
file is located at Infinispan-Quickstart/clustered-cache/src/main/resources/
.
Note
-Djgroups.bind_addr="127.0.0.1"
. This is particularly useful to test a cluster where all nodes are on a single machine.
Use the following XML snippet in the infinispan.xml
file to configure the JGroups properties to use Red Hat JBoss Data Grid's XML configuration:
<global> <transport> <properties> <property name="configurationFile" value="jgroups.xml"/> </properties> </transport> </global>
11.2.4.3. Configure the Replicated Data Grid
Use the following code snippet to programmatically configure the cache for replication mode (either synchronous or asynchronous):
private static EmbeddedCacheManager createCacheManagerProgramatically() { return new DefaultCacheManager( new GlobalConfigurationBuilder() .transport().addProperty("configurationFile", "jgroups.xml") .build(), new ConfigurationBuilder() .clustering().cacheMode(CacheMode.REPL_SYNC) .build() ); }
Edit the infinispan.xml
file to include the following XML code to declaratively configure the cache for replication mode (either synchronous or asynchronous):
<infinispan xsi:schemaLocation="urn:infinispan:config:6.0 http://www.infinispan.org/schemas/infinispan-config-6.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:infinispan:config:6.0"> <global> <transport> <properties> <property name="configurationFile" value="jgroups.xml"/> </properties> </transport> </global> <default> <clustering mode="replication"> <sync/> </clustering> </default> </infinispan>
private static EmbeddedCacheManager createCacheManagerFromXml() throws IOException { return new DefaultCacheManager("infinispan.xml");}
Note
org.infinispan.jmx.JmxDomainConflictException: Domain already registered org.infinispan
.
GlobalConfiguration glob = new GlobalConfigurationBuilder() .clusteredDefault() .globalJmxStatistics() .allowDuplicateDomains(true) .enable() .build();
11.2.4.4. Configure the Distributed Data Grid
numOwners
parameter, which sets how many owners each entry has.
numOwners
value to set the desired trade off between space, durability and availability. Durability is further improved by JBoss Data Grid's topology aware consistent hash, which locates entry owners across a variety of data centers, racks and nodes.
Programmatically configure the cache for distributed mode (either synchronous or asynchronous) as follows:
new ConfigurationBuilder() .clustering() .cacheMode(CacheMode.DIST_SYNC) .hash().numOwners(2) .build()
Edit the infinispan.xml
file to include the following XML code to declaratively configure the cache for distributed mode (either synchronous or asynchronous):
<default> <clustering mode="distribution"> <sync/> <hash numOwners="2"/> </clustering> </default>