Failover and Load Balancing in Jasper Server
Installing jasper instances
Make data easy with Helical Insight.
Helical Insight is the world’s best open source business intelligence tool.
For sample configuration I installed two Jasperserver instances:
- On two separate application server (2 tomcat servers running on different port), and with
- Single repository (OracleDB)
For detailed installation steps refer http://helicaltech.com/installing-jasperreports-server-6-0-1-with-oracle-db-in-windows/
I installed jasper server instances on localhost. These jasper servers are running on:
http://localhost:9080/jasperserver-pro
http://localhost:9180/jasperserver-pro
Installing Apache web server
- Download the Apache HTTPD Web Server from the Apache web site. Be sure to download the httpd_2.2.22-win32-x86-open_ssl MSI installer here: http://httpd.apache.org/download.cgi.
- Double click the MSI file saved on your Windows Desktop.
Apache HTTP server 2.2-Installation wizard will open.
- Click on Next button.
- Accept the terms in License agreement and click on Next button.
- On the next window again click next.
- Next,
- fill in all the text boxes with the following information:
“Network Domain”: localhost
“Server Name”: localhost
“Administrator’s Email Address”: your email address
- Make sure the radio button “for all users, on port 80, as a service – recommended” is selected.
- Click on Next.
- When asked about the Setup Type, select “Typical” and click next.
- Give the Path where you want to install all the packages and scripts. I chose this path E:\Jaspersoft\Apache2.2\
(The ending backslash is important)
Click on OK after providing the installation path.
- Click “Install” to begin the installation.
- Once the Apache installation software has finished installing all the files on your computer, you will see a final window letting you know the installation was a success. Click the “Finish” button.
- To check that the software was in installed successfully, open browser and type “http://localhost/” into the address bar. You should see a page that looks like this or the words It Works!
Installing mod_jk
Mod_jk is an Apache web server module that allows the Apacheweb server to interface with the Tomcat application server. Installing it and configuring it are the keys to getting the web server and the application server working together.
Download the latest version of mod_jk
New versions of mod_jk are released as source packages, and as binary packages for select platforms. Both are available for download from the Apache Tomcat Connector project download page.Currently, the following platforms receive binary releases: AIX, FreeBSD, iSeries, Linux, Mac OS X, Netware, Solaris, and Windows (32- and 64-bit releases).
Download the most recent release.
I downloaded “tomcat-connectors-1.2.40-windows-i386-httpd-2.2.x”.
Installing mod_jk
- Extract the zip file.
- Copy mod_jk.so and paste it inside modules directory of Apache web server (E:\Jaspersoft\Apache2.2\modules).
Jasper server configuration for failover
- On each jasper server instance, edit the file <web-app>/WEB-INF/web.xml.
- Locate the listener of class RequestContextListener and replace it with the listener of class TolerantRequestContextListener. The new listener class is given in comments that you need to uncomment as follows:
<listener> <!--SESSION REPLICATION--> <!--Replace the default spring listener with the Tolerant listener to enable replication--> <listener-class>com.jaspersoft.jasperserver.core.util.TolerantRequestContextListener </listener-class> <!--listener-class>org.springframework.web.context.request.RequestContextListener </listener-class--> </listener>
- Locate the ClusterFilter that is given in comments and uncomment is as shown below:
<filter> <filter-name>ClusterFilter</filter-name> <filter-class>com.jaspersoft.jasperserver.war.TolerantSessionFilter</filter-class> </filter> <filter>
- Locate the corresponding mapping for the ClusterFilter and uncomment it as well. You must also uncomment the <distributable> element as well.
<filter-mapping> <filter-name>ClusterFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <distributable/>
2. On each jasper server instance, enable session replication in your app server or web container.
For example, to enable session replication on Apache Tomcat 6.x, edit the file <tomcat>/conf/server.xml as follows:
- Within the Engine tag add jvmRoute property as shown below:
<Engine name="Catalina" defaultHost="localhost" jvmRoute="node2">
- Add the Cluster definition within the <Engine name=”Catalina” defaultHost=”localhost” jvmRoute=”node2″> configuration. This example uses Delta Manager.
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="8"> <Manager className="org.apache.catalina.ha.session.DeltaManager" expireSessionsOnShutdown="false" notifyListenersOnReplication="true"/> <Channel className="org.apache.catalina.tribes.group.GroupChannel"> <Membership className="org.apache.catalina.tribes.membership.McastService" address="228.0.0.4" port="45564" frequency="500" dropTime="3000"/> <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter"> <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/> </Sender> <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver" address="auto" port="4001" autoBind="100" selectorTimeout="5000" maxThreads="6"/> <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/> <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/> </Channel> <Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter=""/> <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/> <ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/> <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/> </Cluster>
3. On each jasper server instance, locate the following two files and uncomment the same two sections in each file:
- web-app>/WEB-INF/ehcache.xml
- web-app>/WEB-INF/ehcache_hibernate.xml
<cacheManagerPeerProviderFactory class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory" properties="peerDiscovery=automatic,multicastGroupAddress=224.0.0.1,multicastGroupPort=4446,timeToLive=1"/> <cacheManagerPeerListenerFactory class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory" properties="hostName=localhost,port=40111,remoteObjectPort=40112,socketTimeoutMillis=120000"/> <cache name=... ...> <cacheEventListenerFactory class="net.sf.ehcache.distribution.RMICacheReplicatorFactory" properties="replicateAsynchronously=true, replicatePuts=true, replicateUpdates=true, replicateUpdatesViaCopy=false, replicateRemovals=true"/> <bootstrapCacheLoaderFactory class="net.sf.ehcache.distribution.RMIBootstrapCacheLoaderFactory" properties="bootstrapAsynchronously=true, maximumChunkSizeBytes=5000000"/> </cache>
Load Balancer configuration
Make data easy with Helical Insight.
Helical Insight is the world’s best open source business intelligence tool.
The following changes configure the Apache HTTP server (httpd) as a load balancer.
1. Locate httpd.conf file in E:\Jaspersoft\Apache2.2\conf
2. Add following line to the end of the httpd.conf file
Include conf/mod-jk.conf
3. Create the following two files in the /conf folder of your httpd server.
4. Create the following two files in the /conf folder of your httpd server.
- mod_jk.conf
# Load mod_jk module # Specify the filename of the mod_jk lib LoadModule jk_module modules/mod_jk.so # Where to find workers.properties JkWorkersFile conf/workers.properties # Where to put jk logs and memory JkLogFile logs/mod_jk.log JkLogFile logs/mod_jk.shm # Set the jk log level [debug/error/info] JkLogLevel info # Select the log format JkLogStampFormat "[%a %b %d %H:%M:%S %Y]" # JkOptions indicates to send SSK KEY SIZE JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories # JkRequestLogFormat JkRequestLogFormat "%w %V %T" # Mount your applications #JkMount /* loadbalancer JkMount /jasperserver-pro loadbalancer JkMount /jasperserver-pro/* loadbalancer # You can use external file for mount points. # It will be checked for updates each 60 seconds. # The format of the file is: /url=worker # /examples/*=loadbalancer #JkMountFile conf/uriworkermap.properties # Add shared memory. # This directive is present with 1.2.10 and # later versions of mod_jk, and is needed for # for load balancing to work properly JkShmFile logs/jk.shm #JkShmFile /var/log/httpd/mod_jk.shm # Add jkstatus for managing runtime data <Location /jkstatus> JkMount status Order deny,allow Allow from all </Location>
- workers.properties
# Define list of workers that will be used # for mapping requests worker.list=loadbalancer,status # Define Node1 # modify the host as your host IP or DNS name. worker.node1.port=9009 worker.node1.host=localhost worker.node1.type=ajp13 worker.node1.lbfactor=1 # Define Node2 # modify the host as your host IP or DNS name. worker.node2.port=9109 worker.node2.host=localhost worker.node2.type=ajp13 worker.node2.lbfactor=1 # Load-balancing behaviour worker.loadbalancer.type=lb worker.loadbalancer.balance_workers=node1,node2 worker.loadbalancer.sticky_session=True worker.list=loadbalancer # Status worker for managing load balancer worker.status.type=status
Best Open Source Business Intelligence Software Helical Insight is Here