...
Regarding both Geronimo javaee6 and minimal release bundles. Full support for multiple instances was completed in GERONIMO-6270 and its sub-tasks. This support is available in the latest snapshots after March 1, 2012, and will be in the 3.0-beta-2 standard release. This documents how to run multiple instances after applying the changes from GERONIMO-6270.
For prior releases, multiple installations can safely run side-by-side by completely copying the server folder to another, and start the 2nd server installation after changing its portOffset value.
...
GERONIMO_HOME
versus GERONIMO_SERVER
Simply put, GERONIMO_HOME
is the path to the server binary installation and GERONIMO_SERVER
is the path to the server run-time configuration. GERONIMO_HOME
is the path to where Geronimo was installed which every instance references, and every Geronimo instance defines its own GERONIMO_SERVER
as the path to the configuration for the instance.
We define GERONIMO_SERVER
in order to have the Geronimo start procedures startup an instance.
Path Resolution
GERONIMO_HOME
is obtained during startup relative to the directory Geronimo is installed in. By default, if the user does not define GERONIMO_SERVER
it is set to GERONIMO_HOME
. If the user defines GERONIMO_SERVER
it is attempted to be resolved to an absolute path in the following ways:
- First, as an absolute path IFF
GERONIMO_SERVER
is absoluteGERONIMO_SERVER
- Second, as a relative path to
GERONIMO_HOME
IFFGERONIMO_SERVER
is not absoluteGERONIMO_HOME
/GERONIMO_SERVER
Technical Terms
Skip this sub-section if you do not care about the technical internals of Geronimo's use of GERONIMO_HOME
versus GERONIMO_SERVER
Inside Geronimo there is a concept of home
, base
, and server
, with corresponding java properties org.apache.geronimo.home.dir
and org.apache.geronimo.server.dir
. base
and server
are the same, but Geronimo references base
in general to reference the location for run-time configuration. The definition of server
is user provided, and redefines base
.
When Geronimo runs, home
and base
properties are defined relative to the installation directory of Geronimo. When a user starts up a Geronimo instance, the user defines the server
property. Defining the server
property triggers Geronimo to change its base
from home
to server
thus starting up a Geronimo instance.
Several internal libraries used by Geronimo define two categories of properties as home
and base
, and Geronimo defines these further when server
is defined. Outside of running multiple Geronimo instances base
properties can be used to separate the binary installation from the user-modifiable configuration for a single server installation when that is desirable in some disk layout strategies.
The layout of a Geronimo instance
Wiki Markup |
---|
{scrollbar} |
...
It is possible to run multiple instances of geronimo Geronimo on the same machine.
...
- <GERONIMO_HOME>/
- bin
- jsr88
- lib
- schema
The repository is shared, and contains lots of basic and important libraries are required to bootstrap server. It is recommended to configure second repositories, one for each instance. See Configuring multiple Repositories.
- <GERONIMO_HOME>/
- repository (This is the primary shared repository for bootstrapping Geronimo instances)
...
When running multiple instances, do not run a server from GERONIMO_HOME but only from GERONIMO_SERVER roots. Also set the GERONIMO_HOME/repository
to be read-only to help prevent accidentally deploying to it when instead the intention is to deploy to the local repository for each Geronimo instance at GERONIMO_SERVER/repository
.
...
Each instance gets its own copy of the following at <geronimo_home>/<instance_name>
. etc
is read-only and var
is read-write. Both are necessary for each Geronimo instance.
- <GERONIMO_SERVER>/
- etc
- var
These are also read-write but are not part of the minimally necessary directories and files for running a Geronimo instance, but may be desired. The deploy
...
and repository
directories will be automatically created when you start Geronimo if they do not already exist.
- <GERONIMO_SERVER>/
- repository (This is the local repository under
<geronimo_home>/<instance_name>
, and is not the same as the primary shared repository) - deploy
- hotbundles
- repository (This is the local repository under
The bin, lib and schema directories are read-only, and thus may be are shared between instances. The repository is also shared, which means that an application deployed in one instance will show up in the list of deployed modules in for all the other instances, but only shown running in the deployed instance.instances. Thus creating the second repository for each instance is recommended to keep deployments local to the Geronimo instances. See Configuring multiple Repositories.
Here is an example layout of what it would look like to have installed one Geronimo instance named "foo-server".
...
Creating a new server instance
Start with a fresh image of geronimoGeronimo. Do not use an image that has been used to run the default instance.
To create an instance named foo-server
do the following. All your instance data will be put in <geronimo_home>/foo-server
. All the directories named below are relative to <geronimo_home>
.
Follow the procedures as below:
- Create a directory
foo-server
under<geronimo_home>
. - Copy
var
andetc
directories tofoo
. Starting from v2.2, you-server
. You can use a GShell the commanddeploy/:new-server-instance to help you with this step. < GERONIMO-6287 - Recommended: create
foo-server/repository
and set it up as a second repository for the Geronimo instance. See Configuring multiple Repositories - Edit
foo-server/var/config/config-substitutions.properties
and change the portOffset. Try using any integers such as 1, 2, 10, 20, 30.. for various instances.
Running an instance
- Set the
org.apache.geronimo.server.name
system propertyGERONIMO_SERVER
environment variable to define the server instance directory before you start the server. Use the syntax-Dorg.apache.geronimo.server.name=foo
for This variable will be set toGERONIMO_HOME
as default if not defined. SetGERONIMO_SERVER=foo-server
to change the server name to an instance namedfoo-server
located at<geronimo<GERONIMO_home>HOME>/foo
. Add this to yourGERONIMO_OPTS
environment variable-server
, orGERONIMO_SERVER=/opt/geronimo/foo-server
to set the absolute path.
- On a Windows system:
set GERONIMO_
...
SERVER=foo-
...
server
...
- On a Unix-like system:
export GERONIMO_
...
SERVER=
...
"foo-server"
- Start the server using startup
No Format borderStyle solid<geronimo_home>/bin/startup - To shutdown this instance, use the port number of RMI Naming port (default 1099). For the new instance
foo-server
, the port number should be 1099 plus portOffset specified infoo-server/var/config/config-substitutions.properties
.No Format borderStyle solid<geronimo_home>/bin/shutdown --port <port<RMI_port_num> - To deploy applications to this instance use the port number of RMI Naming port
No Format borderStyle solid
- This deploys to the primary Geronimo repository solid
<geronimo_home>/bin/deploy --port <RMI_port_num> deploy <applications> - This deploys to a secondary Geronimo repository exclusive to the Geronimo server defined as
GERONIMO_SERVER=foo-server
. See Configuring multiple Repositories for more detailed instructions. solid<geronimo_home>/bin/deploy
...
--port <RMI_port
...
_num>
...
deploy --targets <foo_repo_name> <applications>
The Administrative Console can also be used for all these operations. Connect to an instance by using the right HTTP port (default 8080).
Example runtime for multiple instances
- First download the Geronimo bundle distribution
- Determine what you want
GERONIMO_HOME
to be. We will use/opt/geronimo3
for this example. - Unpack the Geronimo bundle, and move the unpacked directory to
/opt/geronimo3
- We'll create two Geronimo instances named gserv1 and gserv2
- Create the Geronimo instance directories as
/opt/geronimo3/gserv1
and/opt/geronimo3/gserv2
- Copy the directories
var
andetc
to each instance directory - Create a
repository
directory within each instance directory and set it up as a second repository for the corresponding Geronimo instance. See Configuring multiple Repositories - Modify the
gserv(1|2)/var/config/config-substitutions.properties
file for each Geronimo instance changing thePortOffset
. We'll set thePortOffset
forgserv1
to 100 and thePortOffset
forgserv2
to 200 for our example. - Create a start script in each Geronimo instance directory to make it easier to start each instance
/opt/geronimo3/gserv1/start.sh
solid#!/bin/bash # Geronimo start script # instance: gserv1 # Uncomment this to explicitly set Geronimo's runtime Java #JAVA_HOME=/usr/jdk1.6.0_25 #PATH=${JAVA_HOME}/bin:${PATH} export GERONIMO_HOME=/opt/geronimo3 export GERONIMO_SERVER=gserv1 cd ${GERONIMO_SERVER} # Normal startup ${GERONIMO_HOME}/bin/startup # Interactive startup #${GERONIMO_HOME}/bin/geronimo run /opt/geronimo3/gserv2/start.sh
solid#!/bin/bash # Geronimo start script # instance: gserv2 # Uncomment this to explicitly set Geronimo's runtime Java #JAVA_HOME=/usr/jdk1.6.0_25 #PATH=${JAVA_HOME}/bin:${PATH} export GERONIMO_HOME=/opt/geronimo3 export GERONIMO_SERVER=gserv2 cd ${GERONIMO_SERVER} # Normal startuo ${GERONIMO_HOME}/bin/startup # Interactive startup #${GERONIMO_HOME}/bin/geronimo run
- On linux, make the start script is executable with chmod: chmod 755 start.sh
- Create the Geronimo instance directories as
- Your Geronimo installation file structure should look something similar to this: solid
/opt/geronimo3 |-- LICENSE |-- NOTICE |-- README.txt |-- RELEASE_NOTES-3.0-SNAPSHOT.txt |-- bin |-- -etc- |-- gserv1 | |-- etc | |-- repository | |-- start.sh | `-- var |-- gserv2 | |-- etc | |-- repository | |-- start.sh | `-- var |-- jsr88 |-- lib |-- +repository+ |-- schema `-- -var- It is suggested that inGERONIMO_HOME/etc
andGERONIMO_HOME/var
are removed andGERONIMO_HOME/repository
is made read-only - Finally you can start up each instance by executing their associated start script you just created in the previous step
Further readings
To use multiple repositories see Configuring multiple Repositories.