1 说明

Policy-Managed是11G的新特性,但是还是不够灵活。在12c中引入了Server Categorization​​服务器分类​​能够通过使用诸如处理器类型、内存和其他识别系统特性等属性来将指定的服务器放到特定的分类中。可以将服务器池放到某个服务器分类中,从而该服务器池中的数据库或者应用程序都会受到服务器分类的约束。

In Oracle Clusterware 12c, you use the policies defined in the cluster configuration policy set for server pool specification and management, and Oracle Clusterware manages the server pools according to the policies in the policy set.

12c中也增强了Policy配置。在Oracle Clusterware 12c中,你使用在服务器池规范和管理的集群配置策略集中定义的策略,Oracle Clusterware根据策略集中的策略管理服务器池。

At any point in time, only one policy is in effect for the cluster. But you can create several different policies, so that you can configure pools of servers with parameters to reflect differences in requirements for the cluster based on business needs or demand, or based on calendar dates or times of the day.

1.1 关于Policy-based cluster and capacity management

Oracle Clusterware allocates and reassigns capacity based on policies you define, enabling faster resource failover and dynamic capacity assignment using policy-based management.

Policy-based cluster and capacity management allows the efficient allocation of different types of applications in the cluster. Various applications can be hosted on a shared infrastructure, being isolated regarding their resource consumption by policies and, therefore, behave as if they were deployed in single-system environments. Policy-managed Oracle RAC databases use policy-based cluster management to provide the required resources for the workloads the database supports.

Oracle Clusterware基于定义的策略分配和重新分配容量,使用基于策略的管理实现更快的资源故障转移和动态容量分配。

Policy-based的集群和容量管理允许在集群中高效地分配不同类型的应用程序。不同的应用程序可以托管在共享的架构上,因为它们使用的资源被策略所隔离,因此,它们的行为就好像它们被部署在单一系统的环境中一样。Policy-managed 的Oracle RAC数据库使用Policy-based的集群管理来为数据库支持的工作负载提供所需的资源。

2 实验-Server Categorization

2.1 环境

我的环境是2个Hub节点,没有Leaf节点。

2.2 查看默认server状态

–节点1

[Expect-le@www.cndba.cn~]$ crsctl status server -f
NAME=rac1
MEMORY_SIZE=5664
CPU_COUNT=2
CPU_CLOCK_RATE=2494
CPU_HYPERTHREADING=0
CPU_EQUIVALENCY=1000
DEPLOYMENT=other
CONFIGURED_CSS_ROLE=hub
RESOURCE_USE_ENABLED=1
SERVER_LABEL=
PHYSICAL_HOSTNAME=
STATE=ONLINE
ACTIVE_POOLS=ora.cndba_pool
STATE_DETAILS=
ACTIVE_CSS_ROLE=hub

–节点2

NAME=rac2
MEMORY_SIZE=5664
CPU_COUNT=2
CPU_CLOCK_RATE=2494
CPU_HYPERTHREADING=0
CPU_EQUIVALENCY=1000
DEPLOYMENT=other
CONFIGURED_CSS_ROLE=hub
RESOURCE_USE_ENABLED=1
SERVER_LABEL=
PHYSICAL_HOSTNAME=
STATE=ONLINE
ACTIVE_POOLS=ora.cndba_pool
STATE_DETAILS=AUTOSTARTING RESOURCES
ACTIVE_CSS_ROLE=hub

2.3 查看默认的Category

[Expect-le@www.cndba.cn~]$ crsctl status category

NAME=ora.hub.category
ACL=owner:root:rwx,pgrp:root:r-x,other::r--
ACTIVE_CSS_ROLE=hub
EXPRESSION=

NAME=ora.leaf.category
ACL=owner:root:rwx,pgrp:root:r-x,other::r--
ACTIVE_CSS_ROLE=leaf
EXPRESSION=

2.4 查看默认Category中的servers

[Expect-le@www.cndba.cn~]$ crsctl status server -category ora.hub.category

NAME=rac1
STATE=ONLINE

NAME=rac2
STATE=ONLINE
[Expect-le@www.cndba.cn~]$ crsctl status server -category ora.leaf.category

[Expect-le@www.cndba.cn ~]$

由于没有leaf节点,所以这里没有server。

2.5 创建新的Category

下面创建两个category:

  • Small:leaf节点 ,内存<2000
  • Big:bub节点,内存>=2000
[Expect-le@www.cndba.cn ~]$ crsctl add category small -attr "EXPRESSION='(MEMORY_SIZE < 2000)'"

-把Category改为leaf节点

[Expect-le@www.cndba.cn ~]$crsctl modify category small -attr”ACTIVE_CSS_ROLE=’leaf’”

[Expect-le@www.cndba.cn ~]$ crsctl add category big -attr "EXPRESSION='(MEMORY_SIZE > 2000) or(MEMORY_SIZE = 2000) '"

