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

HSM(Halo auto-Storage Management)系列之OracleASM内核解析

贾桂军 2024-04-28
445

一、OracleASM的前世今生

1996年,当时Oracle ASM最初的架构师Bill Bridge提出了一个新想法,那就是构建Oracle自己的存储管理系统。当时反对声音认为,Oracle没有必要介入存储管理领域。

1999年,这个项目被正式批准启动,最初的名字叫Parallel Storage Manager(PSM), 后来更改为Oracle Data Manager,2000年名称更改为OSM(Oracle Storage Management) 。

2003年最终被更改为ASM(Automatic Storage Management), 并在那一年的OOW大会上发布。从2003年ASM产品发布至今,已经走过了二十几个年头,ASM本身已经变得越来越强大,越来越成熟,这一产品已经深远的影响了整个产业,并且极大的冲击了很多以文件系统、集群文件系统为生的第三方厂商。现在ASM技术已经成为数据库架构中,位于操作系统和应用之间的最重要组件。

二、OracleASM的主要功能和优点

1)逻辑卷管理

自动管理磁盘组,增加和删除磁盘操作十分简单。而磁盘文件的重部署由 ASM 自动完成,不需要 DBA 干预,简化了DBA的工作,无需停机,并且文件区域自动重新分配。

2)软RAID功能

所有的数据均有冗余备份,当磁盘出现坏块或者整个磁盘损坏都可以从备份数据中读取,复制,恢复至正常使用的磁盘上。

3)文件系统

实现了文件级的冗余备份,提高了数据文件的可用性。针对数据库优化,减少元数据量。

4)自动负载均衡

 ASM 自动将一个文件均衡存储在组中的多个磁盘上,提供条带化技术实现这种文件的均衡分布。I/O 自动分布在所有可用的磁盘上,无需人工干预。若有出现IO热点,自动重平衡,将热点IO分散到多块磁盘上。

5)经济实用

ASM作为Oracle数据库的一个组件,无需额外付费,且用通用硬件即可。与第三方专用存储软件或者硬件相比更节省费用。


三、总体结构

磁盘组由 ASM 磁盘组成,可以包含一个或多个 ASM磁盘。整个

ASM磁盘一般为原始的磁盘设备,不需要挂载到系统中,不需要格式化为ext4或xfs等文件系统

AU(Allocation Unit)为磁盘的最小存储单元

一块ASM磁盘分为多个Stride,每个Stride包含AT(Allocation Table) 和多个AU

文件中包含元数据和多个 extent, 每个extent包含1到16个AU


四、磁盘组

  • 每个磁盘组都有自己的PST表(Partnership and Status Table), 保存在部分磁盘的第二个AU,即AU1。

  • 每个磁盘的AU 1是为PST表预留的,但是并不是每一个磁盘都有PST表的信息。

  • PST表包含了一个磁盘组中所有磁盘的相关信息-磁盘号,磁盘状态,partner的磁盘号,心跳信息和failgroup的信息。

  • 在normal冗余的磁盘组中,至少有两份PST表,分别保存在不同的磁盘中。如果磁盘组中有三个或更多的failgroup,PST表将会有3份.在high冗余的磁盘组中,至少有三份PST表的信息。

  • 可以简单方便的添加或删除磁盘, 实现扩容或更换坏盘。

  • 文件冗余保存成多份副本,分别在不同的磁盘上,若一个副本损坏可以从其他副本读取。三种冗余级别:KFDGTP_EXTERNAL 由外部存储负责冗余,ASM只保存一份;KFDGTP_NORMAL 常规冗余,2份副本;KFDGTP_HIGH 高冗余,3份副本。

  • 文件条带化存储,利于多个磁盘的IO均衡。

  • 每一个磁盘组都是独立的存储单元,每一个磁盘组都会有属于它自己的文件目录。


五、磁盘

ASM磁盘是以AU为单位进行格式化的。第一个AU位于ASM磁盘的起始位置,即AU0,它始终用于存储ASM元数据。 一个元数据块的大小为4K ,有块头信息和与块类型相匹配的一些相关数据,AU0的第一个块, 即block0,就是ASM的磁盘头。

5.1 磁盘头

主要有以下数据项

属性

描述

kfdhdb.driver.provstr

驱动类型,ASMLIB磁盘是 ORCLDISK+磁盘名,非ASMLIB磁盘是ORCLDISK

kfdhdb.dsknum

ASM磁盘编号

kfdhdb.hdrsts

磁盘头状态  共8种状态

KFDHDR_INVALID  0 Illegal value 

KFDHDR_UNKNOWN  1 Disk header block unreadable

KFDHDR_CANDIDATE 2 No OSM or OS disk header found  

KFDHDR_MEMBER  3 Normal member of the group  

KFDHDR_FORMER  4 Disk dropped cleanly from group

KFDHDR_CONFLICT 5 Header conflicts  

KFDHDR_INCOMPAT 6 Written by incompatible software

KFDHDR_PROVISIONED 7 Disk  was prepared beforehand

kfdhdb.diskname

