暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

深入了解 Oracle Flex ASM 及其优点

IT那活儿 2021-06-22
1204
一. 简 介
在 Oracle 12c 之前,对于要使用 ASM 的数据库实例来说,所有节点上的 ASM 实例必须已处于运行状态,才能启动数据库实例。如果 ASM 实例未运行,则意味着在存储级使用 ASM 的数据库实例不能启动。这实际上意味着无论采用何种技术(即 RAC、ASM 和共享存储),均不能访问数据库实例。

随着 Oracle 12c 的推出,一个名为 Oracle Flex ASM 的特性解除了上述限制,它的一个主要特性是故障切换到集群中的其他节点。本质上是一个中心和叶架构,Oracle Clusterware 通过一个替代 ASM 实例将故障节点的连接将无缝转移到另一个成员节点。在给定集群中运行的 ASM 实例数被称作 ASM 基数,默认值为 3。但此基数值可以使用 Clusterware 命令修改。

二. Oracle Flex ASM的实现方面
Oracle Flex ASM 可通过两种方式实现:
  • 纯 12c Flex ASM(相同版本)

  • Grid Infrasctructure (GI) 和数据库都运行在 Oracle 12c 上

  • Oracle 12c 之前的混合版本(不同版本)

  • 和平常一样,ASM 实例将在每个节点上运行,Flex 配置支持 12c 之前的数据库。使用 ASM 磁盘组的兼容性参数管理各数据库实例之间的兼容性。这种方法的优点是,如果 Oracle 12c 数据库实例与一个 ASM 实例的连接断开,数据库连接将故障切换至其他服务器上的另一个 ASM 实例。通过将基数设置为 all 即可以实现这种故障切换。

使用Oracle Flex ASM的Oracle RAC 12c

标准 Oracle Flex ASM 配置:
 Oracle Flex ASM 配置上的 ASM 实例故障:

  • 登录 RAC 数据库实例 1 (rac1)
[grid@rac12node1 ~]$ hostnamerac12node1
  • 检查 ASM 实例和 RAC 数据库实例的状态

[grid@rac12node1 ~]$ ps -ef | grep pmongrid    2038   25582 0  16:37 pts/1    00:00:00 grep pmongrid    11838      1 0  15:04 ?        00:00:00 asm_pmon_+ASM1oracle  12830      1 0  15:05 ?        00:00:00 ora_pmon_rac12db1
  • 从实例 1 (rac1) 检查 RAC 数据库实例中 ASM 实例的状态

[grid@rac12node1 ~]$ srvctl status asmASM is running on rac12node1,rac12node2
  • 在实例 1 (rac1) 中检查集群状态

[grid@rac12node1 ~]$ crsctl check clusterCRS-4537: Cluster Ready Services is onlineCRS-4529: Cluster Synchronization Services is onlineCRS-4533: Event Manager is online
  • 用于检查 Oracle Flex ASM 是否启用的命令 (rac1)

[grid@rac12node1 ~]$ asmcmdASMCMD> showclustermode ASM cluster : Flex mode enabledASMCMD> showclusterstateNormalASMCMD>
  • 用于更改 ASM 基数的命令 (rac1)

[grid@rac12node1 ~]$ srvctl status asm -detailASM is running on rac12node1,rac12node2ASM is enabled.ASM instance +ASM1 is running on node rac12node1Number of connected clients: 2Client names: rac12db1:rac12db:rac12no-cluster rac12node1:_OCR:rac12no-clusterASM instance +ASM2 is running on node rac12node2Number of connected clients: 3Client names: -MGMTDB:_mgmtdb:rac12no-cluster rac12db2:rac12db:rac12no-cluster rac12node2:_OCR:rac12no-cluster[grid@rac12node1 ~]$
  • 用于检查 Oracle Flex ASM 是否启用的命令 (rac2)

[grid@rac12node2 ~]$ asmcmdASMCMD> showclustermodeASM cluster : Flex mode enabledASMCMD> showclusterstateNormalASMCMD>
  • 如何更改 ASM 基数 (rac2)

[grid@rac12node2 ~]$ srvctl config asm -detailASM home: <CRS home>Password file: +ocrdg/orapwASMBackup of Password file: ASM listener: LISTENERASM is enabled.ASM is individually enabled on nodes: ASM is individually disabled on nodes: ASM instance count: 3Cluster ASM listener: ASMNET1LSNR_ASM[grid@rac12node2 ~]$
  • 查看节点2上访问ASM实例的客户端。

节点2初始状态,grid用户下:

