ASM 翻译系列第三十六弹:ACFS磁盘组的重平衡操作

原作者:Bane Radulovic

译者: 魏兴华

审核: 魏兴华

DBGeeK社区联合出品

原文链接:http://asmsupportguy.blogspot.sg/2014/02/acfs-disk-group-rebalance.html

ACFS disk group rebalance

从Oracle 11.2版本开始,可以在ASM磁盘组之上创建通用的集群文件系统,被称为Oracle ASM Cluster File Systems或Oracle ACFS。要想创建一个ACFS文件系统,首先需要在ASM磁盘组之上创建特定的卷,这个卷在OS上是一个块设备,ACFS文件系统就创建于这些块设备之上。

本篇文章主要是关于对ACFS卷文件的重平衡、镜像和区管理的介绍。

首先说明一下测试使用的环境信息:

64-bit Oracle Linux 5.4, in Oracle Virtual Box
Oracle Restart and ASM version 11.2.0.3.0 - 64bit
ASMLib/oracleasm version 2.1.7 Set up ACFS volumes
Set up ACFS volumes

由于我的环境使用的是单实例的Oracle Restart ,因此我需要手工来load ADVM/ACFS 的驱动。(在RAC环境下是自动load的,不需要手工干预)。

64-bit Oracle Linux 5.4, in Oracle Virtual Box
# acfsload start
ACFS-9391: Checking for existing ADVM/ACFS installation.
ACFS-9392: Validating ADVM/ACFS installation files for operating system.
ACFS-9393: Verifying ASM Administrator setup.
ACFS-9308: Loading installed ADVM/ACFS drivers.
ACFS-9154: Loading 'oracleoks.ko' driver.
ACFS-9154: Loading 'oracleadvm.ko' driver.
ACFS-9154: Loading 'oracleacfs.ko' driver.
ACFS-9327: Verifying ADVM/ACFS devices.
CFS-9156: Detecting control device '/dev/asm/.asm_ctl_spec'.
ACFS-9156: Detecting control device '/dev/ofsctl'.
ACFS-9322: completed
#

我们首先需要创建一个磁盘组进而才能在其上构建ACFS文件系统。

$ sqlplus / as sysasm 
SQL> create diskgroup ACFS
disk 'ORCL:ASMDISK5', 'ORCL:ASMDISK6'
attribute 'COMPATIBLE.ASM' = '11.2', 'COMPATIBLE.ADVM' = '11.2'; 
Diskgroup created. 
SQL> 

虽然从技术上说,可以支持在一个ASM磁盘组里既存放数据库文件也存放ACFS文件,但是我推荐的使用方式是,为ACFS卷使用独立的ASM磁盘组,这样不但提供了功能/角色的分离,而且对数据库文件来说还存在着潜在的性能益处。

接下来我们检查一下所有磁盘组的AU Size:

SQL> select group_number "Group#", name "Name", allocation_unit_size "AU size"
from v$asm_diskgroup_stat; 
     Group# Name        AU size
---------- -------- ----------
         1 ACFS        1048576
         2 DATA        1048576
SQL>

上面显示两个磁盘组都是1MB的AU Size,后面当我们讨论卷文件区大小的时候还会提到它。

接下来我们在之前创建的ACFS磁盘组中创建一些卷:

$ asmcmd volcreate -G ACFS -s 4G VOL1
$ asmcmd volcreate -G ACFS -s 2G VOL2
$ asmcmd volcreate -G ACFS -s 1G VOL3

获取卷信息

$ asmcmd volinfo -a
Diskgroup Name: ACFS 
 Volume Name: VOL1
 Volume Device: /dev/asm/vol1-142
 State: ENABLED
 Size (MB): 4096
 Resize Unit (MB): 32
 Redundancy: MIRROR
 Stripe Columns: 4
 Stripe Width (K): 128
 Usage:
 Mountpath: 
  Volume Name: VOL2
 Volume Device: /dev/asm/vol2-142
 State: ENABLED
 Size (MB): 2048
 Resize Unit (MB): 32
 Redundancy: MIRROR
 Stripe Columns: 4
 Stripe Width (K): 128
 Usage:
 Mountpath:
   Volume Name: VOL3
 Volume Device: /dev/asm/vol3-142
 State: ENABLED
 Size (MB): 1024
 Resize Unit (MB): 32
 Redundancy: MIRROR
 Stripe Columns: 4
 Stripe Width (K): 128
 Usage:
 Mountpath: 
 $

