OCI BaseDB EE-EP RAC に ACFS(ASM Cluster Filesystem) をマウントしてみる(Oracle Cloud Infrastructure)

ACFS(ASM Cluster Filesystem) は Oracle ASM をファイルシステムとして使用可能にする仕組みです。

> Oracle ACFSについて
> https://docs.oracle.com/cd/F19136_01/ostmg/understand-acfs-concepts.html#GUID-579FDDA5-7D18-4A01-B3D6-906B6DB93851
> ：
> Oracle ACFSは、すべてのカスタマ・ファイルをサポートする、スタンドアロン・サーバーおよびクラスタ全体の汎用ファイル・システムとして設計されています。
> ：

今回の記事では OCI BaseDB の EE-EP(Enterprise Edition - Extreme Performance) RAC に ACFS をマウントしてみますやで。
彡(^)(^)

# 1. 参考ドキュメント

以下のマニュアルを参照しています。ACFS のマウントには幾つかの方法がありますが acfsutilコマンド によるマウントを行います。

> Oracle ACFSの管理の理解
> https://docs.oracle.com/cd/F19136_01/ostmg/understand-acfs-admin.html#GUID-EC577A31-256E-4FD2-9E9F-749D78B378D0
> ・acfsutilコマンドで作成され、ノード・リストを指定するOracle ACFSリソースは、そのリストのノードすべてにマウントされます。
 
> Oracle ACFSファイル・システムの作成
> https://docs.oracle.com/cd/F19136_01/ostmg/steps-manage-acfs.html#GUID-FA9F9335-ADA4-48D1-B060-6F096E3BAE6C

# 2. Oracle ADVMボリュームの作成

BaseDB に opcユーザーでログインして、gridユーザーにスイッチします。asmcmdコマンドを起動します。

```sql
su - grid
asmcmd
lsdg

#結果
$ su - grid
$ asmcmd
ASMCMD> lsdg
State    Type    Rebal  Sector  Logical_Sector  Block       AU  Total_MB  Free_MB  Req_mir_free_MB  Usable_file_MB  Offline_disks  Voting_files  Name
MOUNTED  EXTERN  N         512             512   4096  4194304    262144   250256                0          250256              0             Y  DATA/
MOUNTED  EXTERN  N         512             512   4096  4194304    262144   245052                0          245052              0             N  RECO/
```

volcreateコマンドでOracle ADVMボリュームを作成します。+DATAディスクグループに 50GB ほど確保します。

```sql
volcreate -G data -s 50G volume1
volinfo -G data volume1

-- 結果
ASMCMD> volcreate -G data -s 50G volume1
ASMCMD> volinfo -G data volume1
Diskgroup Name: DATA

	 Volume Name: VOLUME1
	 Volume Device: /dev/asm/volume1-274
	 State: ENABLED
	 Size (MB): 51200
	 Resize Unit (MB): 64
	 Redundancy: UNPROT
	 Stripe Columns: 8
	 Stripe Width (K): 1024
	 Usage: 
	 Mountpath: 
```

asmcmd を抜けて作成されたボリュームをlsコマンドで確認してみます。

```shell
$ ls -la /dev/asm/volume1-274 
brwxrwx--- 1 root asmadmin 251, 140290 Apr 30 11:04 /dev/asm/volume1-274
```

/dev配下のデバイスとして参照できます。

# 3. mkfs によるフォーマットと acfsutil によるマウント

mkfsユーティリティでデバイスをフォーマットします。

```shell
/sbin/mkfs -t acfs /dev/asm/volume1-274

#結果
$ /sbin/mkfs -t acfs /dev/asm/volume1-274
mkfs.acfs: version                   = 19.0.0.0.0
mkfs.acfs: on-disk version           = 46.0
mkfs.acfs: volume                    = /dev/asm/volume1-274
mkfs.acfs: volume size               = 53687091200  (  50.00 GB )
mkfs.acfs: Format complete.
$
```

gridユーザーを抜けてrootユーザーにスイッチします。acfsutil でフォーマットしたデバイスをマウントします。

```sql
sudo su -
/sbin/acfsutil registry -a /dev/asm/volume1-274 /acfs1

#結果
# /sbin/acfsutil registry -a /dev/asm/volume1-274 /acfs1
acfsutil registry: mount point /acfs1 successfully added to Oracle Registry
#
```

dfコマンドでマウントされているか確認します。