set line 200col INSTANCE_NAME for a60select distinct instance_name,db_name,status from v$asm_client; INSTANCE_NAME                            DB_NAME         STATUS---------------------------------- ------------------ -----------------------+ASM2                                   +ASM            CONNECTED-MGMTDB                                 _mgmtdb         CONNECTEDrac12db2                                rac12db         CONNECTEDrac12node2                              _OCR            CONNECTED
  • 在 RAC 数据库实例 1 (rac1) 中关闭 ASM 实例

[grid@rac12node1 ~]$ srvctl stop asm -node rac12node1 -stopoption abort -force
  • 在 RAC 数据库实例 1 (rac1) 中检查 ASM 实例的状态

[grid@rac12node1 ~]$ srvctl status asmASM is running on rac12node2
  • 在 RAC 数据库实例 1 (rac1) 中检查集群服务的状态

[grid@rac12node1 ~]$ crsctl check clusterCRS-4537: Cluster Ready Services is onlineCRS-4529: Cluster Synchronization Services is onlineCRS-4533: Event Manager is online
  • 在实例 1 (rac1) 中检查 ASM 和 RAC 数据库的状态

[grid@rac12node1 ~]$ ps -ef | grep pmongrid    3339 25582   0 16:42 pts/1    00:00:00 grep pmonoracle 12830     1   0 15:05 ?        00:00:00 ora_pmon_rac12db1

注:在这里,数据库实例与特定节点中运行的特定 ASM 实例关联。如果因为某种原因,ASM 实例无法启动/服务关闭,数据库实例仍然可以启动,因为数据库实例将查找同一集群中运行的 ASM 实例。图 3 描绘了 Flex ASM 的高可用特性。

  • 从 RAC 数据库实例 1 (rac1) 登录数据库实例

[oracle@rac12node1 ~]$ sqlplus  as sysdbaSQL*Plus: Release 12.2.0.1.0 Production on Thu Oct 17 16:45:05 2019Copyright (c) 1982, 2016, Oracle. All rights reserved.Connected to:Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit ProductionSQL> select open_mode from v$database;OPEN_MODE--------------------READ WRITE ---在节点1上数据库实例并未受到影响SQL> select instance_name,instance_number from gv$instance;INSTANCE_NAME    INSTANCE_NUMBER---------------- ---------------rac12db1                       1rac12db2                       2SQL> select instance_name,instance_number from v$instance;INSTANCE_NAME    INSTANCE_NUMBER---------------- ---------------rac12db1                       1SQL>

grid用户下:

查看节点2 asm连接信息,查看节点2上访问ASM实例的客户端,有了来自节点1的客户端访问。

SQL> select distinct instance_name,db_name,status from v$asm_client;   INSTANCE_NAME                    DB_NAME          STATUS---------------------------- ---------------- -----------------------+ASM2                           +ASM               CONNECTED-MGMTDB                         _mgmtdb            CONNECTEDrac12db1                        rac12db            CONNECTEDrac12db2                        rac12db            CONNECTEDrac12node2                      _OCR               CONNECTED
Flex ASM可以在ASM实例意外终止后(节点 1),让受影响节点作为客户端访问远程节点(节点2)的ASM实例。
  • asmcmd连接查看

---强制连接到+ASM1

[grid@rac12node1 ~]$ asmcmd --privilege sysasm --inst +ASM1Connected to an idle instance.

---强制连接到+ASM2

[grid@rac12node1 ~]$ asmcmd --privilege sysasm --inst +ASM2ASMCMD> lsct 查看asm实例连接情况DB_Name Status Software_Version Compatible_version Instance_Name Disk_Group+ASM CONNECTED 12.2.0.1.0 12.2.0.1.0 +ASM2 DATADG +ASM CONNECTED 12.2.0.1.0 12.2.0.1.0 +ASM2 MGMTDG +ASM CONNECTED 12.2.0.1.0 12.2.0.1.0 +ASM2 OCRDG _mgmtdb CONNECTED 12.2.0.1.0 12.2.0.0.0 -MGMTDB MGMTDG rac12db CONNECTED 12.2.0.1.0 12.2.0.0.0 rac12db1 DATADG rac12db CONNECTED 12.2.0.1.0 12.2.0.0.0 rac12db2 DATADG _OCR CONNECTED - - rac12node2 OCRDG ASMCMD> lsdgState Type Rebal Sector Logical_Sector Block AU Total_MB Free_MB Req_mir_free_MB Usable_file_MB Offline_disks Voting_files NameMOUNTED EXTERN N 512 512 4096 4194304 8192 1824 0 1824 0 N DATADG/MOUNTED EXTERN N 512 512 4096 4194304 40960 34232 0 34232 0 N MGMTDG/MOUNTED EXTERN N 512 512 4096 4194304 3072 2736 0 2736 0 Y OCRDG/ASMCMD>

