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
|
0
|
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.
|