Clustering Overview
A cluster is a group of servers (independent computer systems), working together as a unified computing resource. An iCore system can be distributed over multiple such servers, forming a clustered iCore system. There are two main reasons for creating a clustered system:
- Improving performance and/or
- increasing fault-tolerance and minimizing downtime.
An iCore system consists of one or more instances of the iCore Process Server (iCPS) as well as several external services, such as:
- Microsoft SQL Server
- Microsoft Message Queueing
- File storage
It is possible to also cluster external resources, however this topic specifically describes the clustering of iCore systems.
Using clustering to improve performance
The performance increase in a clustered iCore system is an effect of load balancing, which means that the workload (Jobs) are distributed among the servers in the cluster. The load balancing can be fine-tuned, for example by deciding what type of Jobs can run on which server (see Application pools). Jobs executed in parallel are distributed evenly, unless otherwise configured.
The biggest performance gain from clustering is achieved when running many computationally intensive Jobs. Since all iCore servers in a clustered system still share the same database instance and Node storage, I/O intensive Jobs may not result in a performance gain.
Using clustering to increase fault-tolerance
If your goal is to allow a server application to be reliably utilized with a minimum of down-time, you can use the following setup:
- A clustered iCore system
If a server fails in a so-called “high availability cluster” (a HA cluster or fail-over cluster), another server immediately takes over its responsibilities thereby minimizing down-time. Fail-over is automatically supported when an iCore system is configured as a clustered system, there is no need for additional clustering software (such as Microsoft Windows Cluster services). - Clustered external resources
To eliminate all single points of failure, the external resources on which the iCore system depends must also be fault-tolerant. For example, the Microsoft SQL Server, Microsoft Message Queueing Service and File storage services could be installed on a Windows Cluster consisting of multiple servers, to ensure that these services also have a high availability.
The SQL Server Database
Every iCore system uses a single Microsoft SQL Server database. If iCore is installed as a high-availability cluster it is recommended to also configure the Microsoft SQL Server instance as a clustered service. If the database becomes unavailable to the iCore servers, most functions will stop working until the database goes online again. Locally processed system Events will however continue to execute, and can be used for example to trigger alarms if this situation occurs.
On a system with a high throughput of Events and Jobs the database server is heavily utilized, which means that the server(s) on which the SQL Server resides will experience heavy disk I/O as well as high CPU usage. Performance gains can be realized by optimizing this server for a heavy transactional database workload.
"Hot" or "Cold" iCore Process Server
iCPS can be clustered “Hot”(Active) as well as “Cold”(Passive).
- “Hot” means that the computer is active all the time and shares the workload with all the other iCPSs in the same iCore System. The workload of an individual iCPS in a cluster is determined by the amount of worker processes configured on the server in the iCore Administrator. iCore is working with load balancing and will get the most performance possible out of the physical servers.
- A “Cold” iCPS is never active at the same time as the original iCPS. If the original iCPS is out of order, you may switch the “Cold” iCPS to active. This is done manually in the iCore Administrator. Both servers share the same external resources of database, MSMQ and disk. All the settings for an iCore System is stored in the database or on the shared common disk.
See Also
Administrator
Technical architecture & Runtime
Inter-server communication
Setting up a clustered iCore system, example