ASM 翻譯系列第三十六彈:ACFS磁碟組的重平衡操作

沃趣科技發表於2017-03-01

原作者: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檔案。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28218939/viewspace-2134469/,如需轉載,請註明出處,否則將追究法律責任。

相關文章