深入了解 Oracle Flex ASM 及其优点
简介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 可通过两种方式实现:
使用 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
|