2.6 查看新的Category

  • SMALL 分类
[Expect-le@www.cndba.cn ~]$ crsctl status category small

NAME=small
ACL=owner:grid:rwx,pgrp:oinstall:rwx,other::r--
ACTIVE_CSS_ROLE=hub
EXPRESSION=(MEMORY_SIZE < 2000)
  • BIG 分类
[Expect-le@www.cndba.cn ~]$ crsctl status category big

NAME=big
ACL=owner:grid:rwx,pgrp:oinstall:rwx,other::r--
ACTIVE_CSS_ROLE=hub
EXPRESSION=((MEMORY_SIZE > 2000) OR (MEMORY_SIZE = 2000))

2.7 查看自定义的Category中的server

[Expect-le@www.cndba.cn ~]$ crsctl status server -category big

NAME=rac1
STATE=ONLINE

NAME=rac2
STATE=ONLINE

2.8 创建server pool并和Category相关联

[Expect-le@www.cndba.cn ~]$ crsctl add serverpool bigpool -attr "SERVER_CATEGORY='big'"

[Expect-le@www.cndba.cn ~]$ crsctl add serverpool samllpool -attr "SERVER_CATEGORY='small'"

[Expect-le@www.cndba.cn ~]$ crsctl add serverpool testpool -attr "SERVER_CATEGORY='small'"

[Expect-le@www.cndba.cn ~]$ crsctl add serverpool backuppool -attr "SERVER_CATEGORY='big'"

2.9 查看server pool和相关的Category

[Expect-le@www.cndba.cn ~]$ crsctl status serverpool samllpool -f

NAME=samllpool
IMPORTANCE=0
MIN_SIZE=0
MAX_SIZE=-1
SERVER_NAMES=
PARENT_POOLS=
EXCLUSIVE_POOLS=
ACL=owner:grid:rwx,pgrp:oinstall:rwx,other::r--
SERVER_CATEGORY=small
ACTIVE_SERVERS=

[Expect-le@www.cndba.cn ~]$ crsctl status serverpool bigpool -f

NAME=bigpool
IMPORTANCE=0
MIN_SIZE=0
MAX_SIZE=-1
SERVER_NAMES=
PARENT_POOLS=
EXCLUSIVE_POOLS=
ACL=owner:grid:rwx,pgrp:oinstall:rwx,other::r--
SERVER_CATEGORY=big
ACTIVE_SERVERS=

2.10 总结

  1. Server Category通过使用不同的server属性,将不同server放入到指定的category中。
  2. Server pool和category相关联,这样category中的server就可以成为server pool中的成员。
  3. Server pool根据server属性来定义的,而不是server的名称。
  4. Server category提供了一个有效的,自动化机制来管理由不同节点组成的集群。

3 实验-Policy Set配置

3.1 创建两个Policy:DAY_POLICY(白天)和NIGHT_POLICY(晚上)

[Expect-le@www.cndba.cn ~]$ crsctl add policy day_policy -attr "DESCRIPTION='the day policy'"

[Expect-le@www.cndba.cn ~]$ crsctl add policy night_policy -attr "DESCRIPTION='the night policy'"

3.2 设置SERVER_POOL_NAMES Policy Set

定义Policy Set所包含的SERVER POOL

[Expect-le@www.cndba.cn ~]$ crsctl modify policyset -attr "SERVER_POOL_NAMES='Free backuppool bigpool smallpool testpool '" -ksp

3.3 设置Server Pool属性

  • day_policy
crsctl modify serverpool bigpool -attr "MAX_SIZE=3,MIN_SIZE=1,SERVER_CATEGORY=big" -policy day_policy
crsctl modify serverpool smallpool -attr "MAX_SIZE=2,MIN_SIZE=1,SERVER_CATEGORY=small" -policy day_policy
crsctl modify serverpool testpool -attr "MAX_SIZE=0,MIN_SIZE=0" -policy day_policy
crsctl modify serverpool backuppool -attr "MAX_SIZE=0,MIN_SIZE=0" -policy day_policy
  • night_policy
crsctl modify serverpool bigpool -attr "MAX_SIZE=2,MIN_SIZE=1,SERVER_CATEGORY=big" -policy night_policy
crsctl modify serverpool smallpool -attr "MAX_SIZE=1,MIN_SIZE=1,SERVER_CATEGORY=small" -policy night_policy
crsctl modify serverpool testpool -attr "MAX_SIZE=1,MIN_SIZE=1,SERVER_CATEGORY=small" -policy night_policy
crsctl modify serverpool backuppool -attr "MAX_SIZE=1,MIN_SIZE=1,SERVER_CATEGORY=big" -policy night_policy

3.4 查看Policy

  • Day policy
[Expect-le@www.cndba.cn ~]$ crsctl status policy day_policy

