This feature is still undergoing development.
Configuration
Fedora 4 is built in top of the JCR implementation Modeshape. Modeshape uses Infinispan as a distributed datastore, which in turn uses the Messaging Toolkit JGroups to transfer state between nodes.
Therefore the following resources and documentatios contain a lot of important information about configuring Fedora 4's underlying projects.
- Fedora configuration inventory
- Modeshape documentation
- Modeshape configuration section
- Infinispan documentation
- Infinispan configuration section
- JGroups documentation
- JGroups configuration section
Step-By-Step guides for deploying Fedora 4 clusters
Deploy cluster using the UDP Multicast protocol
A couple of configuration options have to be set in order to have Fedora 4 work as a cluster on a local machine:
- Xmx1024m Set the Java heap to 1GB
- XX:MaxPermSize=256m Set the Java PermGen size to 256MB
- fcrepo.modeshape.configuration=file:///path/to/repository.json The Modeshape configuration used for clustering
- java.net.preferIPv4Stack=true Tell Java to use IPv4 rather than IPv6
- fcrepo.ispn.jgroups.configuration=/path/to/jgroups-fcrepo-udp.xml Set the JGroups configuration file holding the UDP Transport defintions
- jgroups.udp.mcast_addr=239.42.42.42 Set the UDP multicast address for the JGroups cluster
- fcrepo.infinispan.cache_configuration=/path/to/infinispan.xml Set the Infinispan configuration file holding the Infinispan cluster configuration
Using Tomcat7
- Build the fcrepo war file or download the prebuilt fcrepo war file
- Build the War file as described on this page
- Fetch the WAR file from the download page
- Get Tomcat
Download Tomcat 7.0.50 and unpack it
#> wget http://mirror.synyx.de/apache/tomcat/tomcat-7/v7.0.50/bin/apache-tomcat-7.0.50.tar.gz #> tar -zxvf apache-tomcat-7.0.50.tar.gz #> mv apache-tomcat-7.0.50 tomcat7
- Put the WAR file into tomcat's webapp directory or create a symbolic link
Copy the fcrepo-webapp-VERSION.war file
#> cp fcrepo-webapp-VERSION.war tomcat7/webapps/fcrepo.war
- Setup the cluster configuration (Optional)
- This github project contains a sample configuration for a cluster in distributed mode.
- Change the configuration as required. Description is available at the JGroups, Infinispan and Modeshape documentations
- Make sure to point Fedora 4 to the configuration files by updating the file
$TOMCAT_HOME/bin/setenv.sh
(create if necessary) using the propertiesfcrepo.modeshape.configuration,
fcrepo.ispn.jgroups.configuration
andfcrepo.infinispan.cache_configuration
- Set the send/recv buffer sizes if neccessary
Use the following commands to set the buffer size
#> sysctl net.core.rmem_max=5242880 #> sysctl net.core.wmem_max=5242880
- Start instance
Using the default clustered configuration (Replication mode):
#> CATALINA_OPTS="-Xmx1024m -XX:MaxPermSize=256m -Dfcrepo.modeshape.configuration=config/clustered/repository.json -Djava.net.preferIPv4Stack=true -Djgroups.udp.mcast_addr=239.42.42.42" bin/catalina.sh run
Using a custom configuration by pointing Fedora 4 to custom configuration files:
#> CATALINA_OPTS="-Xmx1024m -XX:MaxPermSize=256m -Djava.net.preferIPv4Stack=true -Djgroups.udp.mcast_addr=239.42.42.42 -Dfcrepo.modeshape.configuration=file:///path/to/repository.json -Dfcrepo.ispn.jgroups.configuration=/path/to/jgroups-fedora-udp.xml -Dfcrepo.infinispan.cache_configuration=/path/to/infinispan.xml" bin/catalina.sh run
Deploy cluster using the UDP Multicast protocol on a single machine
A couple of configuration options have to be set in order to have Fedora 4 work as a cluster on a local machine:
- Xmx1024m Set the Java heap to 1GB
- XX:MaxPermSize=256m Set the Java PermGen size to 256MB
- fcrepo.modeshape.configuration=file:///home/ruckus/dev/tomcat7-8081/repository.json The Modeshape configuration used for clustering
- java.net.preferIPv4Stack=true Tell Java to use IPv4 rather than IPv6
- fcrepo.ispn.jgroups.configuration=/home/ruckus/dev/tomcat7-8081/jgroups-fcrepo-udp.xml Set the JGroups configuration file holding the UDP Transport defintions
- jgroups.udp.mcast_addr=239.42.42.42 Set the UDP multicast address for the JGroups cluster
- fcrepo.infinispan.cache_configuration=/home/ruckus/dev/tomcat7-8081/infinispan.xml Set the Infinispan configuration file holding the Infinispan cluster configuration
- jms.port=61617 The port used by ActiveMQ's JMS protocol. This needs to be distinct for every instance of fcrepo4
- stomp.port=61614 The port used by ActiveMQ Stomp protocol. This needs to be distinct for every instance of fcrepo4
Using Tomcat7
- Build the fcrepo war file or download the prebuilt fcrepo war file
- Build the War file as described on this page
- Fetch the WAR file from the download page
- Get Tomcat
Download Tomcat 7.0.50 and unpack it
#> wget http://mirror.synyx.de/apache/tomcat/tomcat-7/v7.0.50/bin/apache-tomcat-7.0.50.tar.gz #> tar -zxvf apache-tomcat-7.0.50.tar.gz #> mv apache-tomcat-7.0.50 tomcat7-8080
- Put the WAR file into tomcat's webapp directory or create a symbolic link
Copy the fcrepo-webapp-VERSION.war file
#> cp fcrepo-webapp-VERSION.war tomcat7-8080/webapps/fcrepo.war
- Get the Infinispan XML configuration file
Download from github and put it into tomcat7-8080
#> wget -O infinispan.xml https://gist.github.com/fasseg/8646707/raw #> mv infinispan.xml tomcat7-8080/
- Get the Modeshape JSON configuration file
Download from Github and put into tomcat7-8080
#> wget -O repository.json https://gist.github.com/fasseg/8646727/raw #> mv repository.json tomcat7-8080/
- Get the JGroups UDP Transport configuration file
Download from Github and put into tomcat7-8080
#> wget -O jgroups-fedora-udp.xml https://gist.github.com/fasseg/8646743/raw #> mv jgroups-fedora-udp.xml tomcat7-8080/
- Set the send/recv buffer sizes if neccessary
Use the following commands to set the buffer size
#> sysctl net.core.rmem_max=5242880 #> sysctl net.core.wmem_max=5242880
- Copy the whole tomcat folder in order to create a second instance
#> cp -R tomcat7-8080/ tomcat7-8081
- Change the connector ports of the second Tomcat instance to 8081, 8006 and 8010
#> sed -i 's/8080/8081/g' tomcat7-8081/conf/server.xml #> sed -i 's/8005/8006/g' tomcat7-8081/conf/server.xml #> sed -i 's/8009/8010/g' tomcat7-8081/conf/server.xml
- Start the first instance
#> CATALINA_OPTS="-Xmx1024m -XX:MaxPermSize=256m -Dfcrepo.modeshape.configuration=file:///path/to/repository.json -Djava.net.preferIPv4Stack=true -Dfcrepo.ispn.jgroups.configuration=/path/to/jgroups-fedora-udp.xml -Djgroups.udp.mcast_addr=239.42.42.42 -Dfcrepo.infinispan.cache_configuration=/path/to/infinispan.xml" tomcat7-8080/bin/catalina.sh run
- Start the second instance
#> CATALINA_OPTS="-Xmx1024m -XX:MaxPermSize=256m -Dfcrepo.modeshape.configuration=file:///path/to/repository.json -Djava.net.preferIPv4Stack=true -Dfcrepo.ispn.jgroups.configuration=/path/to/jgroups-fedora-udp.xml -Djgroups.udp.mcast_addr=239.42.42.42 -Dfcrepo.infinispan.cache_configuration=/path/to/infinispan.xml" tomcat7-8081/bin/catalina.sh run
- Check that the instances are reachable and that the clustersize is '2':
#> wget http://localhost:8080/fcrepo/rest #> wget http://localhost:8081/fcrepo/rest
- Navigate to http://localhost:8080/fcrepo/rest