卷在创建后会自动的enable,主机重启后,对于oracle restart环境,我们需要手工装载ADVM/ACFS驱动,再enable我们所创建的卷。

NASM files for ACFS support

ASM会为每一个卷创建一个卷文件。在一个冗余的磁盘组中,每一个卷都会有一个dirty region logging (DRL)文件。

可以通过以下查询获得一些卷文件的信息:

 SQL> select file_number "File#", volume_name "Volume", volume_device "Device", size_mb "MB", drl_file_number "DRL#"
from v$asm_volume; 
  File# Volume Device               MB DRL#
------ ------ ----------------- ----- ----
   256 VOL1   /dev/asm/vol1-142  4096  257
   259 VOL2   /dev/asm/vol2-142  2048  258
   261 VOL3   /dev/asm/vol3-142  1024  260 
 SQL>

除了卷名称,设备名和卷大小以外,还显示了每一个卷设备的ASM文件编号256,259,262,以及和这个ASM文件相关的DRL文件号,例如上面输出结果中的257,258,259。

译者注:相当于每一个卷的创建会在ASM磁盘中产生2个文件,一个文件是其卷本身,一个是和卷相关的DRL文件。

Volume file extents

我们可以通过内部视图x$kffxp查看其中一个卷文件的区分布信息:

SQL> select xnum_kffxp "Extent", au_kffxp "AU", disk_kffxp "Disk"
from x$kffxp
where group_kffxp=2 and number_kffxp=261
order by 1,2; 
    Extent         AU       Disk
---------- ---------- ----------
         0       6256          0
         0       6256          1
         1       6264          0
         1       6264          1
         2       6272          1
         2       6272          0
         3       6280          0
         3       6280          1
...
       127       7272          0
       127       7272          1
2147483648       6252          0
2147483648       6252          1
2147483648 4294967294      65534 
259 rows selected. 
SQL>

首先要注意的是,每一个区都被做了镜像,因为这个卷是在一个normal冗余的磁盘组中。

我们也观察到卷文件261有128个区,卷的大小是1个G,这意味着每一个区有8MB或者说8个AU,这里的关键是每个卷文件有它自己的区大小,这一点跟标准的ASM文件不一样,它不会从磁盘组继承区大小。

对于ASM文件来说,在ASM 11.1版本之前,extent的大小是固定的,等于AU的大小,在ASM 11.1版本之后,出现了可变extent,可变extent的出现是为了更好的支持大数据文件,减少对ASM和数据库实例的SGA要求、提升创建文件和打开文件等操作的性能,初始化的extent大小等于磁盘组的AU_SIZE设定值,随着一个文件分配的extent越来越多,extent的size会按照4或16倍的AU_SIZE增大。这个特性在文件新建或者resize的时候自动起作用,当然ASM磁盘组的属性值COMPATIBLE.ASM 和COMPATIBLE.RDBMS要设置为大于等于11.1。

ASM based cluster file systems

我们现在可以基于上面创建的卷来在其上构建ACFS文件系统了(当然需要通过root用户来操作):

