Assume that you have a four-node cluster that is used by three different applications, app1, app2, and app3, and that you have created three server pools, pool1, pool2, and pool3. You configure the server pools such that each application is assigned to run in its own server pool, and that app1 wants to have two servers, and app2 and app3 each want one server. The server pool configurations are as follows:
$ crsctl status serverpool pool1 -p NAME=pool1 IMPORTANCE=0 MIN_SIZE=2 MAX_SIZE=2 SERVER_NAMES= PARENT_POOLS= EXCLUSIVE_POOLS= ACL=owner:mjk:rwx,pgrp:g900:rwx,other::r-- SERVER_CATEGORY= $ crsctl status serverpool pool2 -p NAME=pool2 IMPORTANCE=0 MIN_SIZE=1 MAX_SIZE=1 SERVER_NAMES= PARENT_POOLS= EXCLUSIVE_POOLS= ACL=owner:mjk:rwx,pgrp:g900:rwx,other::r-- SERVER_CATEGORY= $ crsctl status serverpool pool3 -p NAME=pool3 IMPORTANCE=0 MIN_SIZE=1 MAX_SIZE=1 SERVER_NAMES= PARENT_POOLS= EXCLUSIVE_POOLS= ACL=owner:mjk:rwx,pgrp:g900:rwx,other::r-- SERVER_CATEGORY=
Note:
The crsctl status serverpool
command shown in the preceding examples only functions if you created the server pools using CRSCTL.
This configuration, however, does not consider the fact that some applications need server time at different times of the day, week, or month. Email applications, for example, typically use more resources during business hours and use less resources at night and on weekends.
Further assume that app1 requires two servers during business hours, but only requires one server at night and does not require any servers on weekends. At the same time, app2 and app3 each require one server during business hours, while at night, app2 requires two servers and app3 requires one. On the weekend, app2 requires one server and app3 requires three. This scenario suggests three configurations that you must configure for the cluster:
Day Time:
Night Time:
Weekend:
Policy Set Creation
Given these assumptions, run the crsctl create policyset
command to create a policy set with a single policy named Default
, which reflects the configuration displayed by the crsctl status serverpool
command. You can use the Default
policy to create other policies to meet the needs assumed in this example. The crsctl create policyset
command creates a text file similar to Example 3-1.
Example 3-1 Policy Set Text File
SERVER_POOL_NAMES=Free pool1 pool2 pool3 POLICY NAME=Default SERVERPOOL NAME=pool1 IMPORTANCE=0 MAX_SIZE=2 MIN_SIZE=2 SERVER_CATEGORY= SERVERPOOL NAME=pool2 IMPORTANCE=0 MAX_SIZE=1 MIN_SIZE=1 SERVER_CATEGORY= SERVERPOOL NAME=pool3 IMPORTANCE=0 MAX_SIZE=1 MIN_SIZE=1 SERVER_CATEGORY=
Policy Modification
To modify the preceding policy set to meet the needs assumed in this example, edit the text file to define policies for the three scenarios discussed previously, by changing the name of the policy from Default
to DayTime
. Then, copy the policy and paste it twice to form two subsequent policies, which you name NightTime
and Weekend
, as shown in Example 3-2.
Example 3-2 Modified Policy Set Text File
SERVER_POOL_NAMES=Free pool1 pool2 pool3 POLICY NAME=DayTime SERVERPOOL NAME=pool1 IMPORTANCE=0 MAX_SIZE=2 MIN_SIZE=2 SERVER_CATEGORY= SERVERPOOL NAME=pool2 IMPORTANCE=0 MAX_SIZE=1 MIN_SIZE=1 SERVER_CATEGORY= SERVERPOOL NAME=pool3 IMPORTANCE=0 MAX_SIZE=1 MIN_SIZE=1 SERVER_CATEGORY= POLICY NAME=NightTime SERVERPOOL NAME=pool1 IMPORTANCE=0 MAX_SIZE=1 MIN_SIZE=1 SERVER_CATEGORY= SERVERPOOL NAME=pool2 IMPORTANCE=0 MAX_SIZE=2 MIN_SIZE=2 SERVER_CATEGORY= SERVERPOOL NAME=pool3 IMPORTANCE=0 MAX_SIZE=1 MIN_SIZE=1 SERVER_CATEGORY= POLICY NAME=Weekend SERVERPOOL NAME=pool1 IMPORTANCE=0 MAX_SIZE=0 MIN_SIZE=0 SERVER_CATEGORY= SERVERPOOL NAME=pool2 IMPORTANCE=0 MAX_SIZE=1 MIN_SIZE=1 SERVER_CATEGORY= SERVERPOOL NAME=pool3 IMPORTANCE=0 MAX_SIZE=3 MIN_SIZE=3 SERVER_CATEGORY=
Notice that, in addition to changing the names of the individual policies, the MAX_SIZE
and MIN_SIZE
policy attributes for each of the server pools in each of the policies were also modified according to the needs of the applications.
The following command registers the policy set stored in a file with Oracle Clusterware:
$ crsctl modify policyset -file file_name
You can achieve the same results as shown in the previous examples by editing the Default
policy set, as a whole, using the crsctl modify policyset
command, and by using the crsctl modify serverpool
command to change individual server pool attributes for a specific policy.
The following command modifies the Default
policy set to manage the three server pools:
$ crsctl modify policyset –attr "SERVER_POOL_NAMES=Free pool1 pool2 pool3"
The following commands add the three policies:
$ crsctl add policy DayTime $ crsctl add policy NightTime $ crsctl add policy Weekend
The following commands configure the three server pools according to the requirements of the policies:
$ crsctl modify serverpool pool1 -attr "MIN_SIZE=2,MAX_SIZE=2" -policy DayTime $ crsctl modify serverpool pool1 -attr "MIN_SIZE=1,MAX_SIZE=1" -policy NightTime $ crsctl modify serverpool pool1 -attr "MIN_SIZE=0,MAX_SIZE=0" -policy Weekend $ crsctl modify serverpool pool2 -attr "MIN_SIZE=1,MAX_SIZE=1" -policy DayTime $ crsctl modify serverpool pool2 -attr "MIN_SIZE=2,MAX_SIZE=2" -policy NightTime $ crsctl modify serverpool pool2 -attr "MIN_SIZE=1,MAX_SIZE=1" -policy Weekend $ crsctl modify serverpool pool3 -attr "MIN_SIZE=1,MAX_SIZE=1" -policy DayTime $ crsctl modify serverpool pool3 -attr "MIN_SIZE=1,MAX_SIZE=1" -policy NightTime $ crsctl modify serverpool pool3 -attr "MIN_SIZE=3,MAX_SIZE=3" -policy Weekend
There are now three distinct policies to manage the server pools to accommodate the requirements of the three applications.
Policy Activation
The policy set is now configured and controlling the three server pools with three different policies. You can activate policies when necessary, prompting Oracle Clusterware to reconfigure a server pool according to each policy's configuration.
The following command activates the DayTime
policy:
$ crsctl modify policyset -attr "LAST_ACTIVATED_POLICY=DayTime"
The current status of the resources is as follows:
$ crsctl status resource -t -------------------------------------------------------------------------------- Name Target State Server State details -------------------------------------------------------------------------------- Cluster Resources -------------------------------------------------------------------------------- app1 1 ONLINE ONLINE mjk_has3_2 STABLE 2 ONLINE ONLINE mjk_has3_0 STABLE app2 1 ONLINE ONLINE mjk_has3_1 STABLE app3 1 ONLINE ONLINE mjk_has3_3 STABLE
The status of the server pools is as follows:
$ crsctl stat serverpool NAME=Free ACTIVE_SERVERS= NAME=Generic ACTIVE_SERVERS= NAME=pool1 ACTIVE_SERVERS=mjk_has3_0 mjk_has3_2 NAME=pool2 ACTIVE_SERVERS=mjk_has3_1 NAME=pool3 ACTIVE_SERVERS=mjk_has3_3
The servers are allocated according to the DayTime
policy and the applications run on their respective servers.
The following command activates the Weekend
policy (remember, because the server pools have different sizes, as servers move between server pools, some applications will be stopped and others will be started):
$ crsctl modify policyset -attr "LAST_ACTIVATED_POLICY=Weekend"
CRS-2673: Attempting to stop 'app1' on 'mjk_has3_2'
CRS-2673: Attempting to stop 'app1' on 'mjk_has3_0'
CRS-2677: Stop of 'app1' on 'mjk_has3_0' succeeded
CRS-2672: Attempting to start 'app3' on 'mjk_has3_0'
CRS-2677: Stop of 'app1' on 'mjk_has3_2' succeeded
CRS-2672: Attempting to start 'app3' on 'mjk_has3_2'
CRS-2676: Start of 'app3' on 'mjk_has3_2' succeeded
CRS-2676: Start of 'app3' on 'mjk_has3_0' succeeded
The current status of the resources is as follows:
$ crsctl status resource -t -------------------------------------------------------------------------------- Name Target State Server State details -------------------------------------------------------------------------------- Cluster Resources -------------------------------------------------------------------------------- app1 1 ONLINE OFFLINE STABLE 2 ONLINE OFFLINE STABLE app2 1 ONLINE ONLINE mjk_has3_1 STABLE app3 1 ONLINE ONLINE mjk_has3_0 STABLE 2 ONLINE ONLINE mjk_has3_2 STABLE 3 ONLINE ONLINE mjk_has3_3 STABLE --------------------------------------------------------------------------------
The status of the server pools is as follows:
$ crsctl status serverpool NAME=Free ACTIVE_SERVERS= NAME=Generic ACTIVE_SERVERS= NAME=pool1 ACTIVE_SERVERS= NAME=pool2 ACTIVE_SERVERS=mjk_has3_1 NAME=pool3 ACTIVE_SERVERS=mjk_has3_0 mjk_has3_2 mjk_has3_3
Using the crsctl modify policyset
command, Oracle Clusterware changed server pool configuration, moved servers according to the requirements of the policy, and stopped and started the applications.
See Also:
Oracle Clusterware Control (CRSCTL) Utility Reference for complete details on using the CRSCTL commands shown in this example