users@glassfish.java.net

Glassfish 4, Clustering with session stickyness

From: Mark Hammond <mark.hammond_at_bto.org>
Date: Fri, 10 Jan 2014 10:47:53 -0000

Hello,

 

Trying to set up (in a test environment) a two-server Glassfish 4 cluster in
readiness from migrating from our existing single-instance Glassfish 3.1
webserver to one that supported load balancing and failover.

 

Primarily an application writer, the noddy-GUI interface of Glassfish looked
enticing to me. In practice I have been unable to get a Glassfish 4 cluster
working correct and wondered if someone could give me the configuration that
I needed. There are many blogs and guides describing the process, but they
are all slightly different, for different versions of Glassfish, and none of
them appear to work on GF4.

 

The setup:

 

Server 1: app01

To house DAS, and NODE01->INSTANCE0101(SSH)


Server 2: app02

To house NODE02-INSTANCE0102(SSH)

 

Cluster: CLUSTER01, involving NODE01->INSTANCE0101 and NODE02->INSTANCE0102

 

Having set up the two servers, java, and installed Glassfish 4 on app01.
Have installed Apache on app01.

Our old server used Apache and mod_jk to forward appropriate requests to
Glassfish. I had made the appropriate change in /etc/httpd/conf/httpd.conf
to forward requests to jk-connector: (pulled from appropriate sections)

 

LoadModule jk_module modules/mod_jk.so

 

JkWorkersFile /etc/httpd/conf/workers.properties

JkLogFile /var/log/httpd/mod_jk.log

JkLogLevel error

JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "

JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories

 

JkMount /* loadbalancer

 

 

This is what I -thought- was appropriate for workers.properties from all of
the blog posts.

 

worker.list=loadbalancer

 

# default properties for workers

worker.template.type=ajp13

worker.template.lbfactor=50

worker.template.connection_pool_timeout=600

worker.template.socket_keepalive=1

worker.template.socket_timeout=300

 

# properties for worker1

worker.worker1.reference=worker.template

worker.worker1.host=app01.btodomain.bto.org

worker.worker1.port=8009

 

# properties for worker2

worker.worker2.reference=worker.template

worker.worker2.host=app02.btodomain.bto.org

worker.worker2.port=8010

 

# properties for loadbalancer

worker.loadbalancer.type=lb

worker.loadbalancer.balance_workers=worker1,worker2

 

 

Glassfish configuration I believed appropriate:

 

create-jvm-options --target cluster01 "-DjvmRoute=\\${AJP_INSTANCE_NAME}"

create-jvm-options --target cluster01
"-Dcom.sun.enterprise.web.connector.enableJK=\\${AJP_PORT}"

create-system-properties --target instance0101
AJP_INSTANCE_NAME=instance0101

create-system-properties --target instance0102
AJP_INSTANCE_NAME=instance0102

create-system-properties --target instance0101 AJP_PORT=8009

create-system-properties --target instance0102 AJP_PORT=8010

create-network-listener --protocol http-listener-1 --listenerport
"${AJP_PORT}" --jkenabled true --target cluster01 jk-connector

 

 

In addition to the configuration not working, when fiddling with the
settings, I've twice ended up in a situation where test applications will
not redeploy or un-deploy/deploy with Glassfish claiming that an application
by the same name already existing (when it doesn't)

 

Any help would be appreciated.

 

Mark Hammond
Senior Web Software Developer
British Trust for Ornithology, The Nunnery, Thetford, Norfolk, IP24 2PU, UK