总结:数据库实例使用一个专用 ASM 实例,我们强制该 ASM 实例被停止工作来模拟故障,因此数据库实例重新连接到另一节点(在本示例中为节点 2 (rac2))上的现有 ASM 实例。

  • 查看节点2上访问ASM实例的客户端,有了来自节点1的客户端访问。

节点2初始状态:

set line 200col INSTANCE_NAME for a60select distinct instance_name,db_name,status from v$asm_client; INSTANCE_NAME DB_NAME STATUS----------------------------------------------- ------------------------ --------------------------+ASM2 +ASM CONNECTED-MGMTDB _mgmtdb CONNECTEDrac12db2 rac12db CONNECTEDrac12node2 _OCR CONNECTED手动关掉节点1 asm实例:[grid@rac12node1 ~]$ srvctl stop asm -node rac12node1 -stopoption abort -force

手动关掉节点1 asm实例:

[grid@rac12node1 ~]$ srvctl stop asm -node rac12node1 -stopoption abort -force

再次查看节点2 asm连接信息,查看节点2上访问ASM实例的客户端,有了来自节点1的客户端访问。

SQL> select distinct instance_name,db_name,status from v$asm_client; INSTANCE_NAME DB_NAME STATUS-------------------------------------------- ---------------------- -------------------------------+ASM2 +ASM CONNECTED-MGMTDB _mgmtdb CONNECTEDrac12db1 rac12db CONNECTEDrac12db2 rac12db CONNECTEDrac12node2 _OCR CONNECTED

三. Oracle Database 11.2 或早期版本
如前面针对 Oracle 12c 的介绍所述,ASM 与数据库实例的关联本质上是特定的。这意味着,如果 ASM 实例无法启动,该节点/ASM 中的关联数据库实例也无法启动,从而导致该数据库无法访问。

1. 登录 RAC 数据库实例 1 (rac1)

login as: oracleoracle@192.168.xx.xx's password:Last login: Fri Sep 27 06:05:44 2013

2. 检查 ASM 实例和 RAC 数据库实例的状态:

[oracle@rac1 ~]$ ps -ef | grep pmonoracle 3053     1  0 05:56 ? 00:00:00 asm_pmon_+ASM1oracle 3849     1  0 05:57 ? 00:00:00 ora_pmon_flavia1

3. 在 RAC 数据库实例 1 (rac1) 中检查 ASM 实例的状态

[oracle@rac1 ~]$ srvctl status asmASM is running on rac2,rac1

4. 在 RAC 数据库实例 1 (rac1) 中检查集群的状态

[oracle@rac1 ~]$ crsctl check clusterCRS-4537: Cluster Ready Services is onlineCRS-4529: Cluster Synchronization Services is onlineCRS-4533: Event Manager is online

5. 在 RAC 数据库实例 1 (rac1) 中停止 ASM 实例

[oracle@rac1 ~]$ srvctl stop asm -n rac1 -o abort -f

6. 在 RAC 数据库实例 1 (rac1) 中检查 ASM 实例的状态

[oracle@rac1 ~]$ srvctl status asmASM is running on rac2

7. 检查 ASM 实例和 RAC 数据库实例 (rac1) 的状态

[oracle@rac1 ~]$ ps -ef | grep pmonoracle 7885  5795  0 06:20 pts/0    00:00:00 grep pmon

总结:数据库实例与 ASM 实例强关联。如果 ASM 实例发生故障,同一节点上的数据库实例也会发生故障。

四. 为何使用Oracle Flex ASM
  • Oracle Flex ASM 支持 Oracle Database 12c 客户端使用更大的 LUN 大小。
  • 支持的最大磁盘组数为 511。

  • 可以灵活地重命名磁盘组中的 ASM 磁盘。

  • ASM 实例的补丁级验证

  • 滚动补丁期间禁用补丁级验证

  • 复制物理元数据

五. Oracle Flex ASM中的网络增强
  • 在早期版本中,集群要求:

  • 一个供客户端应用访问的公共网络

    一个或多个用于集群内节点间通信(包括 ASM 通信)的专用网络

  • Flex ASM 增加 ASM 网络,可用于 ASM 与其客户端之间的通信,以便隔离和分流 ASM 通信。

六. 部署 Flex ASM
在12.2.0.1版本中,已经强制使用Flex ASM,在安装是无需选择,Flex ASM已经默认集成在12.2.0.1版本中

END


更多精彩干货分享

点击下方名片关注

IT那活儿

文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论