```sql
# df -k
Filesystem                     1K-blocks     Used Available Use% Mounted on
devtmpfs                        16239508        0  16239508   0% /dev
tmpfs                           16284060  1623140  14660920  10% /dev/shm
tmpfs                           16284060      952  16283108   1% /run
tmpfs                           16284060        0  16284060   0% /sys/fs/cgroup
/dev/mapper/vg00-root           10054932  3964256   5550004  42% /
tmpfs                           16284060      224  16283836   1% /tmp
/dev/mapper/vg00-opt            34438992 13798900  19134760  42% /opt
/dev/mapper/vg00-home             980396      180    911404   1% /home
/dev/sda2                         996780    97020    830948  11% /boot
/dev/mapper/vg00-var            10064220   927952   8637544  10% /var
/dev/sda1                         130798     5138    125660   4% /boot/efi
/dev/mapper/vg00-var_log         3981024    78504   3676424   3% /var/log
/dev/mapper/vg00-var_log_audit   1959784    21028   1817516   2% /var/log/audit
/dev/mapper/vg00-var_tmp          980396       68    911516   1% /var/tmp
/dev/sde                       205314024 26282420 168529460  14% /u01
tmpfs                            3256812        0   3256812   0% /run/user/102
/dev/asm/commonstore-274         5242880   834280   4408600  16% /opt/oracle/dcs/commonstore
tmpfs                            3256812        0   3256812   0% /run/user/101
tmpfs                            3256812        0   3256812   0% /run/user/1000
/dev/asm/volume1-274            52428800   666000  51762800   2% /acfs1 ★★★
```

# 4. ファイル書き込みと異なるノードからの確認

今回は RAC なので複数ノードで ACFS がマウントされています。
```sql
# 1号機の df の結果
[opc@aysoskbasedb19c1 ~]$ uname -a
Linux aysoskbasedb19c1 5.4.17-2136.326.6.el8uek.x86_64 #2 SMP Thu Nov 30 22:30:37 PST 2023 x86_64 x86_64 x86_64 GNU/Linux
[opc@aysoskbasedb19c1 ~]$ df -k /acfs1
Filesystem           1K-blocks   Used Available Use% Mounted on
/dev/asm/volume1-274  52428800 666000  51762800   2% /acfs1
[opc@aysoskbasedb19c1 ~]$
```

```sql
# 2号機の df の結果
[opc@aysoskbasedb19c2 ~]$ uname -a
Linux aysoskbasedb19c2 5.4.17-2136.326.6.el8uek.x86_64 #2 SMP Thu Nov 30 22:30:37 PST 2023 x86_64 x86_64 x86_64 GNU/Linux
[opc@aysoskbasedb19c2 ~]$ df -k /acfs1
Filesystem           1K-blocks   Used Available Use% Mounted on
/dev/asm/volume1-274  52428800 666000  51762800   2% /acfs1
[opc@aysoskbasedb19c2 ~]$
```

```sql
# crsctl のリソース稼働状況
[opc@aysoskbasedb19c2 ~]$ /u01/app/19.0.0.0/grid/bin/crsctl stat res ora.data.volume1.acfs -t
--------------------------------------------------------------------------------
Name           Target  State        Server                   State details
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.data.volume1.acfs
               ONLINE  ONLINE       aysoskbasedb19c1         mounted on /acfs1,ST
                                                             ABLE
               ONLINE  ONLINE       aysoskbasedb19c2         mounted on /acfs1,ST
                                                             ABLE
--------------------------------------------------------------------------------
[opc@aysoskbasedb19c2 ~]$
```

1号機でファイルを書いてみます。

```shell
[oracle@aysoskbasedb19c1 dump]$ pwd
/acfs1/dump
[oracle@aysoskbasedb19c1 dump]$ echo "Hello, ACFS!" > Hello.txt
[oracle@aysoskbasedb19c1 dump]$ ls -la
total 88
drwxr-xr-x 2 oracle oinstall 20480 Apr 30 11:55 .
drwxr-xr-x 5 root   root     32768 Apr 30 11:08 ..
-rw-r--r-- 1 oracle oinstall    13 Apr 30 11:55 Hello.txt
[oracle@aysoskbasedb19c1 dump]$ cat Hello.txt
Hello, ACFS!
[oracle@aysoskbasedb19c1 dump]$
```

書いたファイルを2号機で読んでみます。