磁盘名

kfdhdb.grpname

磁盘组名

kfdhdb.fgname

失败组名

kfdhdb.grptyp

磁盘冗余级别:KFDGTP_EXTERNAL,  KFDGTP_NORMAL, KFDGTP_HIGH

kfdhdb.crestmp

磁盘添加到磁盘组的时间

kfdhdb.mntstmp

磁盘最近一次被挂接的时间

kfdhdb.dbcompat

最小数据库兼容版本

kfdhdb.f1b1iocn

ASM文件目录1号文件所在的位置

kfdhdb.blksize

ASM元数据块的大小(bytes)

kfdhdb.ausize

AU的大小,默认为1M

kfdhdb.dsksize

磁盘大小,以AU为单位

kfdhdb.secsize

磁盘扇区大小(bytes)

kfdhdb.fstiocn

指向ASM的空闲空间表

kfdhdb.altiocn

指向ASM的分配表

kfdhdb.grpstmp

磁盘组创建时间

kfdhdb.vfstart

表决磁盘(VD)文件开始的AU偏移量

kfdhdb.vfend

表决磁盘文件结束的AU偏移量

kfdhdb.spfile

ASM spfile参数文件的AU号  本特性限于 11.2或更高版本

kfdhdb.spfflg

ASM spfile的标志位。如果值为1,那么ASM spfile就位于这个磁盘,AU号由kfdhdb.spfile指明

kfdhdb.mfact

一个stride最多可以包含的AU数


磁盘头冗余备份

磁盘头块的信息会自动备份到AU1的倒数第二个ASM元数据块中。知道AU的块大小和ASM元数据块的大小后,就能找到倒数第二个块的块编号

5.2 Stride

磁盘容量有大有小,AT表的大小受限于AU的大小,所以需要将一个大的磁盘分成多个段,称之为Stride

5.3 AT分配表

AT表全称为Allocation Table。AT表记录每个AU的分配信息,开始于stride所在AU0的第二个块。由N个AT块组成,每一个AT块(4K)可以描述448个AU(kfdatb.shrink值),每一个AT表有254个块。这意味着一个AT表可以用来描述254*448= 113792个AU。这在ASM里被称为一个stride,一个stride可以描述的AU数量在ASM的磁盘头的kfdhdb.mfact。

5.4 FST空闲空间表

FST全称为Free Space Table。FST表记录了空闲的AU,用来加速AU的分配,避免读取已经完全被占用殆尽的AT块,造成分配空间效率的低下。FST表属于AT表的一部分,kfdhdb.fstlocn的值代表了FST块位于磁盘头的第几个块,一般位于AT表的块1。

AT表和FST表备份

FST表和AT表都是重要物理元数据,必须有备份。ASM会把0号AU的内容拷贝到11号AU,然后同时维护这两份副本

六、文件

ASM中所有的文件是根据冗余级别多副本存储,分布在不同的磁盘上。一个文件分成多段,条带化存储,每一段称为extent。所有文件的元数据存储在文件目录中,即1号文件,每个磁盘组有自己的文件目录。

6.1 文件目录

ASM的1号文件是ASM的文件目录,它记录了磁盘组中的所有文件信息。每一个磁盘组都是独立的存储单元,所以每一个磁盘组都会有属于它自己的文件目录。

每一个文件目录的条目都会包含如下的信息

文件大小

文件块大小

文件类型

文件的冗余级别

文件的条带配置

前60个extent的位置指针

如果文件超过60个extent,那么会有Indirect extent 的指针

文件创建时间戳

文件最后的修改时间戳

指向ASM Alias目录的文件名

新增的ASM文件会分配到一个号码,这个号码是随着新增文件而顺序递增的。文件的号码与文件目录中的block号码也是完全对应的。比如文件目录的1号block描述了他自己也就是1号文件的信息。2号block是描述2号文件的。

1号文件元数据的位置

ASM磁盘头的kfdhdb.f1b1locn指定了一号文件所在的AU。如果kfdhdb.f1b1locn的值为0,代表这个磁盘并没有一号文件的拷贝。1号文件属于ASM的元数据,按冗余级别做多副本备份。

6.2 空间分配

一个文件由多个extent组成。HSM文件的空间分配是以extent为单位,每一个extent是由一个或多个AU组成。HSM空间分配的最小单位是AU,默认的AU size是1MB。但在Exadata下AU 的默认大小是4MB。ASM文件的空间分配是以extent为单位,每一个extent是由一个或多个AU组成,

• 在11.2版本,前20000个extent,每一个extent由1个AU组成,接下来的20000个extent,每一个由4个AU组成,再超出的extent,每一个由16个AU组成。这个特性被叫做可变extent。

• 而在11.1版本,extent的增长则遵循的是1-8-64倍AU的方式。

•在版本10,可变extent这个特性还没出现,因此所有的extent的大小都是1个AU

因为ASM文件目录块中,只能存放60个extent的条目,一旦超出这个值,那么就要有额外的地方来记录这个信息。

6.3 条带化

ASM文件条带化有两种类型:

