You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 8 Next »

This chapter will demonstrate how to configure failover deployments.

Simple Lock File

The Simple Lock File mechanism is intended for failover configurations where instances reside on one host machine.

To use this feature the following must be set on each system in the master/slave setup:

  • $KARAF_HOME/etc/system.properties file updated to reflect the below entries.
karaf.lock=true
karaf.lock.delay=10

Simple Lock File with container level locking.

The Container Level locking mechanism allows bundles to be loaded into the slave kernel instance in order to provide faster failover performance. The Container Level refers to the starting priority assigned to each bundle in the OSGI container. These start levels are specified in $KARAF_HOME/etc/startup.properties, in the format jar.name=level. The core system bundles have levels below 50, where as user bundles have levels greater than 50.

Level

Behavior

1

A 'cold' standby instance. Core bundles are not loaded into container. Slaves will wait until lock acquired to start server.

<50

A 'hot' standby instance. Core bundles are loaded into the container. Slaves will wait until lock acquired to start user level bundles. The console will be accessible for each slave instance at this level.

>50

This setting is Not recommended as user bundles will be started.

To use this feature the following must be set on each system in the master/slave setup:

  • $KARAF_HOME/etc/system.properties file updated to reflect the below entries.
karaf.lock=true
karaf.lock.level=50
karaf.lock.delay=10

Please note that when using a 'hot' spare on the same host the jmx remote port will need to be configured to a unique port to avoid bind conflicts. The servicemix start script can be edited to include the following:

DEFAULT_JAVA_OPTS="-server $DEFAULT_JAVA_OPTS -Dcom.sun.management.jmxremote.port=1100 -Dcom.sun.management.jmxremote.authenticate=false"

JDBC Locking

The JDBC locking mechanism is intended for failover configurations where instances exist on separate machines. In this deployment the master instance holds a lock on a servicemix locking table hosted on a database. If the master losses this lock then an awaiting slave process may gain access to the locking table, then fully start its container. The former master upon detection of lock loss will switch run levels as configured by lock level.

To use this feature the following must be set on each system in the master/slave setup:

  • Classpath updated to include JDBC driver.
  • $KARAF_HOME/etc/system.properties file updated to reflect the below entries.
  • $KARAF_HOME/bin/karaf updated to have unique jmx remote port set if instances reside on same host.
karaf.lock=true
karaf.lock.class=org.apache.felix.karaf.main.DefaultJDBCLock
karaf.lock.level=50
karaf.lock.delay=10
karaf.lock.jdbc.url=jdbc:derby://dbserver:1527/sample
karaf.lock.jdbc.driver=org.apache.derby.jdbc.ClientDriver
karaf.lock.jdbc.user=user
karaf.lock.jdbc.password=password
karaf.lock.jdbc.table=KARAF_LOCK
karaf.lock.jdbc.clustername=karaf
karaf.lock.jdbc.timeout=30

Note:

  • Will fail if jdbc driver is not on classpath.
  • The database name "sample" will be created if it does not exist on the db.
  • First Karaf instance to acquire the locking table is the master instance.
  • If connection to the DB is lost then the master instance will attempt to gracefully shutdown, allowing a slave instance to become master when the DB service is restored. The former master will require manual restart.

The Container Level locking mechanism allows bundles to be loaded into the slave kernel instance in order to provide faster failover performance. The Container Level refers to the starting priority assigned to each bundle in the OSGI container. These start levels are specified in $KARAF_HOME/etc/startup.properties, in the format jar.name=level. The core system bundles have levels below 50, where as user bundles have levels greater than 50.

Level

Behavior

1

A 'cold' standby instance. Core bundles are not loaded into container. Slaves will wait until lock acquired to start server.

<50

A 'hot' standby instance. Core bundles are loaded into the container. Slaves will wait until lock acquired to start user level bundles. The console will be accessible for each slave instance at this level.

>50

This setting is Not recommended as user bundles will be started.

#top

  • No labels