Sample configuration: Server consolidation

The following configuration has a complex eight-node cluster running multiple applications and large databases. The database servers, LargeServer1, LargeServer2, and LargeServer3, are enterprise systems. The middle-tier servers running multiple applications are MedServer1, MedServer2, MedServer3, MedServer4, and MedServer5.

In this configuration, the database zone (system zone 0) can handle a maximum of two failures. Each server has Limits to support a maximum of three database service groups. The application zone has excess capacity built into each server.

The servers running the application groups specify Limits to support one database, even though the application groups do not run prerequisites. This allows a database to fail over across system zones and run on the least-loaded server in the application zone.

include "types.cf"

cluster SGWM-demo (

)

system LargeServer1 (

Capacity = 200

Limits = { ShrMemSeg=15, Semaphores=30, Processors=18 }

LoadWarningLevel = 80

LoadTimeThreshold = 900

)

system LargeServer2 (

Capacity = 200

Limits = { ShrMemSeg=15, Semaphores=30, Processors=18 }

LoadWarningLevel=80

LoadTimeThreshold=900

)

system LargeServer3 (

Capacity = 200

Limits = { ShrMemSeg=15, Semaphores=30, Processors=18 }

LoadWarningLevel=80

LoadTimeThreshold=900

)

system MedServer1 (

Capacity = 100

Limits = { ShrMemSeg=5, Semaphores=10, Processors=6 }

)

system MedServer2 (

Capacity = 100

Limits = { ShrMemSeg=5, Semaphores=10, Processors=6 }

)

system MedServer3 (

Capacity = 100

Limits = { ShrMemSeg=5, Semaphores=10, Processors=6 }

)

system MedServer4 (

Capacity = 100

Limits = { ShrMemSeg=5, Semaphores=10, Processors=6 }

)

system MedServer5 (

Capacity = 100

Limits = { ShrMemSeg=5, Semaphores=10, Processors=6 }

)

group Database1 (

SystemList = { LargeServer1, LargeServer2, LargeServer3,

MedServer1, MedServer2, MedServer3, MedServer4, MedServer5 }

SystemZones = { LargeServer1=0, LargeServer2=0, LargeServer3=0,

MedServer1=1, MedServer2=1, MedServer3=1, MedServer4=1,

MedServer5=1 }

AutoStartPolicy = Load

AutoStartList = { LargeServer1, LargeServer2, LargeServer3 }

FailOverPolicy = Load

Load = 100

Prerequisites = { ShrMemSeg=5, Semaphores=10, Processors=6 }

)

group Database2 (

SystemList = { LargeServer1, LargeServer2, LargeServer3,

MedServer1, MedServer2, MedServer3, MedServer4, MedServer5 }

SystemZones = { LargeServer1=0, LargeServer2=0, LargeServer3=0,

MedServer1=1, MedServer2=1, MedServer3=1, MedServer4=1,

MedServer5=1 }

AutoStartPolicy = Load

AutoStartList = { LargeServer1, LargeServer2, LargeServer3 }

FailOverPolicy = Load

Load = 100

Prerequisites = { ShrMemSeg=5, Semaphores=10, Processors=6 }

)

group Database3 (

SystemList = { LargeServer1, LargeServer2, LargeServer3,

MedServer1, MedServer2, MedServer3, MedServer4, MedServer5 }

SystemZones = { LargeServer=0, LargeServer2=0, LargeServer3=0,

MedServer1=1, MedServer2=1, MedServer3=1, MedServer4=1,

MedServer5=1 }

AutoStartPolicy = Load

AutoStartList = { LargeServer1, LargeServer2, LargeServer3 }

FailOverPolicy = Load

Load = 100

Prerequisites = { ShrMemSeg=5, Semaphores=10, Processors=6 }

)

group Application1 (

SystemList = { LargeServer1, LargeServer2, LargeServer3,

MedServer1, MedServer2, MedServer3, MedServer4, MedServer5 }

SystemZones = { LargeServer1=0, LargeServer2=0, LargeServer3=0,

MedServer1=1, MedServer2=1, MedServer3=1, MedServer4=1,

MedServer5=1 }

AutoStartPolicy = Load

AutoStartList = { MedServer1, MedServer2, MedServer3, MedServer4,

MedServer5 }

FailOverPolicy = Load

Load = 50

)

