Author: Bo Tang
摘要
在12c中, Oracle数据库服务器实例(作为ASM实例的客户)可以通过网络访问其他节点上的Flex ASM实例。有了Flex ASM,整个集群就不必运行那么多的ASM实例。也就是说不需要做ASM实例对应于节点的1:1映射。这样减少了资源占用,并且节点越多节省优势越大。更重要的是:如果一个Flex ASM实例死亡, 它的客户(比如:同一台物理机上的Oracle数据库服务器实例)仍能通过网络访问其他节点上的Flex ASM实例。这样就提高了Oracle数据库服务器基于集群的巩固性(Cluster Based Database Consolidation)。 在本文中,我们将继续使用《Oracle12c RAC和Grid Infrastructure部署系列二》最后遗留下来的环境(该环境虽然在系列二最后已经被破坏了,但是破坏前已经做好了备份)。本文从备份启动实验起始环境。在实验过程中,首先转换现有的标准ASM(Standard ASM)到Flex ASM,然后设置Flex ASM实例计数(ASM Cardinality)。最后做Oracle数据库服务器基于集群的巩固性测试。
微信查看请扫:
目录 2. 滚动转换(不是升级)现有的标准ASM(Standard ASM)到Flex ASM 2.1 查看原始实验环境 2.2 第一阶段:asmca图形界面转换 2.3 第二阶段:以root身份运行“converttoFlexASM.sh”脚本 2.4 查看转换成功后的实验环境 2.5 校正Flex ASM实例计数(ASM Cardinality) 3. 测试Flex ASM 3.1 加载工作负载 3.2 强迫关闭+ASM2实例,查看Flex ASM起到作用 3.3 手动启动刚才被强迫关闭的+ASM2实例 3.4 重分配db12c2数据库服务器实例连接回到+ASM2实例 总结 正文
1. Flex ASM体系结构 在以前的版本中,只有本地运行的ASM实例才能被同一物理机上的Oracle数据库服务器实例(作为ASM实例的客户)所访问到。如果某节点上的ASM实例死亡,所有该节点上的数据库服务器实例(作为ASM实例的客户)都要跟着死亡。为了区分新的Flex ASM,Oracle把以前版本的ASM称为:标准ASM(Standard ASM)。 因为Oracle在以前版本的RAC/ASM中采用的是“Share Every Thing”的策略,所以在集群中随着节点数目的增多,ASM管理的“extent map”等元数据量会呈排列组合的级数增加,同样节点重配置时产生的事件量也会呈排列组合的级数增加。下图回顾了Oracle RAC/ASM发展简史:
在12c中, Oracle数据库服务器实例(作为ASM实例的客户)可以通过网络访问其他节点上的Flex ASM实例。有了Flex ASM,整个集群就不必运行那么多的ASM实例。也就是说不需要做ASM实例对应于节点的1:1映射。这样减少了资源占用,并且节点越多节省优势越大。更重要的是:如果一个Flex ASM实例死亡, 它的客户(比如:同一台物理机上的Oracle数据库服务器实例)仍能通过网络访问其他节点上的Flex ASM实例。这样就提高了Oracle数据库服务器基于集群的巩固性(Cluster Based Database Consolidation)。
2. 滚动转换(不是升级)现有的标准ASM到Flex ASM 在本文中,我们将继续使用《Oracle12c RAC和Grid Infrastructure部署系列二》最后遗留下来的环境(该环境虽然在系列二最后已经被破坏了,但是破坏前已经做好了备份)。本文从备份启动实验起始环境。在实验过程中,首先转换现有的标准ASM(Standard ASM)到Flex ASM,然后设置Flex ASM实例计数(ASM Cardinality)。最后做Oracle数据库服务器基于集群的巩固性测试。
2.1 查看原始实验环境 《Oracle12c RAC和Grid Infrastructure部署系列二》最后遗留下来的环境,是标准ASM环境,不是Flex ASM环境。集群中的两个节点上都运行着标准ASM实例:
2.2 第一阶段:asmca图形界面转换 以grid用户,在station11调用asmca命令在图形界面执行转换:
asmca默认打开的选项卡是“Disk Groups”,请点到“ASM Instances”选项卡。并在该界面上点击“Convert to Oracle Flex ASM”按钮。
在“ASM Listener Port”栏中填写一个ASM监听器端口。该端口事先不能被占用,在此我们选择“1522”端口。 在 “Select the network(s) to be used for ASM ”表格里看到“Interface Name”左边显示为 “*”。这是因为本文中两台主机环境中的两个内网网卡(eth1和eth2)都配置的是 “172.31.118.*”网段。请钩选“*”左边的复选框。 如果你的主机环境中只有一个内网网卡(比如:eth1),那么在 “Select the network(s) to be used for ASM ”表格里的“Interface Name”左边将显示为 “eth1”。在这种情况下ASM网与集群cluster_interconnect网会共用这同一个内网界面。但是如果你的主机环境中有两个以上的内网网卡(比如本文环境:eth1和eth2),则可以物理分开ASM网与集群cluster_interconnect网。 ASM网是用于Flex ASM实例和它的客户(比如数据库服务器实例)进行跨节点传送ASM元数据等信息使用的。这是Flex ASM的工作通道,必需保证畅通。 最后我们注意到“Configure Oracle Flex ASM to run clusterwide”左边的复选框。顾名思义如果选中它就是指每个节点都要运行一个Flex ASM实例。这不就和以前的标准ASM没有什么区别了吗?是的,其实这个复选框存在的意义就是为了让Flex ASM也服务于混杂环境中可能存在的12.1以前的数据库服务器(它们没法连接到别的物理主机上的ASM实例)。 在本文的环境中,因为我们不使用混杂环境(我们的数据库服务器是12.1.0.2版本的),所以不选这个选项。如果不选这个选项,在整个集群中会默认配置一组数目为3的Flex ASM实例。
开始获取原始实验环境中的标准ASM实例信息:
界面提示:要求确认要关闭station11上的GI进行滚动转换:
正在执行转换的第一阶段(图形界面进行):
(附:如果使用静默方式运行asmca,命令如下:asmca -silent -convertToFlexASM -asmNetworks */172.31.118.0 -asmListenerPort 1522)
2.3 第二阶段:以root身份运行“converttoFlexASM.sh”脚本
当被提示以root身份运行脚本“converttoFlexASM.sh”时,就进入执行转换的第二阶段。请在命令行以root身份执行。 该脚本只要在station11上执行(就是那个运行asmca的节点)就可以了。解释一下该脚本所做的工作:它首先重启station11上的GI,随后在 station11上滚动转换;再然后重启station12上的GI,最后再滚动转换。 注意:脚本没有执行完成之前,不能点击asmca界面上的“Close”按钮。
脚本成功执行完成后,点击asmca界面上的“Close”按钮。
经过以上两个阶段的转换,Flex ASM转换成功了:
2.4 查看转换成功后的实验环境
注意到本文2.3节中的“converttoFlexASM.sh”脚本最后居然把ASM实例数目设置成“3”这个默认值。当然这也不奇怪,这是本文2.2节中提到的不选“Configure Oracle Flex ASM to run clusterwide”左边的复选框进行转换系统定的默认值。但是我们只有两个节点,下节会进行校正。 下面查看两台主机上的ASM网和ASM listener:
2.5 校正Flex ASM实例计数(ASM Cardinality) 如前所述,在整个集群中会默认配置一组数目为3的Flex ASM实例。Flex ASM实例计数(ASM Cardinality)是指:在整个集群中必需保证有几个Flex ASM实例在运行。Flex ASM实例计数最小值为“2”。我们把就它设为“2”以符合我们的节点计数。设置Flex ASM实例计数的操作的原则是这样的:按照Flex ASM实例计数的设置,某个Flex ASM实例会被自动添加和删除。如果一个正在运行着的Flex ASM实例被删除,那么原先连接到它的数据库服务器实例会被自动且透明地连接到集群里其他的Flex ASM实例;同样某个Flex ASM实例发生意外故障时,也会这样自动处理。
我们验证以上设置的Flex ASM实例计数:
从以上最后的查询语句可以得知:环境中db12c1数据库服务器实例和_mgmtdb集群管理实例连接到+ASM1实例;db12c2数据库服务器实例连接到 +ASM2实例。 下面的语句查询是哪个节点运行着+ASM2实例:
下面的语句查询是哪个节点运行着db12c2数据库服务器实例:
3. 测试Flex ASM 3.1 加载工作负载 我们在db12c2数据库服务器实例上加载工作负载:
3.2 强迫关闭+ASM2实例,查看Flex ASM起到作用 加载工作负载同时,强迫关闭+ASM2(就是db12c2数据库服务器实例正连接着的那个Flex ASM实例):
或
查看集群范围内Flex ASM实例的运行情况,确认+ASM2实例已经死亡:
以下查询语句证实了Flex ASM新特性在起作用:db12c2数据库服务器实例被自动且透明地连接到 +ASM1实例,避免了崩溃,提高了Oracle数据库服务器基于集群的巩固性。
3.3 手动启动刚才被强迫关闭的+ASM2实例 下面我们要手动启动刚才被强迫关闭的+ASM2实例:
在目前的12.1.0.2的GI版本中还不能做到让db12c2数据库服务器实例自动连接回+ASM2实例:
3.4 重分配db12c2数据库服务器实例连接回到+ASM2实例 如果本文3.1节中运行的工作负载结束了,那么请在会话中提交后,再一次运行此工作负载。工作负载能够安然结束,本身就证明了在之前实验中+ASM2被杀死并没有伤害到db12c2数据库服务器实例。
请保证以下所有实验是在以上工作负载伴随下进行。 接下来,我们要重分配db12c2数据库服务器实例连接回+ASM2实例。
当我们使用命令“alter system relocate client 'db12c2:db12c'”时,不能指定把数据库服务器实例连接到哪一个ASM实例。系统会根据当前Flex ASM实例组(包含Flex ASM实例计数规定的Flex ASM实例个数)中每一个Flex ASM实例负载的轻重,指派负载最轻的那个Flex ASM实例来执行连接。 注意,在生产环境中如果某个数据库服务器实例已经连接到负载最小的Flex ASM实例,这时如果运行以上的relocate命令会导致它断开Flex ASM实例再重新连接回这个Flex ASM实例。 在整个relocate过程中,数据库服务器实例上的工作负载仍在执行,完全不受影响。我们得出推论:如果不是以上蓄意破坏的情况,而是为了维护某个节点上的Flex ASM实例而有计划地关闭它,同样也不会对数据库服务器实例基于集群的巩固性造成任何影响。可见Flex ASM是集群高可用性发展史上的又一次让人叹为观止的提升。 最后我们来看一下station12上的alter日志。以便更深入地了解从数据库服务器实例重连接Flex ASM实例到手工重分配Flex ASM实例的整个过程。以下日志中红字部分对应于强迫关闭+ASM2实例时发生的事件信息;蓝色部分对应于手工重分配db12c2数据库服务器实例连接回+ASM2实例时发生的事件信息。
总结 Flex ASM是集群高可用性发展史上的又一次让人叹为观止的提升。Oracle称其为Oracle数据库服务器基于集群的巩固性(Cluster Based Database Consolidation)。从12c这个版本开始,打破了以前版本中的“ASM实例只能服务于本机数据库服务器实例”铁律。要想使用后续系列要介绍的Flex Cluster必需先配置本章的Flex ASM,但是要使用Flex ASM不必同时使用Flex Cluster。
|
GMT+8, 2022-3-22 12:24 , Processed in 0.056934 second(s), 21 queries .