ASMがディスクにアクセスするためには、最低限適切な権限設定を行う必要がある。デバイスパス(デバイス名)に関してもOSがデバイスを認識した順で sda, sdb, … と設定されるため、再起動によってディスクとデバイスパスの対応付けが変化してしまう場合がある。これらを永続化する設定方法がいくつかあるため、簡単にまとめてみる。
udevを使用
OSの設定のみで済ませる最も単純な方法。udevルールを設定し、起動時にASMで使用するディスクに対して適切な権限が付与されるようにする。
設定ファイルは /etc/udev/rules.d/99-oracle.rules のように作成する。簡易的な設定としては以下のようになる。
KERNEL=="sdb", OWNER="grid", GROUP="asmadmin", MODE="0660"
KERNEL=="sdc", OWNER="grid", GROUP="asmadmin", MODE="0660"
/dev/sdb と /dev/sdc の所有者を grid:asmadmin とし、パーミッションを660とする設定。ただし、これだと再起動後にデバイスパスが変動した際に対応しきれない。例えば、OSのディスクが /dev/sdb で認識されて、ASMディスクが /dev/sda となった場合、ASMは /dev/sda にアクセスできなくなってしまう。
これを防ぐには、デバイスパスではなくディスクのシリアル番号などをもとに権限設定するルールファイルを作る。
まず、ASMディスクのシリアル番号を以下のように取得する。
# udevadm info --query=all --name=/dev/sdb | grep ID_SERIAL
E: ID_SERIAL=0QEMU_QEMU_HARDDISK_2869b6e2-c551-48c6-9bfd-be5c2d63d833
E: ID_SERIAL_SHORT=2869b6e2-c551-48c6-9bfd-be5c2d63d833
# udevadm info --query=all --name=/dev/sdc | grep ID_SERIAL
E: ID_SERIAL=0QEMU_QEMU_HARDDISK_fc1b16e4-1576-4b2c-b7ac-c75774c8d684
E: ID_SERIAL_SHORT=fc1b16e4-1576-4b2c-b7ac-c75774c8d684
そしてここで得られたシリアル番号をもとに以下のようなルールを設定する。
SUBSYSTEM=="block", ENV{ID_SERIAL}=="0QEMU_QEMU_HARDDISK_2869b6e2-c551-48c6-9bfd-be5c2d63d833", OWNER="grid", GROUP="asmadmin", MODE="0660"
SUBSYSTEM=="block", ENV{ID_SERIAL}=="0QEMU_QEMU_HARDDISK_fc1b16e4-1576-4b2c-b7ac-c75774c8d684", OWNER="grid", GROUP="asmadmin", MODE="0660"
設定が終わったらOSを再起動して、Grid Infrastructure をインストールする。ASMディスクの選択時にディスク検出パスがデフォルトで/dev/sd* と設定されているので、/dev/sdb などのデバイスパスを直接指定すればよい。
ASMLIBを使用
現在Oracleが推奨しているのはこの方法。
Oracle ASMLIBを使用したストレージ・デバイス・パスの永続性の構成
デバイスに対してラベル付けを行い、ASMはそのラベルをもとにASMディスクを認識する。権限設定は自動で行ってくれるため、udevルールを記載する必要は無い。
ASMLIBを使用するためには、別途 oracleasmlib と oracleasm-support という二つのパッケージをインストールする必要がある。Oracle LinuxについてはOracleが提供しているrpmファイルから入手可能。例えばOracle Linux 9であれば以下からダウンロードできる。その時点での最新版を利用すればよいだろう。
oracleasmlib: Oracle ASMLib Downloads for Oracle Linux 9
oracleasm-support: Oracle Linux 9 (x86_64) Addons | Oracle, Software. Hardware. Complete.
参考: Oracle Linux Installing and Configuring Oracle ASMLIB v3 (英語版マニュアル)
参考: https://docs.oracle.com/cd/F61410_01/asmlib/index.html (日本語版マニュアル)
RHELの場合はこれらの提供元がRedHatになるため、入手方法などの詳細はRedHat側に確認が必要になる。
以降、Grid Infrastructureをインストールする前にASMLIBを構成する方法を記載する。
まず、入手したrpmファイルからパッケージを以下のようにインストールする。
# rpm -ivh oracleasmlib-3.1.1-1.el9.x86_64.rpm oracleasm-support-3.1.1-3.el9.x86_64.rpm
次に、構成の初期化を行う。Grid InfrastructureのインストールユーザとASMの管理者グループの入力が必要。ここではそれぞれ grid、asmdba とし、それ以外のデフォルト値があるものはそれに従うことにする。これはクラスタのすべてのノードで実行する。
# oracleasm configure -i
Configuring the Oracle ASM system service.
This will configure the on-boot properties of the Oracle ASM system
service. The following questions will determine whether the service
is started on boot and what permissions it will have. The current
values will be shown in brackets ('[]'). Hitting <ENTER> without
typing an answer will keep that current value. Ctrl-C will abort.
Default user to own the ASM disk devices []: grid
Default group to own the ASM disk devices []: asmdba
Start Oracle ASM system service on boot (y/n) [y]:
Scan for Oracle ASM disks when starting the oracleasm service (y/n) [y]:
Maximum number of ASM disks that can be used on system [2048]:
Enable iofilter if kernel supports it (y/n) [y]:
Writing Oracle ASM system service configuration: done
Configuration changes only come into effect after the Oracle ASM
system service is restarted. Please run 'systemctl restart oracleasm'
after making changes.
WARNING: All of your Oracle and ASM instances must be stopped prior
to restarting the oracleasm service.
OS起動時に有効になるように以下も実行する。
# systemctl enable --now oracleasm
続いて、ASMディスクの準備を行う。ASMLIBを使用するには対象のディスクにパーティションが切られている必要があることに注意が必要。ディスク全体を使用する場合であっても、以下のようにパーティションを作成しておかなければならない。
# parted -s /dev/sdb mklabel msdos mkpart primary 0% 100%
# parted -s /dev/sdc mklabel msdos mkpart primary 0% 100%
ディスクの準備ができたら、ラベル付けを行う。これはクラスタのいずれかのノードで行えばよい。二つのディスクにそれぞれ OCR1、DATA1というラベルを付ける場合以下のようになる。
# oracleasm createdisk OCR1 /dev/sdb1
# oracleasm createdisk DATA1 /dev/sdc1
ラベル付け後、全てのクラスタノードに設定を反映させるためにOSを再起動する。
Grid Infrastructure のインストール時は、何も設定しないとディスクの検出パスにASMLIBのラベルが設定されていない。そのため、「検出パスの変更」ボタンを押して「/dev/sd*, ORCL:*」のようにラベル設定を追記する必要がある。

