ACFSファイルシステム作成手順
ACFS作成手順
ACFSは、Oracle自動ストレージ管理クラスタ・ファイルシステムという意味で、その名の通りOracle製のクラスタファイルシステムです。このファイルシステムの特徴は3つあります。
- マルチプラットフォームでマウント可能なファイルシステムであること
- Oracleデータベースファイル以外のカスタマファイルをサポートすること
- Grid管理下にある複数ノードから同時に参照できること
UNIX系OSでも、Linuxでも、Windowsでも使えて、GRID配下の全サーバーから同時アクセスでき、dbfはもちろんパッチファイルやアプリケーションファイルも配置できるという、大変優れたファイルシステムです。
便利な使い方の例を挙げてみます。
- パッチファイルをACFSに配置することで、各ノードに配置する必要なし
- DataPumpのダンプファイルを配置すれば、CLUSTER=yで複数ノードでパラレルでのexport/importを実施可能
- $ORACLE_HOMEを配置することで、単一ORACLE_HOME構成を実現可能
- アプリケーション実行ファイルを配置 (リリースでノード間同期が不要)
とても使い勝手が良さそうです。では実際に作ってみます。
ACFS作成
ACFS作成の流れを説明します。
- ACFSを格納するASMディスクグループを決める。(または新規作成する)
- OS上にマウントポイント・ディレクトリを作成
- ディスクグループ上にACFS用ボリュームを作成
- ACFS作成
ACFS用ディスクグループ作成
既存のディスクグループの空き領域に作成してもいいですが、ここでは新規DGに作成することにします。
- DG用物理ディスクデバイス名 : /dev/rhdisk5
- 物理ディスクへのシンボリックリンク名 : /dev/oracle/db/db01/acfs1 (物理ディスクを直接指定する場合はリンク不要)
所有権、パーミッション、をGRID配下の各ノードで設定します。ここでは、server01とserver02です。
server01設定
[root@server01:/] ls -l /dev/rhdisk5 crw------- 1 root system 19, 3 Oct 16 15:49 /dev/rhdisk5 [root@server01:/] [root@server01:/] chown grid.asmadmin /dev/rhdisk5 [root@server01:/] chmod 660 /dev/rhdisk5 [root@server01:/] cd /dev/oracle/db/db01/ [root@server01:/dev/oracle/db/db01] ln -s /dev/rhdisk5 acfs1 [root@server01:/dev/oracle/db/db01] chown -h grid.asmadmin acfs1 [root@server01:/dev/oracle/db/db01] ls -l acfs1 lrwxrwxrwx 1 grid asmadmin 12 Nov 13 15:40 acfs1 -> /dev/rhdisk5 [root@server01:/dev/oracle/db/db01]
server02設定
[root@server02:/] ls -l /dev/rhdisk5 crw------- 1 root system 19, 2 Oct 16 16:37 /dev/rhdisk5 [root@server02:/] [root@server02:/] chown grid.asmadmin /dev/rhdisk5 [root@server02:/] chmod 660 /dev/rhdisk5 [root@server02:/] cd /dev/oracle/db/db01 [root@server02:/dev/oracle/db/db01] ln -s /dev/rhdisk5 acfs1 [root@server02:/dev/oracle/db/db01] chown -h grid.asmadmin acfs1 [root@server02:/dev/oracle/db/db01] ls -l acfs1 lrwxrwxrwx 1 grid asmadmin 12 Nov 13 15:42 acfs1 -> /dev/rhdisk5 [root@server02:/dev/oracle/db/db01]
マウントポイント作成
ACFSのマウントポイントを作成します。
- /acfs_work
server01
[root@server01:/] mkdir /acfs_work [root@server01:/] chown oracle.oinstall /acfs_work [root@server01:/]
server02
[root@server02:/] mkdir /acfs_work [root@server02:/] chown oracle.oinstall /acfs_work [root@server02:/]
ディスクグループ作成
物理ディスクrhdisk5に ディスクグループ名「DG_TEST」で新規DGを作成します。
gridユーザーにスイッチし、SYSASM権限でsqlplusにログインします。この作業はserver01のみでOKです。
server01作業
[grid@server01:/home/grid] sqlplus sys/password as sysasm SQL*Plus: Release 11.2.0.4.0 Production on 水 11月 13 15:52:01 2013 Copyright (c) 1982, 2013, Oracle. All rights reserved. Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production With the Real Application Clusters and Automatic Storage Management options に接続されました。 SQL>
ディスクグループ「DG_TEST」を作成します。
SQL> CREATE DISKGROUP DG_TEST EXTERNAL REDUNDANCY DISK '/dev/oracle/db/db01/acfs1' SIZE 81920 M; Diskgroup created. SQL>
server01でDGを作成するとDG「DG_TEST」は自動でマウントされますが、server02はマウントされないので手動でマウントします。server02にgridユーザーでログインし、SYSASM権限でsqlplusにログイン後、マウントします。
server02作業
SQL> ALTER DISKGROUP DG_TEST MOUNT; Diskgroup altered. SQL>
ACFS用ボリューム作成
作成した「DG_TEST」上に、ACFSとして割り当てる論理ボリュームをサイズ75GBで作成します。
ところが、ここで想定外のエラーが発生します。
server01作業
SQL> ALTER DISKGROUP DG_TEST ADD VOLUME ACFSVOL1 SIZE 75G; ALTER DISKGROUP DG_TEST ADD VOLUME ACFSVOL1 SIZE 75G * 行1でエラーが発生しました。: ORA-15032: not all alterations performed ORA-15221: ASM operation requires compatible.asm of 11.2.0.0.0 or higher SQL>
ORA-15032: not all alterations performed
ORA-15221: ASM operation requires compatible.asm of 11.2.0.0.0 or higher
ASMのcompatible.asmが11.2.0.0.0より低い、というエラーです。いろいろと調べてみたところ、compatible.asmという属性のバージョン値が「10.1.0.0.0」となっており、確かに「11.2.0.0.0」よりも低いことが判明しました。
SQL> col COMPATIBILITY form a10 SQL> col DATABASE_COMPATIBILITY form a10 SQL> col NAME form a20 SQL> select GROUP_NUMBER,NAME,COMPATIBILITY,DATABASE_COMPATIBILITY from v$asm_diskgroup; GROUP_NUMBER NAME COMPATIBIL DATABASE_C ------------ -------------------- ---------- ---------- 1 DATA 11.2.0.0.0 10.1.0.0.0 2 DG_REDO_1 11.2.0.0.0 10.1.0.0.0 3 DG_REDO_2 11.2.0.0.0 10.1.0.0.0 4 DG_TEST 10.1.0.0.0 10.1.0.0.0 SQL>
ついでにV$ASM_ATTRIBUTEも確認してみると、DG_TESTであるGROUP_NUMBER=4が表示もされませんでした。
SQL> col value form a10 SQL> select group_number,name,value from v$asm_attribute where name like '%compatible%'; GROUP_NUMBER NAME VALUE ------------ -------------------- ---------- 1 compatible.asm 11.2.0.0.0 1 compatible.rdbms 10.1.0.0.0 2 compatible.asm 11.2.0.0.0 2 compatible.rdbms 10.1.0.0.0 3 compatible.asm 11.2.0.0.0 3 compatible.rdbms 10.1.0.0.0 6 rows selected. SQL>
このエラー原因として、ASMボリューム作成のためには、ディスク・グループのCOMPATIBLE.ADVM属性を11.2以上にする必要があり、そのためには、COMPATIBLE.ASM属性を11.2以上に設定する必要がある、という事が判明。そして、COMPATIBLE.ADVM属性の値は設定しないかぎり空のままであることから、ASM属性を「11.2」に設定後、ADVMの属性も「11.2」に設定する必要があることが分かりました。
参考資料
・Oracle ADVMの詳細は、「Oracle ASM動的ボリューム・マネージャの概要」
・Oracle Automatic Storage Management管理者ガイド 11gリリース2 (11.2) B61035-04
→ 11 Oracle ASMコンフィギュレーション・アシスタント
→ Oracle ASMコンフィギュレーション・アシスタントGUIツール
→ Oracle ASMコンフィギュレーション・アシスタントによるディスク・グループの管理
では、ディスクグループ「DG_TEST」のASM属性とADVM属性 を設定します。SYSASM権限でSQLを実行します。
server01作業
まずは、ASM属性を設定します。
SQL> alter diskgroup DG_TEST set attribute 'compatible.asm' = '11.2'; Diskgroup altered. SQL>
次にADVM属性を設定します。
SQL> alter diskgroup DG_TEST set attribute 'compatible.advm' = '11.2'; Diskgroup altered. SQL>
問題なく設定できたようなので、設定結果を確認します。
SQL> select GROUP_NUMBER,NAME,COMPATIBILITY,DATABASE_COMPATIBILITY from v$asm_diskgroup; GROUP_NUMBER NAME COMPATIBIL DATABASE_C ------------ -------------------- ---------- ---------- 1 DATA 11.2.0.0.0 10.1.0.0.0 2 DG_REDO_1 11.2.0.0.0 10.1.0.0.0 3 DG_REDO_2 11.2.0.0.0 10.1.0.0.0 4 DG_TEST 11.2.0.0.0 10.1.0.0.0 SQL> SQL> select group_number,name,value from v$asm_attribute where name like '%compatible%'; GROUP_NUMBER NAME VALUE ------------ -------------------- ---------- 1 compatible.asm 11.2.0.0.0 1 compatible.rdbms 10.1.0.0.0 2 compatible.asm 11.2.0.0.0 2 compatible.rdbms 10.1.0.0.0 3 compatible.asm 11.2.0.0.0 3 compatible.rdbms 10.1.0.0.0 4 compatible.asm 11.2.0.0.0 4 compatible.rdbms 10.1.0.0.0 4 compatible.advm 11.2 9 rows selected. SQL>
ASMとADVMの属性が「11.2」に変更されたことが確認できました。では、ACFS用論理ボリューム作成を再実行してみます。
SQL> ALTER DISKGROUP DG_TEST ADD VOLUME ACFSVOL1 SIZE 75G; Diskgroup altered. SQL>
作成できました。
ここでは、DG作成後にalterでcompatible属性をセットしましたが、DG作成時にセットすることもできます。
ACFS作成
ファイルシステムを作成するためには、OS上で認識している物理デバイス名を知る必要があるので、ACFS用に作成した論理ボリュームの物理デバイス名を調べます。調べ方は、ASMCMDコマンドで調べる方法と、SQLで調べる方法の2通りがあります。
まずはASMCMDコマンドで調べてみます。gridユーザーでログインし、ASMCMDコマンドラインを起動してvolinfoコマンドを実行します。
[grid@server01:/home/grid] asmcmd ASMCMD> volinfo -G DG_TEST -a Diskgroup Name: DG_TEST Volume Name: ACFSVOL1 Volume Device: /dev/asm/acfsvol1-5 State: ENABLED Size (MB): 76800 Resize Unit (MB):32 Redundancy: UNPROT Stripe Colums: 4 Stripe Width (K): 128 Usage: ACFS Mountpath: /acfs_work ASMCMD>
この結果から、論理ボリューム名「ACFSVOL1」に紐づく物理デバイス名は「/dev/asm/acfsvol1-5」であることがわかりました。
次にSQLでも調べてみます。gridユーザーでログインしSYSASM権限でsqlplusを起動しSQLを実行します。
SQL> col VOLUME_NAME form a20 SQL> col VOLUME_DEVICE form a30 SQL> selecvt VOLUME_NAME,VOLUME_DEVICE from v$asm_volume; VOLUME_NAME VOLUME_DEVICE -------------------- ------------------------------ ACFSVOL1 /dev/asm/acfsvol1-5 SQL>
ASMCMDで調べた結果と同じ物理デバイス名が表示されました。
それでは、ACFS用論理ボリューム上にクラスターファイルシステムACFSを作成します。ファイルシステムはOSの管理者権限でなければ作成できないので、server01にrootユーザーでログインしてコマンドを実行します。
server01作業
[root@server01:/] mkfs -V acfs -o b=4k /dev/asm/acfsvol1-5 mkfs: バージョン = 11.2.0.4.0 mkfs: ディスク上のバージョン = 39.0 mkfs: ボリューム = /dev/asm/acfsvol1-5 mkfs: ボリューム・サイズ = 80530636800 mkfs: フォーマットが完了しました。 [root@server01:/]
次に、acfsutilでレジストリ登録します。
[root@server01:/] acfsutil registry -f -a /dev/asm/acfsvol1-5 /acfs_work acfsutil registry: マウント・ポイント/acfs_workはOracleレジストリに正常に追加されました [root@server01:/]
これで完了です。
作業はserver01で実施しましたが、server02でもACFSがmountされている状態になっています。
dfコマンドで確認すると、このように見えます。
server01
[root@server01:/] df -m /acfs_work Filesystem MB ブロック Free %Used Iused %Iused Mounted on /dev/asm/acfsvol1-5 76800.00 76571.39 1% 468192 1% /acfs_work [root@server01:/]
server02
[root@server02:/] df -m /acfs_work Filesystem MB ブロック Free %Used Iused %Iused Mounted on /dev/asm/acfsvol1-5 76800.00 76571.39 1% 468192 1% /acfs_work [root@server02:/]
ACFSがマウントできていることを確認できました。
umontとmount
では最後に、ACFSのアンマウントをマウントをやってみます。
アンマウントは、AIXのumountコマンドで行います。
[root@server01:/] umount /acfs_work [root@server01:/]
マウントは、AIXのmountコマンドで行います。
[root@server01:/] mount -V acfs /dev/asm/acfsvol1-5 /acfs_work [root@server01:/]
以上でACFS作成は完了です。