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檔案。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28218939/viewspace-2134469/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- ASM 翻譯系列第三十四彈:ASM磁碟組重要屬性介紹ASM
- ASM 翻譯系列第三十二彈:ASM INTERNAL Find block in ASMASMBloC
- ASM 翻譯系列第三十八彈:ASM資料清理ASM
- ASM 翻譯系列第三十五彈:ASM 253號檔案——ASM spfileASM
- ASM 翻譯系列第三十一彈:瞭解ASM檔案的空間分配ASM
- ASM 翻譯系列第三十九彈:物理後設資料AT表ASM
- ASM 翻譯系列第八彈:ASM Internal ASM file extent mapASM
- ASM 翻譯系列第十彈:ASM Internal ASM DISK headerASMHeader
- ASM 翻譯系列第三十三彈:REQUIRED_MIRROR_FREE_MB的含義ASMUI
- ASM 翻譯系列第二彈:ASM 12C 版本新特性ASM
- ASM 翻譯系列第九彈:高階知識ASM ToolboxASM
- ASM磁碟組修改重建操作ASM
- ASM磁碟組更換磁碟的操作方法ASM
- ASM 翻譯系列第十三彈:ASM 高階知識 - Forcing the issueASM
- ASM磁碟組刪除DISK操作ASM
- Oracle ASM磁碟組常用操作命令OracleASM
- ASM磁碟組擴容操作文件ASM
- ASM 翻譯系列第一彈:基礎知識 ASM AU,Extents,Mirroring 和 FailgroupsASMAI
- asm 磁碟組 增刪磁碟組ASM
- ASM 翻譯系列第十一彈:高階知識 Offline or drop?ASM
- ASM磁碟組限制ASM
- ASM 翻譯系列第四十彈:理解ASM中 REQUIRED_MIRROR_FREE_MB和USABLE_FILE_MB的含義ASMUI
- Oracle 11.2.0.4 rac for aix acfs異常環境的克隆環境ASM磁碟組掛載緩慢OracleAIASM
- 遷移ASM磁碟組ASM
- 修改ASM磁碟組的屬性ASM
- ORACLE RAC重建ASM磁碟組OracleASM
- ASM磁碟組空間不足ASM
- ASM 磁碟組的建立及擴容ASM
- GNU make manual 翻譯(三十六)
- Oracle ASM ACFS disk group rebalanceOracleASM
- Oracle ACFS ( ASM Cluster File System )OracleASM
- 【ASM】Oracle asm磁碟被格式化,如何掛載該磁碟組ASMOracle
- 【ASM】Oracle asm刪除磁碟組注意事項ASMOracle
- 【ASM】ASM磁碟頭被重寫,如何修復ASM
- 在ASM磁碟組中刪除一個磁碟ASM
- 修改ASM磁碟組冗餘模式ASM模式
- 有效管理 ASM 磁碟組空間ASM
- Oracle ASM新增磁碟組POWER OPTIONOracleASM