group Application2 (

SystemList = { LargeServer1, LargeServer2, LargeServer3,

MedServer1, MedServer2, MedServer3, MedServer4, MedServer5 }

SystemZones = { LargeServer1=0, LargeServer2=0, LargeServer3=0,

MedServer1=1, MedServer2=1, MedServer3=1, MedServer4=1,

MedServer5=1 }

AutoStartPolicy = Load

AutoStartList = { MedServer1, MedServer2, MedServer3, MedServer4,

MedServer5 }

FailOverPolicy = Load

Load = 50

)

group Application3 (

SystemList = { LargeServer1, LargeServer2, LargeServer3,

MedServer1, MedServer2, MedServer3, MedServer4, MedServer5 }

SystemZones = { LargeServer1=0, LargeServer2=0, LargeServer3=0,

MedServer1=1, MedServer2=1, MedServer3=1, MedServer4=1,

MedServer5=1 }

AutoStartPolicy = Load

AutoStartList = { MedServer1, MedServer2, MedServer3, MedServer4,

MedServer5 }

FailOverPolicy = Load

Load = 50

)

group Application4 (

SystemList = { LargeServer1, LargeServer2, LargeServer3,

MedServer1, MedServer2, MedServer3, MedServer4, MedServer5 }

SystemZones = { LargeServer1=0, LargeServer2=0, LargeServer3=0,

MedServer1=1, MedServer2=1, MedServer3=1, MedServer4=1,

MedServer5=1 }

AutoStartPolicy = Load

AutoStartList = { MedServer1, MedServer2, MedServer3, MedServer4,

MedServer5 }

FailOverPolicy = Load

Load = 50

)

group Application5 (

SystemList = { LargeServer1, LargeServer2, LargeServer3,

MedServer1, MedServer2, MedServer3, MedServer4, MedServer5 }

SystemZones = { LargeServer1=0, LargeServer2=0, LargeServer3=0,

MedServer1=1, MedServer2=1, MedServer3=1, MedServer4=1,

MedServer5=1 }

AutoStartPolicy = Load

AutoStartList = { MedServer1, MedServer2, MedServer3, MedServer4,

MedServer5 }

FailOverPolicy = Load

Load = 50

)

AutoStart operation

Based on the preceding main.cf example, the AutoStart sequence resembles:

Database1 

LargeServer1 

Database2 

LargeServer2 

Database3 

LargeServer3 

Application1 

MedServer1 

Application2 

MedServer2 

Application3 

MedServer3 

Application4 

MedServer4 

Application5 

MedServer5 

Normal operation

The configuration resembles:

Server

AvailableCapacity

CurrentLimits

Online Groups

LargeServer1 

100 

ShrMemSeg=10 

Semaphores=20 

Processors=12 

Database1 

LargeServer2 

100 

ShrMemSeg=10 

Semaphores=20 

Processors=12 

Database2 

LargeServer3 

100 

ShrMemSeg=10 

Semaphores=20 

Processors=12 

Database3 

MedServer1 

50 

ShrMemSeg=5 

Semaphores=10 

Processors=6 

Application1 

MedServer2 

50 

ShrMemSeg=5 

Semaphores=10 

Processors=6 

Application2 

MedServer3 

50 

ShrMemSeg=5 

Semaphores=10 

Processors=6 

Application3 

MedServer4 

50 

ShrMemSeg=5 

Semaphores=10 

Processors=6 

Application4 

MedServer5 

50 

ShrMemSeg=5 

Semaphores=10 

Processors=6 

Application5 

Failure scenario

In the following example, LargeServer3 fails. VCS scans all available systems in the SystemList for the Database3 group for systems in the same SystemZone and identifies systems that meet the group's prerequisites. In this case, LargeServer1 and LargeServer2 meet the required Limits. Database3 is brought online on LargeServer1. This results in the following configuration:

Server

AvailableCapacity

CurrentLimits

Online Groups

LargeServer1 

ShrMemSeg=5 

Semaphores=10 

Processors=6 

Database1 Database3 

LargeServer2 

100 

ShrMemSeg=10 

Semaphores=20 

Processors=12 

Database2 

In this scenario, further failure of either system can be tolerated because each has sufficient Limits available to accommodate the additional service group.

Cascading failure scenario

If the performance of a database is unacceptable with two database groups running on a single server, the SystemZones policy can help expedite performance. Failing over a database group into the application zone has the effect of resetting the group's preferred zone. For example, in the above scenario Database3 was moved to LargeServer1. The administrator could reconfigure the application zone to move two application groups to a single system. The database application can then be switched to the empty application server (MedServer1-MedServer5), which would put Database3 in Zone1 (application zone). If a failure occurs in Database3, the group selects the least-loaded server in the application zone for failover.