こんにちは!s.tanakaです。
今回はOracle Linuxにオブジェクトストレージをファイルシステムとしてマウントする方法をご紹介します!
Storage Gatewayやファイルシステムより安価で利用することが可能です。
マウント手順
ObjectStorageの作成
1. まずマウント先のバケットを作成します。
「ストレージ」→「バケット」メニューから「バケットの作成」を選択します。
2. 今回は「TestBucket」という名前のバケットを作成します。
必要な項目の入力が完了したら、「作成」を選択します。
3. 正常にバケット「TestBucket」が作成されました。
顧客秘密キーの設定
顧客秘密キーの設定を行います。
1. 右上のユーザアイコンをクリックし、「ユーザ設定」を選択します。
2. 左下メニューの「顧客秘密キー」→「秘密キーの生成」を選択します。
3. 任意の名前を入力し、「秘密キーの生成」を選択します。
生成されたアクセスキー、秘密キーは後ほどLinuxの設定の際に使用するので、どこかにコピーしておきましょう。
Oracle Linuxの設定
次にOracleLinuxの設定を行います。
今回はOracle Linux 7.9で動作確認を行っています。
1. 以下コマンドを実行し、s3fs-fuseパッケージをインストールします。
s3fs-fuseインストール時にはEPELリポジトリを有効にする必要があるため、OracleLinuxに標準で登録されている「ol7_developer_EPEL」を一時的に有効にしてインストールしています。
yum --enablerepo=ol7_developer_EPEL install -y s3fs-fuse
2. 以下コマンドを実行し、キー情報をファイルに入力します。
アクセスキー、秘密キーは手順「顧客秘密キーの設定」で生成したキーを入力します。
echo アクセスキー:秘密キー > ${HOME}/.passwd-s3fs
パーミッションの設定もしておきましょう。
chmod 600 ${HOME}/.passwd-s3fs
3. マウント先のディレクトリを作成します。
今回は/mnt/ObjectStorageディレクトリにマウントします。
mkdir /mnt/ObjectStorage
4. 以下コマンドを実行し、オブジェクトストレージをマウントします。
s3fs バケット名 マウント先ディレクトリ -o endpoint=リージョン名 -o passwd_file=${HOME}/.passwd-s3fs -o url=https://オブジェクトストレージネームスペース名.compat.objectstorage.リージョン名.oraclecloud.com/ -onomultipart -o use_path_request_style
今回使用している環境のコマンド例は以下のような形になります。
s3fs TestBucket /mnt/ObjectStorage -o endpoint=ap-tokyo-1 -o passwd_file=${HOME}/.passwd-s3fs -o url=https://オブジェクトストレージネームスペース名.compat.objectstorage.ap-tokyo-1.oraclecloud.com/ -onomultipart -o use_path_request_style
5. 実際にマウントされたか確認してみます。
以下コマンドで適当なtest.txtファイルを作成してみます。
touch /mnt/ObjectStorage/test.txt
作成できたらバケットのオブジェクトを確認してみます。
Linuxで作成したファイルが表示されています。
正常にマウントすることができました!
6. 再起動時、自動でマウントしたい場合には/etc/fstabに以下記述を追記します。
バケット名 マウント先ディレクトリ fuse.s3fs use_path_request_style,passwd_file=/root/.passwd-s3fs,url=https://オブジェクトストレージネームスペース名.compat.objectstorage.リージョン名.oraclecloud.com/,endpoint=リージョン名
以下のように、オプションを記載することも可能です。
バケット名 マウント先ディレクトリ fuse.s3fs use_path_request_style,passwd_file=/root/.passwd-s3fs,url=https://オブジェクトストレージネームスペース名.compat.objectstorage.リージョン名.oraclecloud.com/,endpoint=リージョン名,kernel_cache,multipart_size=128,parallel_count=50,multireq_max=100,max_background=1000,_netdev,nonempty
IOPS、スループット等を測定してみる。
ここまでの手順でオブジェクトストレージをマウントすることができました!
どの程度IOPS、スループット等の性能が出るかも測定してみます。
今回はfioコマンドを使用して測定してみました。
1. 以下コマンドを実行し、fioコマンドをインストールします。
yum --enablerepo=ol7_developer_EPEL install -y fio
2. 以下コマンドを実行し、性能テストをしてみます。
※fioコマンドの詳細な内容については割愛します。
sudo fio --filename=/mnt/ObjectStorage/test --size=5GB --direct=1 --rw=randrw --bs=4k --ioengine=libaio --iodepth=256 --runtime=120 --numjobs=4 --time_based --group_reporting --name=iops-test-job --eta-newline=1
実行結果を見るとIOPS 150スループット600KiB/s程度という結果になりました。
[root@instance-20211124-1409 ~]# sudo fio --filename=/mnt/ObjectStorage/test --size=5GB --direct=1 --rw=randrw --bs=4k --ioengine=libaio --iodepth=256 --runtime=120 --numjobs=4 --time_based --group_reporting --name=iops-test-job --eta-newline=1
iops-test-job: (g=0): rw=randrw, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=256
...
fio-3.7
Starting 4 processes
iops-test-job: Laying out IO file (1 file / 5120MiB)
Jobs: 4 (f=1)
Jobs: 4 (f=2): [m(4)][2.5%][r=0KiB/s,w=0KiB/s][r=0,w=0 IOPS][eta 01m:58s]
(中略)
Jobs: 4 (f=4): [f(4)][100.0%][r=0KiB/s,w=0KiB/s][r=0,w=0 IOPS][eta 00m:00s]
iops-test-job: (groupid=0, jobs=4): err= 0: pid=7187: Wed Nov 24 07:06:04 2021
read: IOPS=152, BW=612KiB/s (626kB/s)(71.7MiB/120018msec)
slat (usec): min=12, max=587424, avg=2458.54, stdev=7724.04
clat (msec): min=25, max=64591, avg=1524.86, stdev=1193.82
lat (msec): min=25, max=65125, avg=1527.32, stdev=1199.59
clat percentiles (msec):
| 1.00th=[ 75], 5.00th=[ 155], 10.00th=[ 296], 20.00th=[ 558],
| 30.00th=[ 902], 40.00th=[ 1200], 50.00th=[ 1469], 60.00th=[ 1821],
| 70.00th=[ 2106], 80.00th=[ 2433], 90.00th=[ 2735], 95.00th=[ 2869],
| 99.00th=[ 3037], 99.50th=[ 3104], 99.90th=[ 3205], 99.95th=[ 3205],
| 99.99th=[17113]
bw ( KiB/s): min= 104, max= 2496, per=53.07%, avg=324.26, stdev=294.91, samples=440
iops : min= 26, max= 624, avg=81.02, stdev=73.74, samples=440
write: IOPS=156, BW=627KiB/s (642kB/s)(73.5MiB/120018msec)
slat (usec): min=25, max=63976k, avg=16133.26, stdev=656564.07
clat (usec): min=3, max=3248.5k, avg=1499360.91, stdev=886883.62
lat (msec): min=5, max=64031, avg=1515.49, stdev=1098.92
clat percentiles (msec):
| 1.00th=[ 70], 5.00th=[ 148], 10.00th=[ 292], 20.00th=[ 542],
| 30.00th=[ 894], 40.00th=[ 1167], 50.00th=[ 1452], 60.00th=[ 1787],
| 70.00th=[ 2089], 80.00th=[ 2433], 90.00th=[ 2702], 95.00th=[ 2869],
| 99.00th=[ 3037], 99.50th=[ 3071], 99.90th=[ 3171], 99.95th=[ 3205],
| 99.99th=[ 3239]
bw ( KiB/s): min= 88, max= 2728, per=53.16%, avg=332.76, stdev=312.76, samples=440
iops : min= 22, max= 682, avg=83.15, stdev=78.20, samples=440
lat (usec) : 4=0.01%, 10=0.01%
lat (msec) : 10=0.01%, 50=0.11%, 100=2.07%, 250=5.45%, 500=10.69%
lat (msec) : 750=7.80%, 1000=6.81%
cpu : usr=0.03%, sys=0.81%, ctx=55867, majf=0, minf=50
IO depths : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=0.2%, 32=0.3%, >=64=99.3%
submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.1%
issued rwts: total=18356,18812,0,0 short=0,0,0,0 dropped=0,0,0,0
latency : target=0, window=0, percentile=100.00%, depth=256
Run status group 0 (all jobs):
READ: bw=612KiB/s (626kB/s), 612KiB/s-612KiB/s (626kB/s-626kB/s), io=71.7MiB (75.2MB), run=120018-120018msec
WRITE: bw=627KiB/s (642kB/s), 627KiB/s-627KiB/s (642kB/s-642kB/s), io=73.5MiB (77.1MB), run=120018-120018msec
3. 比較として、ブートボリュームに対して同様のコマンドを実行してみます。
sudo fio --filename=/root/test --size=5GB --direct=1 --rw=randrw --bs=4k --ioengine=libaio --iodepth=256 --runtime=120 --numjobs=4 --time_based --group_reporting --name=iops-test-job --eta-newline=1
実行結果を見ると。IOPS 1500スループット6000KiB/s程度という結果になりました。
オブジェクトストレージに比べ、10倍の性能が出ていますね。
[root@instance-20211124-1409 ~]# sudo fio --filename=/root/test --size=5GB --direct=1 --rw=randrw --bs=4k --ioengine=libaio --iodepth=256 --runtime=120 --numjobs=4 --time_based --group_reporting --name=iops-test-job --eta-newline=1
iops-test-job: (g=0): rw=randrw, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=256
...
fio-3.7
Starting 4 processes
iops-test-job: Laying out IO file (1 file / 5120MiB)
Jobs: 4 (f=4): [m(4)][3.3%][r=5796KiB/s,w=6172KiB/s][r=1449,w=1543 IOPS][eta
(中略)
Jobs: 4 (f=4): [m(4)][100.0%][r=5624KiB/s,w=5660KiB/s][r=1406,w=1415 IOPS][eta 00m:00s]
iops-test-job: (groupid=0, jobs=4): err= 0: pid=10188: Wed Nov 24 07:15:31 2021
read: IOPS=1519, BW=6079KiB/s (6225kB/s)(713MiB/120177msec)
slat (nsec): min=1422, max=30032k, avg=1310300.13, stdev=3583153.27
clat (usec): min=1619, max=636689, avg=308754.26, stdev=81855.72
lat (usec): min=1623, max=636691, avg=310064.73, stdev=81999.46
clat percentiles (msec):
| 1.00th=[ 20], 5.00th=[ 241], 10.00th=[ 247], 20.00th=[ 255],
| 30.00th=[ 262], 40.00th=[ 268], 50.00th=[ 275], 60.00th=[ 288],
| 70.00th=[ 342], 80.00th=[ 397], 90.00th=[ 439], 95.00th=[ 460],
| 99.00th=[ 481], 99.50th=[ 489], 99.90th=[ 506], 99.95th=[ 510],
| 99.99th=[ 600]
bw ( KiB/s): min= 1240, max= 6976, per=24.97%, avg=1517.86, stdev=336.70, samples=960
iops : min= 310, max= 1744, avg=379.46, stdev=84.18, samples=960
write: IOPS=1519, BW=6078KiB/s (6224kB/s)(713MiB/120177msec)
slat (nsec): min=1502, max=34478k, avg=1314241.95, stdev=3585737.41
clat (msec): min=3, max=740, avg=362.39, stdev=91.61
lat (msec): min=3, max=740, avg=363.71, stdev=91.75
clat percentiles (msec):
| 1.00th=[ 25], 5.00th=[ 255], 10.00th=[ 268], 20.00th=[ 288],
| 30.00th=[ 309], 40.00th=[ 334], 50.00th=[ 355], 60.00th=[ 384],
| 70.00th=[ 409], 80.00th=[ 439], 90.00th=[ 477], 95.00th=[ 514],
| 99.00th=[ 584], 99.50th=[ 600], 99.90th=[ 642], 99.95th=[ 651],
| 99.99th=[ 684]
bw ( KiB/s): min= 1168, max= 7096, per=24.96%, avg=1517.04, stdev=342.17, samples=960
iops : min= 292, max= 1774, avg=379.25, stdev=85.54, samples=960
lat (msec) : 2=0.01%, 4=0.01%, 10=0.18%, 20=0.69%, 50=0.64%
lat (msec) : 100=0.04%, 250=6.93%, 500=88.16%, 750=3.36%
cpu : usr=0.19%, sys=0.45%, ctx=45798, majf=0, minf=50
IO depths : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=0.1%, 32=0.1%, >=64=99.9%
submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.1%
issued rwts: total=182646,182599,0,0 short=0,0,0,0 dropped=0,0,0,0
latency : target=0, window=0, percentile=100.00%, depth=256
Run status group 0 (all jobs):
READ: bw=6079KiB/s (6225kB/s), 6079KiB/s-6079KiB/s (6225kB/s-6225kB/s), io=713MiB (748MB), run=120177-120177msec
WRITE: bw=6078KiB/s (6224kB/s), 6078KiB/s-6078KiB/s (6224kB/s-6224kB/s), io=713MiB (748MB), run=120177-120177msec
Disk stats (read/write):
sda: ios=182526/182508, merge=5/54, ticks=10210712/20053534, in_queue=30072216, util=99.94%
まとめ
今回はLinuxへのオブジェクトストレージをマウントする方法をご紹介させて頂きました!
性能についても軽く測定してみましたが、直接オブジェクトストレージをマウントした場合、IOPSスループット共に速度が遅めでした。
リアルタイムで頻繁に読み書きが発生するファイルの保存先向かないと思いますが、アクセス頻度が少ないファイルの保存先として良いかと思います。
利用用途を検討し、有効に活用頂ければと思います!
最後まで読んで頂きありがとうございました!