POLICY
NAME=day_policy
DESCRIPTION=the day policy
SERVERPOOL
NAME=Free
IMPORTANCE=0
MAX_SIZE=-1
MIN_SIZE=0
SERVER_CATEGORY=
SERVER_NAMES=
SERVERPOOL
NAME=backuppool
IMPORTANCE=0
MAX_SIZE=0
MIN_SIZE=0
SERVER_CATEGORY=big
SERVER_NAMES=
SERVERPOOL
NAME=bigpool
IMPORTANCE=0
MAX_SIZE=3
MIN_SIZE=1
SERVER_CATEGORY=big
SERVER_NAMES=
SERVERPOOL
NAME=ora.cndba_pool
IMPORTANCE=0
MAX_SIZE=2
MIN_SIZE=0
SERVER_CATEGORY=ora.hub.category
SERVER_NAMES=
SERVERPOOL
NAME=smallpool IMPORTANCE=0 MAX_SIZE=2 MIN_SIZE=1
SERVER_CATEGORY=big
SERVER_NAMES=
SERVERPOOL
NAME=testpool IMPORTANCE=0 MAX_SIZE=0 MIN_SIZE=0
SERVER_CATEGORY=big
SERVER_NAMES=
  • night policy
[Expect-le@www.cndba.cn ~]$ crsctl status policy night_policy

POLICY
NAME=night_policy
DESCRIPTION=the night policy
SERVERPOOL
NAME=Free
IMPORTANCE=0
MAX_SIZE=-1
MIN_SIZE=0
SERVER_CATEGORY=
SERVER_NAMES=
SERVERPOOL
NAME=backuppool
IMPORTANCE=0
MAX_SIZE=1
MIN_SIZE=1
SERVER_CATEGORY=big
SERVER_NAMES=
SERVERPOOL
NAME=bigpool
IMPORTANCE=0
MAX_SIZE=2
MIN_SIZE=1
SERVER_CATEGORY=big
SERVER_NAMES=
SERVERPOOL
NAME=ora.cndba_pool
IMPORTANCE=0
MAX_SIZE=2
MIN_SIZE=0
SERVER_CATEGORY=ora.hub.category
SERVER_NAMES=
SERVERPOOL
NAME=smallpool
IMPORTANCE=0
MAX_SIZE=1
MIN_SIZE=1
SERVER_CATEGORY=big
SERVER_NAMES=
SERVERPOOL
NAME=testpool IMPORTANCE=0 MAX_SIZE=1 MIN_SIZE=1
SERVER_CATEGORY=big
SERVER_NAMES=

3.5 激活Policy

根据之前定义的Policy,Oracle会将不同的Servers放入不容的server pool中。

激活day_policy

[Expect-le@www.cndba.cn ~]$ crsctl modify policyset -attr "LAST_ACTIVATED_POLICY='day_policy'"

查看day_policy激活状态

[Expect-le@www.cndba.cn ~]$ crsctl stat serverpool

NAME=Free
ACTIVE_SERVERS=

NAME=Generic
ACTIVE_SERVERS=

NAME=backuppool
ACTIVE_SERVERS=

NAME=bigpool ACTIVE_SERVERS=rac1 rac2

NAME=ora.cndba
ACTIVE_SERVERS=

NAME=samllpool
ACTIVE_SERVERS=

NAME=smallpool
ACTIVE_SERVERS=

NAME=testpool
ACTIVE_SERVERS=

由于testpool和backuppool还没有分配server,所以没有ACTIVE_SERVERS

激活night_policy

[Expect-le@www.cndba.cn ~]$ crsctl modify policyset -attr "LAST_ACTIVATED_POLICY='night_policy'"

查看night_policy激活状态

[Expect-le@www.cndba.cn ~]$ crsctl stat serverpool

NAME=Free
ACTIVE_SERVERS=

NAME=Generic
ACTIVE_SERVERS=

NAME=backuppool ACTIVE_SERVERS=rac2 NAME=bigpool ACTIVE_SERVERS=rac1

NAME=ora.cndba
ACTIVE_SERVERS=

NAME=samllpool
ACTIVE_SERVERS=

NAME=smallpool
ACTIVE_SERVERS=

NAME=testpool
ACTIVE_SERVERS=

3.6 修改Policy

如:修改night_policy,将MAX_SIZE改为1

crsctl modify serverpool bigpool -attr "MAX_SIZE=1,MIN_SIZE=1,SERVER_CATEGORY=big" -policy night_policy

–重新激活即可

crsctl modify policyset -attr "LAST_ACTIVATED_POLICY='night_policy'"
``
## 3.7 总结
1. 可以根据业务和应用程序的需要来配置相应的Policy。在不同的时间,启用不同的policy以满足业务的需求。

2. 当启用某个policy,那么相应的server pool的配置也会随之变化。

3. Policy配置可以动态修改