あとは、ORCL:OCR1 のように表示されたディスクを使ってディスクグループを作成すればよい。
ASMフィルタドライバを使用する方法(サポート終了)
もう一つ、ASMフィルタドライバ(ASMFD)を使用する方法がかつて存在した。12.1で登場した機能だが、19cでいつの間にか非推奨となり、26aiではサポートが終了してしまった。そのためここでは紹介しないことにする。
Oracle Databaseの変更、サポート終了および非推奨
Oracle ASMフィルタ・ドライバ(ASMFD)の非推奨
Oracle ASMフィルタ・ドライバ(ASMFD)は、Oracle Database 19c以降、LinuxとOracle Solarisの両方で非推奨になりました。今後のリリースでサポートが終了する予定です。
Oracle ASMフィルタ・ドライバ(ASMFD)のサポート終了
Oracle ASMフィルタ・ドライバ(ASMFD)は、Oracle AI Database 26ai以降、LinuxとOracle Solarisの両方でサポートが終了しました。
余談だが、本ブログではASMFDを使用した手順をいくつか記載しているものがある。技術的にはASMLIBの方が先に存在しており、後から出てきたASMFDをOracleは推奨していたはずである。突然それをひっくり返してサポートを終了するというのは、ちょっと乱暴なのではないか。今推奨されているASMLIBにしても、いつまで安心して使えるかわからない。
個人的には、オーソドックスにudevを使用した構成をとるのが最も賢明だと考える。

コメント