OCIのDBCSでオブジェクトストレージをマウントする [OCI]

 ウクライナと円安の行方が心配な今日この頃、一歩間違えれば、生活が激変する可能性もある状況で、いまのところ平和に生活できていることに幸せを感じる。今日はOCIのDBCSでオブジェクトストレージをマウントする方法とその性能について、調べたことを記載しておきたい。

1.はじめに


 OCIのOracleマネージドサービスであるDBCSは、ローカルディスク(/u01配下)が200GB、うち、製品で25GB程度はデフォルトで使われてしまう。運用していくうちにログファイル等が大きくなっていくことから、ローカルディスクとして使える領域はせいぜい100~150GBGB程度と考えられる。DBCSはブロックストレージを追加することができないため、ローカルディスクに大きなファイル(ダンプファイルなど)を置く必要がある場合、困ってしまう。
 そんなときに役に立つのが、オブジェクトストレージである。DBCSからオブジェクトストレージをファイルシステムとしてマウントすれば、広大な領域をNAS領域のように利用可能となる。しかも、オブジェクトストレージは安価なコストで利用できるため、大きなファイルを長期間置いておく必要がある場合に非常に有益である。もともとオブジェクトストレージはNASのような階層型のファイルシステムを持たず、フラットな構造でデータを格納する方式なので、NASのような性能を期待してはいけない。
 MOSにはOCIのオブジェクトストレージをマウントする方法が公開されている(参考1)。今回、OCIのalways freeを使い、DBCSから実際にオブジェクトストレージをマウントする手順を確認した。権限に関して、マウントオプションの注意点があるので、それもあわせて記載している。また、性能に関してはRMANでDBのフルバックアップを取得し、ローカルディスクとオブジェクトストレージでどの程度性能差があるかを確認したので、その結果もあわせて記載する。

2.オブジェクトストレージのマウント手順


 前提として、オブジェクトストレージのマウント手順は、参考1に記載のMOSドキュメントに従うが、前提としてyumリポジトリを構成するなどの前提作業が必要になるので、これらを含めてDBCSで実施した手順を記載しておく。

(1)オブジェクトストレージの作成


 OCIのコンソールからマウント対象となるオブジェクトストレージを作成する。ハンバーガーメニューから、ストレージ→バケットを選択。Create Bucketで適当なバケット名を指定し作成する。ここではbucketという名前で作成する。
20221016_bucket.JPG

 作成したオブジェクトストレージを選択し、詳細情報画面からネームスペース名を確認しておく。後に利用するので、以下のようにメモしておく。
20221016_bucktNamespace.JPG

 ネームスペース:nrudxxkfnfy8

(2)カスタマー秘密鍵の作成


 ユーザのカスタマー秘密鍵を作成する。右上のユーザアイコンから、My profileを選択する。
20221016_profilememu.JPG

 左のメニューからCustomer secret keysを選択し、Generate secret keyを押下する。Nameに適当な名前を指定し、Generate secret keyを押下する。ここではs3fs-accessという名前を指定して作成する。すると、以下のようにGenerated keyが表示されるので、秘密鍵をコピーしておく(この画面を閉じると2度と表示されないので注意)。
20221016_generateSecretKey.JPG

20221016_secretKey.JPG

 作成された秘密鍵が表示されるので、そのアクセスキーIDをコピーしておく。このアクセスキーIDと上記秘密鍵は後に使うので、以下のようにメモしておくこと良い。
20221016_accessKeyID.JPG

 アクセスキーID = b92ce3ed0ff046e03a5ba0a85310cc8a7f591480
 秘密鍵 = yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyNSyVM=

(3)yumリポジトリの構成


 DBCSのrootで以下コマンドを実行し、yumリポジトリを構成する(すでにyumが利用できる状態であれば不要)。
[root@oradb dev]# cd /etc/yum.repos.d
[root@oradb yum.repos.d]# ls
[root@oradb ~]# cd /etc/yum.repos.d
[root@oradb yum.repos.d]# wget http://yum-tokyo.oracle.com/yum-tokyo-ol7.repo
--2022-10-10 19:26:30--  http://yum-tokyo.oracle.com/yum-tokyo-ol7.repo
Resolving yum-tokyo.oracle.com (yum-tokyo.oracle.com)... 192.29.43.236, 192.29.45.0
Connecting to yum-tokyo.oracle.com (yum-tokyo.oracle.com)|192.29.43.236|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 18747 (18K) [application/octet-stream]
Saving to: ‘yum-tokyo-ol7.repo’

