Today I ran into an 11i E-Business Suite instance which is using Apache/JServ to do forms load-balancing. In fact, it’s my first customer to implement and successfully use Apache/JServ for load-balancing. Here is quick sketch of the instance architecture:
Users | 11i URL: | https://appsrv1.pythian.com:8000/ | ---------------- | appsrv1 | | apache/jserv | | formservlet | ---------------- / \ / \ ---------------- ---------------- | appsrv2 | | appsrv3 | | apache/jserv | | apache/jserv | | formservlet | | formservlet | ---------------- ---------------- ------------------- | dbsrv01 | | CM/RepSrv | | Database | -------------------
Almost all the customers that I have worked on till now, with a requirement for multiple middletier, have implemented load balancing using hardware load-balancers like Cisco Content Switch or F5 Big-IP.
This customer is running forms in servlet mode, a prerequisite for using Jserv to do load-balancing. If somebody wants to do forms load-balancing in socket mode and opts not to use any hardware LBRs, then the only option is a Metrics server.
Here is brief overview on how forms load-balancing happens in above architecture.
- all web page and forms requests from users land on appsrv1 Apache processes
- Apache process passes that request to the oprocmgr(appsrv1) module
- the oprocmgr(appsrv1) with which all the JServ jvms (appsrv1, appsrv2, appsrv3) are registered, will pass the request to the least loaded JServ.
Here are some more technical details — basically, the XML tags in the Context XML file in APPL_TOP
that need to be edited. As I mentioned earlier, we need to have forms servlet mode enabled. The following tags take care of that.
# forms servlet mode s_forms_servlet_serverurl - /forms/formservlet s_forms_servlet_comment - null
To enable JServ load-balancing, the following tags need to be updated:
# jserv load balancing s_oacore_zone_name - root s_multiwebnode - yes s_oacore_trusted_oproc_nodes - appsrv1.pythian.com,appsrv2.pythian.com,appsrv3.pythian.com
The s_oacore_zone_name
tag gets updated in the jserv.properties
in zones section. It’s important that the zone name is same on all three apps servers. The s_multiwebnode
tag value is used by autoconfig to generate the oprocmgr.conf
file with all the node names from the s_oacore_trusted_oproc_nodes
tag. The oprocmgr.conf
file will look like this:
<IfModule mod_oprocmgr.c> Listen 8100 ProcNode appsrv1.pythian.com 8100 ProcNode appsrv2.pythian.com 8100 ProcNode appsrv3.pythian.com 8100 <VirtualHost _default_:8100> <IfDefine SSL> SSLEngine off </IfDefine> Port 8100 <Location /> Order Deny,Allow Deny from all Allow from localhost Allow from appsrv1 Allow from appsrv1.pythian.com Allow from appsrv2.pythian.com Allow from appsrv3.pythian.com Allow from 192.168.1.100 Allow from appsrv2 Allow from appsrv2.pythian.com Allow from appsrv3 Allow from appsrv3.pythian.com </Location> <Location /oprocmgr-service> SetHandler oprocmgr-service </Location> <Location /oprocmgr-status> SetHandler oprocmgr-status </Location> </VirtualHost> </IfModule>
Check Metalink Note 217368.1: Advanced Configurations and Topologies for Enterprise Deployments of E-Business Suite 11i.
Happy Load-Balancing!
1 Comment. Leave new
We can implement Jserv load balancing only on top of HTTP layer load balancing. I have tried with only Jserve Load balacing but it doesnt work all the request goes to only one node.
Thanks,
Bharat