How to Set Up High-Availability

Introduction

This page provides instructions on how to set up a recommended, high-availability system for Appian on-premises customers. Cloud customers should see High Availability for Appian Cloud.

Since high availability is a configuration of distributed Appian systems, you should be familiar with the concepts and caveats of distributing Appian first. See High Availability and Distributed Systems.

There are 5 main steps:

  1. Install Appian
  2. Update Topology
  3. Remove Checkpoint Scheduling Changes
  4. Set Up Shared Files and Folders
  5. Start Appian

Requirements

  • Linux operating systems - High availability is not available for Windows operating systems.
  • Required ports - All of the servers should be able to connect to each other over the required ports.
  • Shared file storage - All servers involved in a high-availability configuration need to be able to read and write the same files.

Architectural Overview

These instructions provide the necessary steps to set up a highly-available system with the recommended levels of redundancy. The below diagram represents this configuration.

HA Architecture

While the following instructions are specific to running a copy of all of Appian's components on every server, you can modify the instructions where necessary to match your actual desired configuration so long as all major components of your Appian system are replicated in structure and content in the redundant systems, with the exception of the Appian Data Server. If your Appian system is distributed among multiple servers, you will need to recreate that configuration for your redundant systems as well. This means if you have Appian distributed across two different servers, each redundant system will need two servers to mirror that distribution (for a total of six servers).

1. Install Appian

Install Appian on three Linux servers

Be sure to install the same version of Appian on all three servers, including any hotfixes for that version.

2. Update Topology

Update the appian-topology.xml files on each server to include the other servers using the example below, replacing the listed machine names with the hostnames of your servers. The topology files must be identical across all servers.

<topology port="5000">
  <server host="machine1.example.com">
    <engine name="forums"/>
    <engine name="notify"/>
    <engine name="notify-email"/>
    <engine name="channels"/>
    <engine name="content"/>
    <engine name="collaboration-statistics"/>
    <engine name="personalization"/>
    <engine name="portal"/>
    <engine name="process-design"/>
    <engine name="process-analytics0"/>
    <engine name="process-analytics1"/>
    <engine name="process-analytics2"/>
    <engine name="process-execution0"/>
    <engine name="process-execution1"/>
    <engine name="process-execution2"/>
  </server>
  <server host="machine2.example.com">
    <engine name="forums"/>
    <engine name="notify"/>
    <engine name="notify-email"/>
    <engine name="channels"/>
    <engine name="content"/>
    <engine name="collaboration-statistics"/>
    <engine name="personalization"/>
    <engine name="portal"/>
    <engine name="process-design"/>
    <engine name="process-analytics0"/>
    <engine name="process-analytics1"/>
    <engine name="process-analytics2"/>
    <engine name="process-execution0"/>
    <engine name="process-execution1"/>
    <engine name="process-execution2"/>
  </server>
  <server host="machine3.example.com">
    <engine name="forums"/>
    <engine name="notify"/>
    <engine name="notify-email"/>
    <engine name="channels"/>
    <engine name="content"/>
    <engine name="collaboration-statistics"/>
    <engine name="personalization"/>
    <engine name="portal"/>
    <engine name="process-design"/>
    <engine name="process-analytics0"/>
    <engine name="process-analytics1"/>
    <engine name="process-analytics2"/>
    <engine name="process-execution0"/>
    <engine name="process-execution1"/>
    <engine name="process-execution2"/>
  </server>
  <search-cluster>
    <search-server host="machine1.example.com"/>
    <search-server host="machine2.example.com"/>
    <search-server host="machine3.example.com"/>
  </search-cluster>
  <data-server-cluster>
    <data-server host="machine1.example.com" port="5400" rts-count="1"/>
  </data-server-cluster>
  <kafkaCluster>
    <broker host="machine1.example.com" port="9092"/>
    <broker host="machine2.example.com" port="9092"/>
    <broker host="machine3.example.com" port="9092"/>
  </kafkaCluster>
  <zookeeperCluster>
    <zookeeper host="machine1.example.com" port="2181"/>
    <zookeeper host="machine2.example.com" port="2181"/>
    <zookeeper host="machine3.example.com" port="2181"/>
  </zookeeperCluster>