# mkdir /acfs1
# mkdir /acfs2
# mkdir /acfs3 
# chmod 777 /acfs? 
# /sbin/mkfs -t acfs /dev/asm/vol1-142
mkfs.acfs: version         = 11.2.0.3.0
mkfs.acfs: on-disk version = 39.0
mkfs.acfs: volume          = /dev/asm/vol1-142
mkfs.acfs: volume size     = 4294967296
mkfs.acfs: Format complete. 
# /sbin/mkfs -t acfs /dev/asm/vol2-142
mkfs.acfs: version         = 11.2.0.3.0
mkfs.acfs: on-disk version = 39.0
mkfs.acfs: volume          = /dev/asm/vol2-142
mkfs.acfs: volume size     = 2147483648
mkfs.acfs: Format complete. 
# /sbin/mkfs -t acfs /dev/asm/vol3-142
mkfs.acfs: version         = 11.2.0.3.0
mkfs.acfs: on-disk version = 39.0
mkfs.acfs: volume          = /dev/asm/vol3-142
mkfs.acfs: volume size     = 1073741824
mkfs.acfs: Format complete. 
# mount -t acfs /dev/asm/vol1-142 /acfs1
# mount -t acfs /dev/asm/vol2-142 /acfs2
# mount -t acfs /dev/asm/vol3-142 /acfs3 
# mount | grep acfs
/dev/asm/vol1-142 on /acfs1 type acfs (rw)
/dev/asm/vol2-142 on /acfs2 type acfs (rw)
/dev/asm/vol3-142 on /acfs3 type acfs (rw)

拷贝一些文件到新创建的文件系统中:

