简介
Oracle Real Application Cluster (RAC) 是 Oracle 解决方案中的一个著名产品,用于保持业务数据的高可用性。Oracle RAC 允许在所有集群节点之间共享负载,采用 N-1 容错配置来应对节点故障,其中 N 是节点总数。Oracle RAC 一直在不断改进每个版本,此次也不例外。新的 12.1.0.1 版包含“Flex ASM”和“Flex 集群”两个属性,支持面向云计算的环境的各种苛刻需求。
Oracle RAC 12c 引入了两个新概念:
中心节点: 和以前的版本一样,它们通过专用网络相互连接,并且可以直接访问共享存储。这些节点可以直接访问 Oracle 集群注册表 (OCR) 和表决磁盘 (VD)。
叶节点: 这些节点是轻型节点,彼此不互连,也不能像中心节点一样访问共享存储。每个叶节点与所连接的中心节点通信,并通过所连接的中心节点连接到集群。
此 拓扑允许松散耦合的应用服务器与紧密耦合的数据库服务器形成一个集群。紧密耦合的服务器是中心服务器,与集群中的其他中心服务器共享数据库、OCR 和表决设备的存储并进行对等通信。松耦合的服务器是叶服务器,与集群中的单个中心服务器形成松散通信关联,不需要与集群中的其他中心服务器或叶服务器共享 存储,也不需要与之进行对等通信,只与所关联的中心服务器通信。在 12.1.0.1 中,叶服务器旨在提高应用的高可用性和实现多层资源管理。
在 Oracle 12c 之前,对于要使用 ASM 的数据库实例来说,所有节点上的 ASM 实例必须已处于运行状态,才能启动数据库实例。如果 ASM 实例未运行,则意味着在存储级使用 ASM 的数据库实例不能启动。这实际上意味着无论采用何种技术(即 RAC、ASM 和共享存储),均不能访问数据库实例。
随着 Oracle 12c 的推出,一个名为 Oracle Flex ASM 的特性解除了上述限制,它的一个主要特性是故障切换到集群中的其他节点。本质上是一个中心和叶架构,Oracle Clusterware 通过一个替代 ASM 实例将故障节点的连接将无缝转移到另一个成员节点。在给定集群中运行的 ASM 实例数被称作 ASM 基数,默认值为 3。但此基数值可以使用 Clusterware 命令修改。
Oracle Flex 集群
从架构上来 说,Oracle Flex 集群包括一个中心和叶架构,其中只有中心节点可以直接访问 Oracle 集群注册表 (OCR) 和表决磁盘 (VD)。但是应用可以通过叶节点访问数据库,而不必在叶节点上运行 ASM 实例。通过中心节点连接到数据库使得它对应用透明。
图 1:描绘了一个典型的 Oracle Flex 集群,包含 4 个叶节点和 2 个中心节点。简单地说,Oracle Flex 集群需要 Oracle Flex ASM。
Oracle Flex ASM 的实现方面
Oracle Flex ASM 可通过两种方式实现:
纯 12c Flex ASM(相同版本)
Grid Infrasctructure (GI) 和数据库都运行在 Oracle 12c 上
Oracle 12c 之前的混合版本(不同版本)
使用 Oracle Flex ASM 的 Oracle RAC 12c
标准 Oracle Flex ASM 配置:
Oracle Flex ASM 配置上的 ASM 实例故障:
1. 登录 RAC 数据库实例 1 (rac1)
[oracle@oel6-112-rac1Desktop]$hostname oel6-112-rac1.localdomain
2. 检查 ASM 实例和 RAC 数据库实例的状态
[oracle@oel6-112-rac1Desktop]$ps-ef|greppmon oracle33251017:39?00:00:00asm_pmon_+ASM1 oracle38131017:40?00:00:00mdb_pmon_-MGMTDB oracle58061017:42?00:00:00ora_pmon_orcl1 oracle61931017:42?00:00:00apx_pmon_+APX1
3. 从实例 1 (rac1) 检查 RAC 数据库实例中 ASM 实例的状态
[oracle@oel6-112-rac1Desktop]$srvctlstatusasm ASMisrunningonoel6-112-rac2,oel6-112-rac1
4. 在实例 1 (rac1) 中检查集群状态
[oracle@oel6-112-rac1Desktop]$crsctlcheckcluster CRS-4537:ClusterReadyServicesisonline CRS-4529:ClusterSynchronizationServicesisonline CRS-4533:EventManagerisonline
5. 用于检查 Oracle Flex ASM 是否启用的命令 (rac1)
[oracle@oel6-112-rac1Desktop]$asmcmd ASMCMD>showclustermode ASMcluster:Flexmodeenabled ASMCMD>showclusterstate normal
6. 用于更改 ASM 基数的命令 (rac1)
[oracle@oel6-112-rac1Desktop]$srvctlstatusasm-detail ASMisrunningonoel6-112-rac2,oel6-112-rac1 ASMisenabled. [oracle@oel6-112-rac1Desktop]$srvctlconfigasm-detail ASMhome:/u01/app/12.1.0/grid Passwordfile:+DATA/orapwASM ASMlistener:LISTENER ASMisenabled. ASMinstancecount:3 ClusteraSMlistener:ASMNET1LSNR_ASM
7. 用于检查 Oracle Flex ASM 是否启用的命令 (rac2)
[oracle@oel6-112-rac2Desktop]$asmcmd ASMCMD>showclustermode ASMcluster:Flexmodeenabled ASMCMD>showclusterstate normal ASMCMD>exit
8. 如何更改 ASM 基数 (rac2)
[oracle@oel6-112-rac2Desktop]$srvctlconfigasm-detail ASMhome:/u01/app/12.1.0/grid Passwordfile:+DATA/orapwASM ASMlistener:LISTENER ASMisenabled. ASMinstancecount:3 ClusteraSMlistener:ASMNET1LSNR_ASM
9. 在 RAC 数据库实例 1 (rac1) 中关闭 ASM 实例
[oracle@oel6-112-rac1Desktop]$srvctlstopasm-nodeoel6-112-rac1-stopoptionabort-force
10. 在 RAC 数据库实例 1 (rac1) 中检查 ASM 实例的状态
[oracle@oel6-112-rac1Desktop]$srvctlstatusasm PRCR-1070:Failedtocheckifresourceora.asmisregistered Cannotcommunicatewithcrsd
11. 在 RAC 数据库实例 1 (rac1) 中检查集群服务的状态
[oracle@oel6-112-rac1Desktop]$crsctlcheckcluster CRS-4535:CannotcommunicatewithClusterReadyServices CRS-4529:ClusterSynchronizationServicesisonline CRS-4533:EventManagerisonline
12. 在实例 1 (rac1) 中检查 ASM 和 RAC 数据库的状态
[oracle@oel6-112-rac1Desktop]$ps-ef|greppmon oracle38131017:40?00:00:00mdb_pmon_-MGMTDB oracle58061017:42?00:00:00ora_pmon_orcl1 oracle61931017:42?00:00:00apx_pmon_+APX1
注:在这里,数据库实例与特定节点中运行的特定 ASM 实例关联。如果因为某种原因,ASM 实例无法启动/服务关闭,数据库实例仍然可以启动,因为数据库实例将查找同一集群中运行的 ASM 实例。图 3 描绘了 Flex ASM 的高可用特性。
13. 在 RAC 数据库实例 1 (rac1) 中检查没有 ASM 实例的正在运行的 RAC 数据库实例的状态
[oracle@oel6-112-rac1Desktop]$.oraenv ORACLE_SID=[orcl1]?orcl1 ORACLE_HOME=[/home/oracle]?/u01/app/oracle/product/12.1.0/db_1 TheOraclebaseremainsunchangedwithvalue/u01/app/oracle
14. 从 RAC 数据库实例 1 (rac1) 登录数据库实例
[oracle@oel6-112-rac1Desktop]$sqlplus/nolog sql*Plus:Release12.1.0.1.0ProductiononWedSep2518:24:362013 copyright(c)1982,2013,Oracle.Allrightsreserved. sql>connectsys/oracle@orclassysdba Connected. sql>selectinstance_name,instance_numberfromgv$instance; INSTANCE_NAMEINSTANCE_NUMBER ------------------------------------------- orcl22 orcl11 sql>selectinstance_name,instance_numberfromv$instance; INSTANCE_NAMEINSTANCE_NUMBER ------------------------------------------- orcl22 sql>connectsys/oracle@orclassysdba Connected. sql>selectinstance_name,instance_numberfromgv$instance; INSTANCE_NAMEINSTANCE_NUMBER ------------------------------------------- orcl11
15. 从 RAC 数据库实例 1 (rac1) 连接到 RAC 数据库实例 2 (rac2) 的 ASM 实例
[oracle@oel6-112-rac1Desktop]$.oraenv ORACLE_SID=[orcl1]?+ASM2 ORACLE_HOME=[/home/oracle]?/u01/app/12.1.0/grid TheOraclebaseremainsunchangedwithvalue/u01/app/oracle [oracle@oel6-112-rac1Desktop]$asmcmd--privilegesysasm--inst+ASM2 ASMCMD>lsdg StateTypeRebalSectorBlockAUTotal_MBFree_MBReq_mir_free_MBUsable_file_MBOffline_disksVoting_filesName MOUNTEDEXTERNN51240961048576153424782047820YDATA/ ASMCMD>
总结:数据库实例使用一个专用 ASM 实例,我们强制该 ASM 实例被停止工作来模拟故障,因此数据库实例重新连接到另一节点(在本示例中为节点 2 (rac2))上的现有 ASM 实例。
Oracle Database 11.2 或早期版本
如前面针对 Oracle 12c 的介绍所述,ASM 与数据库实例的关联本质上是特定的。这意味着,如果 ASM 实例无法启动,该节点/ASM 中的关联数据库实例也无法启动,从而导致该数据库无法访问。
1. 登录 RAC 数据库实例 1 (rac1)
loginas:oracle oracle@192.168.xx.xx'spassword: Lastlogin:FriSep2706:05:442013
2. 检查 ASM 实例和 RAC 数据库实例的状态:
[oracle@rac1~]$ps-ef|greppmon oracle30531005:56?00:00:00asm_pmon_+ASM1 oracle38491005:57?00:00:00ora_pmon_flavia1
3. 在 RAC 数据库实例 1 (rac1) 中检查 ASM 实例的状态
[oracle@rac1~]$srvctlstatusasm ASMisrunningonrac2,rac1
4. 在 RAC 数据库实例 1 (rac1) 中检查集群的状态
[oracle@rac1~]$crsctlcheckcluster CRS-4537:ClusterReadyServicesisonline CRS-4529:ClusterSynchronizationServicesisonline CRS-4533:EventManagerisonline
5. 在 RAC 数据库实例 1 (rac1) 中停止 ASM 实例
[oracle@rac1~]$srvctlstopasm-nrac1-oabort-f
6. 在 RAC 数据库实例 1 (rac1) 中检查 ASM 实例的状态
[oracle@rac1~]$srvctlstatusasm ASMisrunningonrac2
7. 检查 ASM 实例和 RAC 数据库实例 (rac1) 的状态
[oracle@rac1~]$ps-ef|greppmon oracle78855795006:20pts/000:00:00greppmon
总结:数据库实例与 ASM 实例强关联。如果 ASM 实例发生故障,同一节点上的数据库实例也会发生故障。
为何使用 Oracle Flex ASM
Oracle Flex ASM 支持 Oracle Database 12c 客户端使用更大的 LUN 大小。
支持的最大磁盘组数为 511。
可以灵活地重命名磁盘组中的 ASM 磁盘。
ASM 实例的补丁级验证
滚动补丁期间禁用补丁级验证
复制物理元数据
Oracle Flex ASM 中的网络增强
在早期版本中,集群要求:
部署 Flex ASM
下面是 Flex ASM 安装程序的屏幕截图。
选择选项“Advanced Installation”
有三个存储选项:
标准 ASM
-
12c 之前的 ASM 配置模式
Oracle Flex ASM
-
推荐
非 ASM 托管的存储
管理 Flex ASM:
无需 Flex ASM 特定的实例参数
ASM 服务器实例使用自动内存管理 (AMM)
关于作者
Deiby Gómez 是专家 DBA 和 Oracle Ace,拥有丰富的 Oracle Exadata 数据库云服务器和高可用性解决方案经验。他经常出席 Oracle 活动,包括 OTN 拉美巡讲、Java 日、Oracle First Symposium 和在许多大学举行的活动。Deiby 是第一个在 Oracle LAD 上发表文章的危地马拉人,他经常在其博客 www.oraclefromguatemala.com.gt 上发表文章。
Yenugula Venkata raviKumar 是一个拥有逾 15 年经验的 DBA,擅长高可用性数据库环境(RAC、Data Guard 等)、调优和性能、迁移、备份和恢复、Oracle Exadata v1/v2/v3,精通 AIX、HP-UX 和 Linux 等操作系统。他目前居住在印度,曾参加过在印度举行的多次 Oracle 活动并发表演讲。他于 2009 年获得 Oracle Corporation 的 Oracle 认证大师 (OCM) 称号。
Nassyam Basha 是一名 DBA。他是 OCP 11g,精通 Data Guard、RMAN、RAC 和性能调优等 Oracle 技术。他已在从 RAC 到非 RAC 的各种平台上完成了 90 多次 Data Guard 安装,并使用切换和故障切换成功完成了许多业务关键生产数据库的集群迁移。他积极参加 Oracle 相关论坛(如 OTN),以 CKPT 身份发表了近 10000 个帖子,他还在 Oracle-Lists 上发表文章。他经常在其博客 www.oracle-ckpt.com 上发表文章,最近还与人合著了 Oracle Data Guard 11gR2 管理指南。
转载:http://www.oracle.com/technetwork/cn/articles/database/flexasm-flexcluster-benefits-odb12c-2177371-zhs.html