100%[=========================================================================================>] 18,747      --.-K/s   in 0s

2022-10-10 19:26:30 (434 MB/s) - ‘yum-tokyo-ol7.repo’ saved [18747/18747]

[root@oradb yum.repos.d]# ls -l
total 20
-rw-r--r--   1 root root 18747 Sep 20 02:28 yum-tokyo-ol7.repo

(4)s3fsのインストール


 DBCSのrootで以下コマンドを実行し、s3fs-fuseをインストールする。
[root@oradb ~]# yum install s3fs-fuse

(5)パスワードファイルの構成


 DBCSのrootで、パスワードファイルを作成し、権限を600に設定する。ファイルに記載する内容は<アクセスキーID>:<秘密鍵>とする。
[root@oradb ~]# vi ${HOME}/.passwd-s3fs
[root@oradb ~]# cat ${HOME}/.passwd-s3fs
b92ce3ed0ff046e03a5ba0a85310cc8a7f591480:yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyNSyVM=
[root@oradb ~]# chmod 600 ${HOME}/.passwd-s3fs
[root@oradb ~]# ll ${HOME}/.passwd-s3fs
-rw------- 1 root root 86 Oct 10 19:46 /root/.passwd-s3fs

(6)マウントポイントの作成


 DBCSのrootでマウントポイントを作成する。ここでは例として/mnt/bucketをマウントポイントとする。
[root@oradb ~]# mkdir -p /mnt/bucket

(7)オブジェクトストレージをマウント


 DBCSのrootでs3fsコマンドを実行し、オブジェクトストレージをマウントするが、ここでバケット名やマウントポイント以外に、オブジェクトストレージのネームスペース、およびリージョン名(OCI東京リージョンならap-tokyo-1など)を入れる必要がある。
 s3fs <バケット名> <マウントポイント名> -o url=https://<ネームスペース名>.compat.objectstorage.<リージョン名>.oraclecloud.com -o nomultipart -o use_path_request_style -o endpoint=<リージョン名>
 ここでは具体的に以下のコマンドでマウントした。allow_otherというオプションを付与しているのは、後に説明する権限問題を回避するためである。
[root@oradb mnt]# s3fs bucket /mnt/bucket -o url=https://nrudxxkfnfy8.compat.objectstorage.ap-tokyo-1.oraclecloud.com -o nomultipart -o use_path_request_style -o endpoint=ap-tokyo-1 -o allow_other

オブジェクトストレージがマウントされていることをdfコマンドで確認する。16E(エクサバイト)の広大な領域が利用可能なことがわかる。
[root@oradb ~]# df -h
Filesystem                      Size  Used Avail Use% Mounted on
devtmpfs                        7.7G     0  7.7G   0% /dev
tmpfs                           7.7G  1.1G  6.7G  15% /dev/shm
tmpfs                           7.7G   41M  7.7G   1% /run
tmpfs                           7.7G     0  7.7G   0% /sys/fs/cgroup
/dev/mapper/vg00-root           9.6G  2.9G  6.2G  32% /
/dev/mapper/vg00-var            5.7G  991M  4.5G  19% /var
/dev/mapper/vg00-home           960M  2.7M  891M   1% /home
/dev/mapper/vg00-opt             39G  6.3G   31G  17% /opt
/dev/sda2                       488M  235M  218M  52% /boot
/dev/mapper/vg00-var_log        3.8G   21M  3.6G   1% /var/log
/dev/mapper/vg00-var_log_audit  1.9G   11M  1.8G   1% /var/log/audit
/dev/sda1                       128M  7.3M  121M   6% /boot/efi
tmpfs                           7.7G  608K  7.7G   1% /tmp
tmpfs                           7.7G   24K  7.7G   1% /var/tmp
/dev/sdj                        196G   23G  163G  13% /u01
/dev/asm/commonstore-363        5.0G  386M  4.7G   8% /opt/oracle/dcs/commonstore
tmpfs                           1.6G     0  1.6G   0% /run/user/102
tmpfs                           1.6G     0  1.6G   0% /run/user/1000
s3fs                             16E     0   16E   0% /mnt/bucket ★