$ cp diag/asm/+asm/+ASM/trace/* /acfs1

$ cp diag/rdbms/db/DB/trace/* /acfs1

$ cp oradata/DB/datafile/* /acfs1

$ cp diag/asm/+asm/+ASM/trace/* /acfs2

$ cp oradata/DB/datafile/* /acfs2

$ cp fra/DB/backupset/* /acfs3

检查使用的空间是否有变化:

$ strings /tmp/ASMspfile.backup

$ df -h /acfs?

Filesystem Size Used Avail Use% Mounted on

/dev/asm/vol1-142 4.0G 1.3G 2.8G 31% /acfs1

/dev/asm/vol2-142 2.0G 1.3G 797M 62% /acfs2

/dev/asm/vol3-142 1.0G 577M 448M 57% /acfs3

ACFS disk group rebalance

我们增加一个盘到ACFS磁盘组中,由于这个操作改变了磁盘组的配置,会触发磁盘组的重平衡操作,我们观察一下重平衡操作的过程:

SQL> alter diskgroup ACFS add disk 'ORCL:ASMDISK4'; 
 Diskgroup altered. 
 SQL>

从alert 文件中获得重平衡操作进程ARB0的PID号:

$ crsctl stat res ora.asm -p | egrep "ASM_DISKSTRING|SPFILE"
$ tail alert_+ASM.log
Sat Feb 15 12:44:53 2014
SQL> alter diskgroup ACFS add disk 'ORCL:ASMDISK4'
NOTE: Assigning number (2,2) to disk (ORCL:ASMDISK4)
...
NOTE: starting rebalance of group 2/0x80486fe8 (ACFS) at power 1
SUCCESS: alter diskgroup ACFS add disk 'ORCL:ASMDISK4'
Starting background process ARB0
Sat Feb 15 12:45:00 2014
ARB0 started with pid=27, OS id=10767
...

然后通过tail命令查看ARB0进程的跟踪文件获得重平衡的过程信息:

$ tail -f ./+ASM_arb0_10767.trc 
 *** ACTION NAME:() 2014-02-15 12:45:00.151
ARB0 relocating file +ACFS.1.1 (2 entries)
ARB0 relocating file +ACFS.2.1 (1 entries)
ARB0 relocating file +ACFS.3.1 (42 entries)
ARB0 relocating file +ACFS.3.1 (1 entries)
ARB0 relocating file +ACFS.4.1 (2 entries)
ARB0 relocating file +ACFS.5.1 (1 entries)
ARB0 relocating file +ACFS.6.1 (1 entries)
ARB0 relocating file +ACFS.7.1 (1 entries)
ARB0 relocating file +ACFS.8.1 (1 entries)
ARB0 relocating file +ACFS.9.1 (1 entries)
ARB0 relocating file +ACFS.256.839587727 (120 entries) 
 *** 2014-02-15 12:46:58.905
ARB0 relocating file +ACFS.256.839587727 (117 entries)
ARB0 relocating file +ACFS.256.839587727 (1 entries)
ARB0 relocating file +ACFS.257.839587727 (17 entries)
ARB0 relocating file +ACFS.258.839590377 (17 entries) 
 *** 2014-02-15 12:47:50.744
ARB0 relocating file +ACFS.259.839590377 (119 entries)
ARB0 relocating file +ACFS.259.839590377 (1 entries)
ARB0 relocating file +ACFS.260.839590389 (17 entries)
ARB0 relocating file +ACFS.261.839590389 (60 entries)
ARB0 relocating file +ACFS.261.839590389 (1 entries)
...

我们看到重平衡的过程是针对每一个ASM文件做重平衡,这一行为跟数据库文件的重平衡是完全一致的,ASM的1-9号元信息文件首先被重平衡,ASM然后重平衡卷文件256,DRL文件257,如此继续。

从这一点可以看出,ASM重平衡是卷文件而不是存储在操作系统中的文件。

Disk online operation in an ACFS disk group

当ASM的磁盘offline时,ASM会创建一个staleness目录,用来跟踪这个offline的磁盘哪些区发生了变化,一旦磁盘重新online,就可以使用这些信息做一个快速的镜像同步。

但是这个功能在11.2版本对卷文件还是不可用的,一旦磁盘online,ASM会重建整个磁盘(offline)的上的内容。

但是在12.1版本以后,对于卷文件也支持了快速镜像同步功能。

Conclusion

ASM磁盘组可以被使用来构建一个通用的集群文件系统ACFS,通过在磁盘组之上创建ASM卷来做到这一点,它所暴露给操作系统的就是一个标准的块设备。

对于做了冗余的磁盘组来说,可以在系统级别起到保护用户文件的作用,ASM通过对于卷文件的每个区做镜像来达到数据保护的目的,卷文件有它自己的区大小,它不会从ASM磁盘组上继承区大小。

最后,ASM磁盘组的重平衡级别是ASM的每个卷文件,而不是操作系统级别看到的一个个的OS文件。

原文发布于微信公众号 - 沃趣科技(woqutech)

原文发表时间:2017-03-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Felix的技术分享

《一个操作系统的实现》笔记(2)--保护模式

3818
来自专栏数据和云

险恶江湖:Oracle的TNS_ADMIN获取与设置混乱误删除案例

在微信群中有朋友提出一个问题:如何获得Oracle的TNS_ADMIN的变量值? TNS_ADMIN 是Oracle的一个环境变量,指向 SQL*Net 配置文...

4606
来自专栏别先生

一脸懵逼学习Nginx及其安装,Tomcat的安装

1:Nginx的相关概念知识:   1.1:反向代理:     反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然...

25210
来自专栏Netkiller

PHP高级编程之守护进程

PHP高级编程之守护进程 http://netkiller.github.io/journal/php.daemon.html 摘要 2014-09-01 发表...

3877
来自专栏草根专栏

使用Identity Server 4建立Authorization Server (6) - js(angular5) 客户端

由于手头目前用项目, 所以与前几篇文章不同, 这次要讲的js客户端这部分是通过我刚刚开发的真是项目的代码来讲解的. 这是后端的代码: https://githu...

5775
来自专栏行者常至

数据库连接池简单连接

模型      -----     Model 视图      -----     View 控制器  -----     Controller

963
来自专栏互联网杂技

SpringBoot ( 十二 ) :SpringBoot 如何测试打包部署

有很多网友会时不时的问我,spring boot项目如何测试,如何部署,在生产中有什么好的部署方案吗?这篇文章就来介绍一下spring boot 如何开发、调试...

972
来自专栏py+selenium

linux 安装weblogic12.1.3.0步骤

需注意:fmw_12.1.3.0.0_wls.jar     需要jdk1.7.0_15以上的版本

8905
来自专栏草根专栏

使用angular4和asp.net core 2 web api做个练习项目(三)

下面将开发登陆和授权的部分, 这里要用到identity server 4. 在VS解决方案中设置多个项目同时启动: ? AspNetIdentityAutho...

3548
来自专栏Seebug漏洞平台

使用 XML 内部实体绕过 Chrome 和 IE 的 XSS 过滤器

来源:BypassingXSSFiltersusingXMLInternalEntities 原作者:DavidLitchfield (david@davidl...

40010

扫码关注云+社区

领取腾讯云代金券