| <?xml version="1.0" encoding="UTF-8"?> |
| <!-- |
| |
| Licensed to the Apache Software Foundation (ASF) under one or more |
| contributor license agreements. See the NOTICE file distributed with |
| this work for additional information regarding copyright ownership. |
| The ASF licenses this file to You under the Apache License, Version 2.0 |
| (the "License"); you may not use this file except in compliance with |
| the License. You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
| --> |
| <chapter id="clustering" |
| xmlns="http://docbook.org/ns/docbook" |
| xmlns:xi="http://www.w3.org/2001/XInclude" |
| xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
| xsi:schemaLocation=" |
| http://docbook.org/ns/docbook |
| http://www.docbook.org/xml/5.0/xsd/docbook.xsd" |
| version="5.0" xml:lang="en"> |
| <title>Clustering and High Availability</title> |
| <para> |
| ServiceMix supports both High Availability (HA) and clustering of containers. |
| </para> |
| <section id="ha"> |
| <title>High Availability (HA)</title> |
| <para> |
| High Availability (HA) can be defined as two distinct ServiceMix container instances configured in a master/slave |
| configuration. In all cases, the master is <emphasis>active</emphasis> and the slave is in <emphasis>standby</emphasis> |
| mode waiting for a failover event to trigger it to take over. |
| </para> |
| <para> |
| <itemizedlist> |
| <listitem><para><emphasis>Active</emphasis>: components are listening for and servicing requests.</para></listitem> |
| <listitem><para><emphasis>Standby</emphasis>: administrative ports may be open (e.g. JMX) but the process is not listening for or servicing requests.</para></listitem> |
| </itemizedlist> |
| </para> |
| <para> |
| As ServiceMix leverages ActiveMQ to provide HA availability, there are a few choices in terms of how to configure |
| master/slave via ActiveMQ: |
| <itemizedlist> |
| <listitem><para><emphasis>Shared Filesystem Master-Slave</emphasis> - with shared database master/slave |
| two containers use the same physical data store container state. Care should be taken to ensure |
| that the file system supports file level locking as this is the mechanism used to select the master. |
| If the master process exists, the database lock is released and the slave acquires it and it then |
| becomes the master.</para></listitem> |
| <listitem><para><emphasis>JDBC Master-Slave</emphasis> - In JDBC master/slave, the master will lock |
| a table in the backend database. The failover event in this case is that the lock is released from |
| the database.</para></listitem> |
| <listitem><para><emphasis>Pure Master-Slave</emphasis> - With pure master/slave either a shared database |
| or a shared filesystem can be used. The master replicates all state changes to the slave so there |
| is additional overhead incurred. The failover trigger in pure master/slave is that the slave loses |
| its network connection to its master.</para></listitem> |
| </itemizedlist> |
| <section> |
| <title>Configuring HA</title> |
| <para> |
| When learning about ServiceMix HA configuration, a good starting point is to configure HA on a single host. In this scenario lets assume we have container1_host1 (master) |
| and container2_host1 (slave). |
| </para> |
| <para> |
| To configure our example using a shared filesystem master/slave, the steps involved including the following: |
| <orderedlist> |
| <listitem><para>Install two ServiceMix instances (servicemix1 and servicemix2)</para></listitem> |
| <listitem><para>Ensure servicemix2 is an exact replica of servicemix1. The exact same files should be installed in servicemix2/hotdeploy directory and servicemix2/conf.</para></listitem> |
| <listitem><para>Edit <code>servicemix1/conf/activemq.xml</code> and configure the ActiveMQ persistence adapter:<abbrev> |
| <code> |
| <![CDATA[ |
| <!-- We use 0.0.0.0 per AMQ-2094 --> |
| <amq:transportConnectors> |
| <amq:transportConnector uri="tcp://0.0.0.0:61616"/> |
| </amq:transportConnectors> |
| |
| <amq:persistenceAdapter> |
| <amq:amqPersistenceAdapter directory="file:<shared>/data/amq"/> |
| </amq:persistenceAdapter> |
| ]]> |
| </code> |
| </abbrev></para></listitem> |
| </orderedlist> |
| </para> |
| </section> |
| </para> |
| |
| <section id="clustering"> |
| <title>Clustering</title> |
| <para> |
| A cluster can be defined as two or more ACTIVE ServiceMix container instances that are networked together. |
| A cluster provides the following benefit: |
| <itemizedlist> |
| <listitem><para>Connectivity to other ServiceMix containers forming a network of containers. |
| Containers can be dynamically added and removed from the network.</para></listitem> |
| <listitem><para>Remote component awareness where each container is aware of its peer container's components. |
| Networked containers listen for remote component registration/deregistration events and once |
| aware can route request to those components.</para></listitem> |
| <listitem><para>Load balancing where a cluster provides the ability to balance requests in a couple of ways including: |
| <itemizedlist> |
| <listitem><para>Installation of the same component on multiple containers to provide increased capacity and additional HA capabilities. |
| If one container fails the same component in another container can still service the request.</para></listitem> |
| <listitem><para>Partition workload among container instances whereby different containers can handle different tasks and flows can span multiple containers.</para></listitem> |
| </itemizedlist> |
| </para></listitem> |
| </itemizedlist> |
| </para> |
| </section> |
| </section> |
| </chapter> |