OLL Live Event: WebLogic Server 12.1.3 Whole Server Migration with Dynamic Clusters

I will be demonstrating whole server migration of a server on a dynamic cluster with WebLogic Server 12.1.3.

Although whole server migration isn't new to WebLogic Server (as of version 9.0), the last release of WebLogic Server (12.1.2) didn't support this type of migration for servers that were part of a dynamic or mixed cluster. I recently developed the WebLogic Server 12.1.3 New Features Self-Study course on OLL and some associated OBE tutorials to show you how to configure and use these features.

The configuration of whole server migration is essentially the same as it was before. The only difference is that you need to make sure the floating IP addresses you configure for the Node Manager to use to migrate your servers matches the IP addresses of the servers themselves. The trick for this is to leverage configuration macros used for configuring servers in a dynamic cluster. The listen address of the server is suffixed with the server's ID, thus creating a unique IP address for each server. When Node Manager needs to bring the server up, it automatically activates the matching IP address from its pool for that server so it is enabled on the networking interface and starts the server.

You can attend the OLL Live Event listed below, or if you're more of a do-it-yourself type of person you can check it out in the Self-Study course listed above.

OLL Live Event Announcement


Oracle WebLogic Server 12.1.3: Using Whole Server Migration with Dynamic Clusters

Date: Wednesday, September 3rd, 2014 Time: 9:00 am US/Pacific time


This webcast will demonstrate how to configure whole server migration for clusters that contain dynamically created servers. Watch as JMS messages are placed on a queue on one server, that server is automatically migrated to another machine, and the same JMS messages are accessible by the migrated server.

To access the content this event is based on, click here


Mark Lindros

Mark Lindros has been in the IT industry since 1994, fulfilling various roles in support, consulting, and courseware development and delivery. His entire career spans the enterprise application space, using the products that now form the foundation of Oracle Fusion Middleware. Mark was the world wide internal field readiness developer at BEA for WebLogic Server 4.5.1-10.0. Mark also has expertise in a number of other Oracle products, including Java, Oracle Entitlements Server, Coherence, Oracle Platform Security Services, the Tuxedo product suite, and WebLogic Portal. Recently, he completed the development of the WebLogic Server 12.1.3 New Features Self-Study and associated Oracle by Example tutorials.

Access recordings of previous OLL Live Events.

Register for other OLL Live Events.

Send questions or comments to OLL-LIVE-ADMIN@beehiveonline.oracle.com.


Great tutorial!,
I only have one question: If I need to set another IP range address for example what expression should I use? Is it possible to use regular expressions?
Thank you

Posted by guest on November 14, 2014 at 06:06 AM PST #

Regarding this excellent tutorial, I would like to ask you if is it possible to specify a Listen Addres in the cluster template where the IP range starts with an IP that doesn’t end in “1”. For example, if my IP range goes from to 192.0.25 I don’t know how to use the ${id} macro to set that IP range.

Thank you.

Posted by mavilo on November 19, 2014 at 04:26 AM PST #

I'm glad you liked the entry! I had to think about this for a little while but I believe I have come up with a plausible solution.

Although there is no way to do arithmetic to calculate a server ID greater than 1 or a configuration option to start server IDs at a specific number, there is a way to gain more control over this setting.

The documentation shows the macros (that's what the ${id} value is called) that are available in WebLogic Server.


There is another macro, ${system-property-name}, that can be used to set the IP address for each server programmatically during start up. Because Node Managers use the start scripts by default, the setDomainEnv.sh script is called as part of the server startup routine. However, starting around 12.1.2 the best practice is to not modify the setDomainEnv.sh script directly and instead create the $DOMAIN_HOME/bin/setUserOverrides.sh file that gets executed by setDomainEnv.sh.

Here is the code from setDomainEnv.sh that sources setUserOverrides.sh:

# Set user overrides, if available.
if [ -f ${DOMAIN_HOME}/bin/setUserOverrides.sh ] ; then
. ${DOMAIN_HOME}/bin/setUserOverrides.sh

This code already exists for you in setDomainEnv.sh so all you have to do is create the file and write some code to set a system property to the required IP address.

For example:

if [ "${SERVER_NAME}" = "dynsvr1" ] ; then
if [ "${SERVER_NAME}" = "dynsvr2" ] ; then
if [ "${SERVER_NAME}" = "dynsvrn" ] ; then

Then all you have to do is set the listen address field for the server template to ${ListenAddress} so the value of the system property is set for that server.

I haven't tried it out myself personally yet, but according to the docs and my experience this is where I would start trying to get this to work.

If you do try this and get it to work, please post back here for others to see!

Posted by Mark Lindros on November 19, 2014 at 08:36 AM PST #

I tried your solution with the macro ${ListenAddress} and configured the script setUserOverrides.sh. However I found two problems:

1) Nodemanager doesn't start the new IP, so Adminserver cannot start the associated server. In the server log I found:
<Nov 24, 2014 10:50:48 AM CET> <Error> <Server> <BEA-002606> <The server is unable to create a server socket for listening on channel "Default". The address might be incorrect or another process is using port 9001: java.net.BindException: Cannot assign requested address>