</topology>

3. Remove Checkpoint Scheduling Changes

Remove any checkpointing scheduling configurations you might have made in custom.properties. In a high-availability configuration, the default checkpointing configurations are recommended.

4. Set Up Shared Files and Folders

  1. Copy the following files from one of the servers to the same location on both other servers. These files must be the same across all servers.
    • <APPIAN_HOME>/conf/appian.sec
    • <APPIAN_HOME>/conf/appian-topology.xml
    • <APPIAN_HOME>/conf/custom.properties
    • <APPIAN_HOME>/services/conf/service_manager.conf
  2. Share the following directories across all servers.
    • APPIAN_HOME/_admin/accdocs1/
    • APPIAN_HOME/_admin/accdocs2/
    • APPIAN_HOME/_admin/accdocs3/
    • APPIAN_HOME/_admin/mini/
    • APPIAN_HOME/_admin/models/
    • APPIAN_HOME/_admin/plugins/
    • APPIAN_HOME/_admin/process_notes/
    • APPIAN_HOME/_admin/search/
    • APPIAN_HOME/_admin/shared/
    • APPIAN_HOME/server/archived-process/
    • APPIAN_HOME/server/channels/gw1/
    • APPIAN_HOME/server/collaboration/gw1/
    • APPIAN_HOME/server/forums/gw1/
    • APPIAN_HOME/server/msg/
    • APPIAN_HOME/server/notifications/gw1/
    • APPIAN_HOME/server/personalization/gw1/
    • APPIAN_HOME/server/portal/gw1/
    • APPIAN_HOME/server/process/analytics/0000/gw1/
    • APPIAN_HOME/server/process/analytics/0001/gw1/
    • APPIAN_HOME/server/process/analytics/0002/gw1/
    • APPIAN_HOME/server/process/design/gw1/
    • APPIAN_HOME/server/process/exec/00/gw1/
    • APPIAN_HOME/server/process/exec/01/gw1/
    • APPIAN_HOME/server/process/exec/02/gw1/
  3. Create the following directories on network storage shared by all of the severs, replacing the listed machine names with the hostnames of your servers.
    • APPIAN_HOME/shared-logs/machine1.example.com/
    • APPIAN_HOME/shared-logs/machine2.example.com/
    • APPIAN_HOME/shared-logs/machine3.example.com/
  4. On each server, link the APPIAN_HOME/logs/ directory to the corresponding network storage directory from the previous step.

  5. On each server, create the following directories and link them to corresponding network storage directories from the previous steps.
    • APPIAN_HOME/shared-logs/machine1.example.com/
    • APPIAN_HOME/shared-logs/machine2.example.com/
    • APPIAN_HOME/shared-logs/machine3.example.com/

5. Start Appian

Following the directions in Starting and Stopping Appian, start each instance of a component before moving onto the next component.

5.1 Start Appian Services

  1. Execute APPIAN_HOME/services/bin/start.sh -p <password> -s all on Server #1
  2. Execute APPIAN_HOME/services/bin/start.sh -p <password> -s all on Server #2
  3. Execute APPIAN_HOME/services/bin/start.sh -p <password> -s all on Server #3

Do not wait for the start script to complete on the first server before running it on servers 2 and 3. The first script will not finish until at least two servers have been started.

5.2 Start Data Server

  1. Execute APPIAN_HOME/data-server/bin/start.sh on Server #1

5.3 Start Search Server

  1. Execute APPIAN_HOME/search-server/bin/start.sh on Server #1
  2. Execute APPIAN_HOME/search-server/bin/start.sh on Server #2
  3. Execute APPIAN_HOME/search-server/bin/start.sh on Server #3

5.4 Start Application Server

  1. Execute APPIAN_HOME/tomcat/apache-tomcat/bin/start-appserver.sh on Server #1
  2. Execute APPIAN_HOME/tomcat/apache-tomcat/bin/start-appserver.sh on Server #2
  3. Execute APPIAN_HOME/tomcat/apache-tomcat/bin/start-appserver.sh on Server #3
FEEDBACK