细粒度条带化:条带粒度为128k,默认只有元数据和配置文件使用细粒度条带化。

粗粒度条带化:条带粒度为一个AU

粗粒度的条带化可以提供更高的吞吐量,而细粒度的条带化可以降低延迟。创建文件时可以指定锁使用的条带粒度。

七、重平衡

最开始ASM磁盘组分配空间时是均衡分布的,但系统运行一段时间后可能会出现某一块磁盘的IO过于集中的问题,即热点IO。这个时候需要IO重平衡rebalance,可以手动触发,有的情况下由ASM自动触发。

7.1 何时需要重平衡

1)添加、删除磁盘

2)负载不均衡

3)ASM磁盘组的磁盘上空间分布不均匀

4)移动一个文件从磁盘的hot区到cold区


7.2 如何重平衡

重平衡是以文件为基本操作单位的,主要由以下步骤:

1)rebalance plan,ASM会计算出重平衡的计划

2)更新COD(Continuing Operations Directory),当重平衡失败时,恢复后将根据COD启动重平衡 

3) extent relocating,ASM会在磁盘组中的磁盘间移动文件,这个过程会花费大部分的时间

八、故障恢复

8.1 磁盘故障

一个磁盘不可用时会先被设置为offline状态,此时disk repair计时器开始介入,如果计时器达到磁盘组DISK_REPAIR_TIME(默认3.6h) 属性值时,这个磁盘会从所属的磁盘组中drop掉。如果这个磁盘在计时器过期前恢复可用,那么它的状态会变回online,不会被drop。当一个磁盘被drop,整个磁盘组需要为此进行rebalance,整个过程需要耗费大量的时间。在此期间,其他磁盘也可能会发生故障,使得数据丢失的风险大大增加。

为解决这个问题,在11gR1开始,ASM引入了fast disk resync特性。ASM不再立即drop不可用的磁盘,而是先置为offline状态。这样做的意义是能让ASM管理员被告知有磁盘发生故障后在disk repair time计时器到达阈值前修复故障。默认的disk repair计时器阈值是3.6小时。这个阈值是可以通过alter diskgroup命令来调整的。

在磁盘处于offline的这段时间里,ASM持续跟踪需要在offline磁盘上做的修改操作。如果磁盘在计时器到达阈值前恢复可用并且恢复到online状态,那么ASM会将这些修改操作应用到磁盘上去。如果在计时器到达阈值之前,磁盘故障不能解决,磁盘会被设置为drop状态。

8.2 坏块

企业级磁盘质保期一般是3年,随着磁盘使用年限增加故障率升高,可能会出现某一块数据读不出来的问题。ASM中PST,磁盘头,AT表,FST等元数据以及文件数据都有冗余备份机制,若出现读写失败的情况,则重新分配一个AU,将数据从其他副本复制过来,并且将读写异常的AU标记为已损坏。

九、校验检测

9.1 元数据校验

通过为ALTER DISKGROUP CHECK语句可以用来校验磁盘组元信息的内部一致性,可以指定在磁盘组、磁盘、文件、failgroup级别进行元信息一致性的校验,在校验过程中如果有错误信息,会记录在ASM的alert文件中,check语句一般会执行如下的操作:

1)检查磁盘的一致性

2)检查文件extent map和AT表之间的一致性

3)检查alias元信息目录和文件目录之间对应关系的正确性

4)检查alias目录树的正确性

5)检查ASM元信息目录是否有不可访问的块

我们可以在语句中添加repair或norepair关键字来指定ASM是否尝试修复检查过程中发生的错误,默认为norepair。

9.2 disk scrub

磁盘数据清理(disk scrubbing)是Oracle 12C ASM出现的新功能, ASM的磁盘清理通过校验不经常被读取的数据,提高了可用性和可靠性,对于磁盘组是normal和 high redundancy冗余模式的,磁盘清理会检查数据的逻辑错误,在发现后利用镜像磁盘进行错误的自动修复

十、后记

现在存储已经成为Oracle的一条产品线,Oracle为什么要花费巨大的时间精力去做存储模块?数据安全可靠与底层存储系统紧密相关,文件损坏,磁盘故障会导致数据库出现灾难性故障,而且在早期数据库故障中占比较高。早期的数据库系统重点关注数据管理,数据存储在系统内的文件系统中,要求更高的场景用专用的硬件存储设备保存数据,如raid卡,阵列柜。

实际生产中第三方存储是否能很好的解决数据的安全可靠问题呢?企业级的磁盘质保期一般是三年,电子类产品使用久了一般都会有老化,故障率升高的问题。专用存储设备一旦出问题需要厂家专业人员维修,购买阵列柜使用了几年后出问题,厂家能否快速响应?需要打个大问号。还有数据库的扩容、迁移等运维需求,第三方的存储能否很好的支持?成本方面是否可行?

ASM就是一种对用户来说简单通用且经济的方案。用通用的硬件,一般水平的运维人员即可。与oracle数据库自成一体,扩容、迁移无缝衔接,而且不需要支付额外的费用。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论