If I bring up the interface with the wlsifconfig.sh script, the nodemanger can start the server.

2) With all the interfaces up I can start all the servers, but if I configure the Server Template -> Migration tab - > Automatic Server Migration Enabled (on) I found the following error in de AdminServer:

Administration Console encountered the following error: java.rmi.RemoteException: [Deployer:149150]An IOException occurred while reading the input.; nested exception is:
java.net.NoRouteToHostException: No route to host; nested exception is:
java.net.NoRouteToHostException: No route to host
at weblogic.deploy.service.internal.transport.http.HTTPMessageSender.sendMessageToServerURL(HTTPMessageSender.java:344)

I shutdown the servers and de adminserver, then I try to start the managed servers, in the nodemanager log of the machines:

WARNING Server start command for WebLogic server 'dynserv-1' failed due to: [Missing an appropriate entry for]. Please check Node Manager log and/or server 'dynserv-1' log for detailed information.

It seems some nodemanager missconfiguration, but I don't know how to solve the problem. I have three machines, one running only the AdminServer and the other to with one server each one.

Thank you very much

Posted by mavilo on November 24, 2014 at 04:38 AM PST #

Hi again,

I reviewed again the solution you gave me and I think the nodemanager can't read the custom variable ${ListenAddress}. For the nodemanager the "Listen Address" field is empty, so that in the nodemanager.out log appears the following:
Server start command for WebLogic server 'dynserv-1' failed due to: [Missing an appropriate entry for]
I think that the error appears -before- the nodemanager call the startWeblogic.sh script so, it is not possible to set the correct variable ${ListenAddress} and associate it to the server.

Posted by mavilo on December 05, 2014 at 04:00 AM PST #

Hi Mavilo,

Thank you for trying this out. And thank you for reminding me about this. I have gotten very wrapped up in my regular work and this slipped my mind. I am working on a critical issue at the moment. As soon as it is over I will take a look at this.

Posted by Mark Lindros on December 05, 2014 at 05:22 AM PST #

Ok, I'm back and I have had a chance to play around with this. It turns out the the problem is that somehow the Node Manager process is not expanding the macro as part of its processing to start a floating IP. It appears there is a specialized process done for the server ${id} macro that is not done for the custom macro. I have raised this with support to see what the dev team thinks.

In the meantime, it looks like the ${id} solution is the way to go. The good news is that you're not stuck with just IPs that start with 1 because you can prefix the address with another number. Just like in this example, we start with 21. This could just as easily be 31 to 251 in increments of 10. Because the floating IPs are in a range, you can configure it to work well because you do have control over the floating IP range and have a few options for manipulating the settings.

Posted by Mark Lindros on December 15, 2014 at 11:48 AM PST #

Post a Comment:
  • HTML Syntax: NOT allowed

Mark Lindros
Oracle FMW Curriculum Developer

Former BEA and Oracle TM Consultant, Support Engineer, and internal Staff Engineer

I have been in the IT industry since 1994, fulfilling various roles along the way. My entire career spans the enterprise application space. I started as a Tuxedo specialist, and later changed my focus to Java EE and WebLogic Server. I have extensive field experience implementing solutions using multiple Oracle FMW products.

When I'm not stuck behind my desk unraveling technology, I can be found enjoying my family, working out, playing video games, mountain biking, and enjoying life.

This blog is for posting interesting technical findings I make while using Oracle FMW products.


« August 2016