【博客文章2021】Oracle RAC的策略管理的集群和策略管理的数据库
Author: Bo Tang
1. 策略管理的集群的Category:
只要是Flex集群,就有以下默认两个Category:
[grid@station12 ocrbackup]$ 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=
|
查看这两个Category里包含的节点:
[grid@station11 ~]$ crsctl status server -category ora.hub.category NAME=station11 STATE=ONLINE NAME=station12 STATE=ONLINE [grid@station11 ~]$ crsctl status server -category ora.leaf.category
|
2. 策略管理的集群的策略集:
策略集管理Serverpool,默认只有一个策略集管理着一个策略“Current”,“Current”策略管理着“Free”和“Generic”两个Serverpool:
LAST_ACTIVATED_POLICY为空,说明没有用户定义的策略生效过。 下面我们写一个用于生成策略集的文本文件policysetfile.txt,这个文件将用于更新默认的策略集。该文本文件中规定什么服务器当作hub用,什么服务器当作leaf用。该策略集包含两个策略:“day”和“night”,管理着Free、ora.racdbpool和ora.rep这三个Serverpool。 policysetfile.txt:
SERVER_POOL_NAMES=Free ora.racdbpool ora.rep POLICY NAME=day DESCRIPTION=The day policy SERVERPOOL NAME=ora.racdbpool IMPORTANCE=10 MAX_SIZE=5 MIN_SIZE=2 SERVER_CATEGORY=ora.hub.category SERVERPOOL NAME=ora.rep IMPORTANCE=0 MAX_SIZE=2 MIN_SIZE=1 SERVER_CATEGORY=ora.hub.category POLICY NAME=night DESCRIPTION=The night policy SERVERPOOL NAME=ora.racdbpool IMPORTANCE=0 MAX_SIZE=2 MIN_SIZE=1 SERVER_CATEGORY=ora.hub.category SERVERPOOL NAME=ora.rep IMPORTANCE=5 MAX_SIZE=2 MIN_SIZE=1 SERVER_CATEGORY=ora.hub.category
|
查看一下crsctl modify命令的帮助,准备使用上述的policysetfile.txt改动策略集:
[grid@station11 ~]$ crsctl modify Usage: crsctl modify {resource|type|serverpool|policy|policyset} where name Name of the CRS entity options Options to be passed to the modify command See individual CRS entity help for more details crsctl modify wallet -type where wallet_type Type of wallet i.e. , APPQOSADMIN, APPQOSUSER, APPQOSDB, MGMTDB, OSUSER or CVUDB. options Options to be passed to the modify command crsctl modify policyset {-attr "=[,...]" | -file } [-ksp] [-f] where attrName Name of the policy set attribute, e.g. SERVER_POOL_NAMES, etc. value Value of the attribute fileName Name of text file containing policy set definition -ksp Keep server pools in the system -f Force option crsctl modify category -attr "=[,...]" [-f] [-i] where categoryName Name of server category to be modified attrName Attribute name value Attribute value -f Force option -i Fail if request cannot be processed immediately
|
修改策略集:
[grid@station11 ~]crsctl modify policyset -file policysetfile.txt
|
查看修改过的策略集,并激活它:
[grid@station11 ~]$ crsctl status policyset ACL=owner:grid:rwx,pgrp:oinstall:rwx,other::r-- LAST_ACTIVATED_POLICY= SERVER_POOL_NAMES=Free ora.racdbpool ora.rep POLICY NAME=Current DESCRIPTION=This policy is built-in and managed automatically to reflect current configuration SERVERPOOL NAME=Free IMPORTANCE=0 MAX_SIZE=-1 MIN_SIZE=0 SERVER_CATEGORY= SERVER_NAMES= SERVERPOOL NAME=Generic IMPORTANCE=0 MAX_SIZE=-1 MIN_SIZE=0 SERVER_CATEGORY= SERVER_NAMES= POLICY NAME=day DESCRIPTION=The day policy SERVERPOOL NAME=Free IMPORTANCE=0 MAX_SIZE=-1 MIN_SIZE=0 SERVER_CATEGORY= SERVER_NAMES= SERVERPOOL NAME=ora.racdbpool IMPORTANCE=10 MAX_SIZE=5 MIN_SIZE=2 SERVER_CATEGORY=ora.hub.category SERVER_NAMES= SERVERPOOL NAME=ora.rep IMPORTANCE=0 MAX_SIZE=2 MIN_SIZE=1 SERVER_CATEGORY=ora.hub.category SERVER_NAMES= POLICY NAME=night DESCRIPTION=The night policy SERVERPOOL NAME=Free IMPORTANCE=0 MAX_SIZE=-1 MIN_SIZE=0 SERVER_CATEGORY= SERVER_NAMES= SERVERPOOL NAME=ora.racdbpool IMPORTANCE=0 MAX_SIZE=2 MIN_SIZE=1 SERVER_CATEGORY=ora.hub.category SERVER_NAMES= SERVERPOOL NAME=ora.rep IMPORTANCE=5 MAX_SIZE=2 MIN_SIZE=1 SERVER_CATEGORY=ora.hub.category SERVER_NAMES= [grid@station11 ~]$ crsctl modify policyset -attr "LAST_ACTIVATED_POLICY=day" [grid@station11 ~]$
|
3. 策略管理的集群的Serverpool:
Free池和Generic池是不可删除的也不需要创建,其他的Serverpool是policysetfile.txt创建的:
[oracle@station11 ~]$ srvctl config srvpool Server pool name: Free Importance: 0, Min: 0, Max: -1 Candidate server names: Server pool name: Generic Importance: 0, Min: 0, Max: -1 Candidate server names: Server pool name: ora.racdbpool Importance: 10, Min: 2, Max: 5 Candidate server names: station11,station12 Server pool name: ora.rep Importance: 0, Min: 1, Max: 2 Candidate server names: station11,station12
|
[oracle@station11 ~]$ crsctl status serverpool -p NAME=Free IMPORTANCE=0 MIN_SIZE=0 MAX_SIZE=-1 SERVER_NAMES= PARENT_POOLS= EXCLUSIVE_POOLS= ACL=owner:oracle:rwx,pgrp:oinstall:rwx,other::r-x NAME=Generic IMPORTANCE=0 MIN_SIZE=0 MAX_SIZE=-1 SERVER_NAMES= PARENT_POOLS= EXCLUSIVE_POOLS= ACL=owner:oracle:r-x,pgrp:oinstall:r-x,other::r-x NAME=ora.racdbpool IMPORTANCE=10 MIN_SIZE=2 MAX_SIZE=5 SERVER_NAMES=station11 station12 PARENT_POOLS= EXCLUSIVE_POOLS= ACL=owner:oracle:rwx,pgrp:oinstall:rwx,other::r-- NAME=ora.rep IMPORTANCE=0 MIN_SIZE=1 MAX_SIZE=2 SERVER_NAMES=station11 station12 PARENT_POOLS= EXCLUSIVE_POOLS= ACL=owner:oracle:rwx,pgrp:oinstall:rwx,other::r--
|
DBA可以指定数据库资源运行在哪个服务器池(排除 generic or free)。Oracle Clusterware 负责将数据库资源根据服务器池而放在某一台或某几台服务器上运行。 服务器以如下次序被分配入服务器池: Oralce Clusterware 使用服务器池的重要性决定分配服务器次序: a. 按重要性次序分配服务器给所有服务器池,直到满足服务器池的最小数目要求 b. 按重要性次序分配服务器给服务器池,直到它们满足服务器池的最大数目要求 c. 任何剩下的服务器加入FREE服务器池 数据库可以和1个服务器池关联(而不是特定的节点集)。服务器池决定资源(数据库、服务甚至第三方应用程序)所需的最小和最大服务器数目。数据库实例将运行在已被分配给服务器池的服务器上。使用min_size 决定数据库必需运行在哪些服务器,以及必需运行在多少服务器上。既然被分配给服务器池的服务器可以动态地变更,这允许Oracle基于集群可用的服务器总数动态地交付服务。数据库实例将启动在足够多的服务器上(受制于服务器的可用性)。无需硬编码规定数据库实例运行在哪些服务器上。数据库的任何实例可以运行在任何节点上。在实例号和节点之间无固定的映射关系。当服务器被释放、添加或删除时,它们按之前提及的规则被分配到相应服务器池中。下面举例详细说明: 例如,如果1个集群,总共有8个节点组成,并且支持3个Serverpool。每个Serverpool定义了服务器的最小和最大数目。pool1 定义最小4台、最多6台服务器(重要性为 10);pool2定义最小2台、最多3台服务器(重要性为 7);pool3定义最小2台、最多3台服务器(重要性为 5)。 8个节点按照规则a将被分配成:节点1-4分配给pool1,节点5-6被分配给pool2,节点7-8分配给pool3。 如果节点3由于某种原因发生故障,集群系统将分配节点7或8给pool1,即使这样做将导致pool3降到最小服务器水平以下。因为pool1比pool3有更高的重要性,而且它最小需要4台服务器(节点3的缺失,使得它少于4台)。 如果节点3被重新激活,它将被立即分配给pool3以使pool3的Serverpool恢复到最小所需的服务器数。 如果第9个节点被添加到集群,它将根据规则b分配给pool1,因为它的重要性最高而且未满足最大服务器数。
4. 策略管理的数据库:
当按照上述方式配置好集群件之后,我们就可以创建RAC数据了。创建数据库的时候,数据库有两种管理方式可供选择(它们之间可以来回转换):Admin-managed RAC和Policy-Managed RAC。Policy-Managed就是利用了Serverpool的RAC。 Admin-managed RAC:
Policy-Managed RAC:
对于Policy-Managed RAC可以改动它的Serverpool:
[oracle@station11 ~]$ srvctl config database -d c01orcl Database unique name: c01orcl Database name: c01orcl Oracle home: /u01/app/oracle/product/12.1.0/dbhome_1 Oracle user: oracle Spfile: +DATA/racdb/spfilec01orcl.ora Domain: example.com Start options: open Stop options: immediate Database role: PRIMARY Management policy: AUTOMATIC Server pools: rep Database instances: Disk Groups: DATA,FRA Mount point paths: Services: Type: RAC Database is policy managed |
|