マウントポイントの権限を確認すると777となっているため、oracleユーザでも書き込みが可能なことがわかる。
[root@oradb ~]# ll -d /mnt/bucket
drwxrwxrwx 1 root root 0 Jan  1  1970 /mnt/bucket

なお、もしallow_otherを付与しないと、以下のようにroot以外アクセスできなくなる。この状態でrootで権限を変えることができないため、oracleユーザに権限を付与することができない。oracleユーザで利用できないとrmanもexpdp/impdpでも利用できないため、DBCSで利用する目的であれば、このオプションを付与したほうがよいだろう。セキュリティ的に気になるのであれば、oracleユーザでオブジェクトストレージのマウントをすることもできるが、自動マウント設定(fstab)などを考えるとrootでマウントしてしまうほうが使い勝手がよい。
[root@oradb opc]# ll -d /mnt/bucket/
drwx------ 1 root root 0 Jan  1  1970 /mnt/bucket/

(8)自動マウント設定(fstabへ記載)


 OS再起動でオブジェクトストレージが自動マウントされるように/etc/fstabの末尾に以下のエントリを追記する。基本的に、上記mountコマンドで実行したオプションを記載する
# s3fs
bucket /mnt/bucket fuse.s3fs nomultipart,use_path_request_style,passwd_file=/root/.passwd-s3fs,url=https://nrudxxkfnfy8.compat.objectstorage.ap-tokyo-1.oraclecloud.com,endpoint=ap-tokyo-1,allow_other

 上記設定後、umount/mountコマンドで当該マウントポイントのアンマウント・マウントの正常動作を確認しておく。以上で設定は完了である。

3.性能比較


 ローカルディスクとオブジェクトストレージでどの程度違いがあるか、RMANバックアップを取得し、バックアップ時間を比較してみた。オブジェクトストレージマウントした場合と、ローカルディスク(/u01配下)の場合で比較する。バックアップは単純にDB全体のバックアップコピーを取得することで行った。DBのサイズは概ね4GB弱である。

(1)ローカルディスクへのバックアップ


run {
CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT '/u01/app/oracle/bkup/full_%u_%s_%p';
backup as copy tag 'fullbackup_disk' database;
}

(2)オブジェクトストレージへのバックアップ


run {
CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT '/mnt/bucket/full_%u_%s_%p';
backup as copy tag 'fullbackup_objstg' database;
}

 RMANのreport schemaコマンドの結果に上記rmanバックアップ時のログを対応付け、データファイル毎のバックアップ時間を整理したのが以下の結果である。この結果では、ローカルディスクの性能が56MB/secに対し、オブジェクトストレージは11MB/sec程度であり、20%程度の性能であることがわかる。
20221016_RMANdiskperf.jpg

なお、以下のように2パラにすることで、オブジェクトストレージも若干の性能向上(17MB/s)を確認することができた。残念ながら、今回検証用に使ったDBCSが2コアだったからか、2パラ以上の性能向上は確認できなかった。
run {
CONFIGURE DEVICE TYPE DISK PARALLELISM 2;
CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT '/mnt/bucket/full_%u_%s_%p';
backup as copy tag 'fullbackup_objstg2' database;
}

4.まとめ


 本稿では、OCIのDBCSからオブジェクトストレージのマウント方法と、RMANのバックアップにおける性能比較結果について述べた。OCIのオブジェクトストレージマウント方法については参考1のMOSドキュメントに記載されているものの、DBCSで使うためにはoracleユーザで読み書きする権限が必要なため、マウント時にallow_otherオプションを付与すると良い。オブジェクトストレージは広大な領域を安価に利用できる反面、性能は期待できない。実際、RMANのフルバックアップでは、DBCSのローカルディスクに比べ、20%の性能にとどまることが確認できた。アーカイブ領域として割り切って使うことが望ましいだろう。もし性能が必要な場合は(高価ではあるが)OCIのファイルストレージを利用すればよい。

◆参考1


Oracle Cloud Infrastructure - How to Mount an ObjectStorage Bucket as Filesystem in Oracle Linux 7 (ドキュメントID 2577407.1)

nice!(0)  コメント(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

※ブログオーナーが承認したコメントのみ表示されます。