```shell
[oracle@aysoskbasedb19c2 dump]$ pwd
/acfs1/dump
[oracle@aysoskbasedb19c2 dump]$ ls -la
total 88
drwxr-xr-x 2 oracle oinstall 20480 Apr 30 11:55 .
drwxr-xr-x 5 root   root     32768 Apr 30 11:08 ..
-rw-r--r-- 1 oracle oinstall    13 Apr 30 11:55 Hello.txt
[oracle@aysoskbasedb19c2 dump]$ cat Hello.txt
Hello, ACFS!
[oracle@aysoskbasedb19c2 dump]$
```

1号機で書かれたファイルを2号機で読み込めました彡(^)(^)

# 5. ACFS のクラスタ・リソースとしての定義確認

acfsutil で登録した ACFS は Oracle Clusterware のクラスタ・リソースとして登録されています。

```sql
# crsctl のリソース稼働状況
[opc@aysoskbasedb19c2 ~]$ /u01/app/19.0.0.0/grid/bin/crsctl stat res ora.data.volume1.acfs -t
--------------------------------------------------------------------------------
Name           Target  State        Server                   State details
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.data.volume1.acfs
               ONLINE  ONLINE       aysoskbasedb19c1         mounted on /acfs1,ST
                                                             ABLE
               ONLINE  ONLINE       aysoskbasedb19c2         mounted on /acfs1,ST
                                                             ABLE
--------------------------------------------------------------------------------
[opc@aysoskbasedb19c2 ~]$
```

-pオプション付きの crsctlコマンドでクラスタ・リソースの定義を確認してみます。

```shell
[grid@aysoskbasedb19c1 ~]$ crsctl stat res ora.data.volume1.acfs -p
NAME=ora.data.volume1.acfs
TYPE=ora.acfs.type
ACFS_INTERNAL_USE=1186418149
ACL=owner:root:rwx,pgrp:root:r-x,other::r--,user:grid:r-x
ACTIONS=
ACTION_SCRIPT=
ACTION_TIMEOUT=60
AGENT_FILENAME=%CRS_HOME%/bin/orarootagent%CRS_EXE_SUFFIX%
AUTO_START=always
AUX_VOLUMES=
CANONICAL_VOLUME_DEVICE=/dev/asm/volume1-274
CHECK_INTERVAL=15
CHECK_TIMEOUT=120
CLEAN_TIMEOUT=60
CSS_CRITICAL=no
DELETE_TIMEOUT=60
DESCRIPTION=CRS resource type for ASM Cluster File Systems
ENABLED=1
FS_DESCRIPTION=
FS_OPTIONS=
FS_TYPE=ACFS
GH_CREATED=0
IGNORE_TARGET_ON_FAILURE=yes
INSTANCE_FAILOVER=1
INTERMEDIATE_TIMEOUT=0
INTERNAL_MOUNTPOINT_PATH=/acfs1
LOAD=1
LOGGING_LEVEL=1
MODIFY_TIMEOUT=60
MOUNTPOINT_PATH=/acfs1
MOUNT_ACL=owner:root:rwx,pgrp:root:r-x,other::r-x
NLS_LANG=
OFFLINE_CHECK_INTERVAL=30
RESOURCE_GROUP=
RESTART_ATTEMPTS=5
RESTART_DELAY=0
SCRIPT_TIMEOUT=60
SERVER_CATEGORY=ora.hub.category
START_CONCURRENCY=0
START_DEPENDENCIES=hard(ora.DATA.VOLUME1.advm) pullup(ora.DATA.VOLUME1.advm,ora.asm)
START_TIMEOUT=500
STOP_CONCURRENCY=0
STOP_DEPENDENCIES=hard(intermediate:ora.DATA.VOLUME1.advm)
STOP_TIMEOUT=120
TARGET_DEFAULT=atleastone
TYPE_VERSION=3.3
UPTIME_THRESHOLD=1d
USER_WORKLOAD=no
USR_ORA_ENV=
VOLUME_DEVICE=/dev/asm/volume1-274
WORKLOAD_CPU=0
WORKLOAD_CPU_CAP=0
WORKLOAD_MEMORY_MAX=0
WORKLOAD_MEMORY_TARGET=0

[grid@aysoskbasedb19c1 ~]$
```

TYPE=ora.acfs.type のリソースとして登録されています。ADVMボリュームとの依存性が定義されています。

# 6. まとめ

OCI BaseDB に ACFS をマウントできました。OSファイル置き場として利用可能なので、皆さん活用して下さいね。
彡(^)(^)