はじめに
Oracle Cloud Infrastructure では、フルマネージドなファイルストレージサービスが提供されています。
Oracle Cloud側で管理されているファイルシステムを、運用をあまり意識せずに利用できるため、つかいやすいサービスとなっていると思います。
主なユースケースは以下のものがあります。
- 汎用的なファイルストレージ : 汎用的なファイルシステムとして利用
- ビッグデータと分析
- 既存システムのLift : 既存システムでは、NFSを使用してファイル共有を行う場合は多いと思います。既存システムからの移行に柔軟に対応可能です
- データベースのトランザクションアプリケーション
- バックアップ、DR
今回の記事では、File Storage を利用するまでの手順を確認していきます。
File Storageの構成要素
FIle Storage サービスの構成要素は、若干複雑です。まず初めに、簡単な概要図を見て関係性を理解しましょう。
Filesystem
OCI側で管理されている、フルマネージドなファイルシステムです。利用側から運用を意識することはありません。
自動的に、エクサバイト級の容量までスケールアップするため、ほぼ容量を気にせず使うことが出来ます。
注意点は、Availability Domain 内に作成するため、AD・Regionの障害ために定期的なバックアップなどを検討する必要があります。(2019年4月現在)
Mount Target
Filesystemをエクスポートするための、NFSエンドポイント。VCNのSubnet上に作成する形となり、Subnet上のインスタンスから、IPアドレスやDNS名を指定することで、NFSマウントを行うことが出来ます。
1つのMount Targetに、複数のExportを作成することで、複数のFilesystemをエクスポートすることが出来ます。
Mount Targetの作成上限(Service Limit)が存在しており、初期状態ではAvailability Domain単位で2個までとなっています。上限の緩和は申請可能。
Mount Targetに紐づけたいFilesystemは、それぞれ同一のAvailability Domain で作成する必要があります。
下記のmountコマンドを例にすると、10.0.0.3
の部分を作成することができます。
mount -v -t nfs -o vers=3 10.0.0.3:/scrachfs1 /mnt/fs01
Export
Mount Target 上で管理されており、Filesystemに紐づく NFSのPathを指定することが出来ます。
下記のmountコマンドを例にすると、/scrachfs1
の部分を任意のPathでExportすることができます。
mount -v -t nfs -o vers=3 10.0.0.3:/scrachfs1 /mnt/fs01
VCN上のインスタンスからマウント
VCN上のインスタンスからマウントするまでの手順を確認してみましょう。
Mount Target
Mount Target を作成します。subnetid などのパラメータは、環境に合わせて変更してください
oci fs mount-target create --availability-domain TGjA:PHX-AD-3 --subnet-id ocid1.subnet.oc1.phx.secret --display-name scrachmounttarget
Mount Target作成時に、自動的に作成される Export Set の OCID を取得して、esid
変数へ格納します。
set esid (oci fs export-set list --availability-domain TGjA:PHX-AD-3 --display-name "scrachmounttarget - export set" | jq -r ".data[0].id")
Filesystem
Filesystemを作成します。
oci fs file-system create --availability-domain TGjA:PHX-AD-3 --display-name scrachfs
FilesystemのOCIDを取得して、fsid
変数へ格納します。
set fsid (oci fs file-system list --availability-domain TGjA:PHX-AD-3 --display-name scrachfs | jq -r ".data[0].id")
Export
oci fs export create --export-set-id $esid --file-system-id $fsid --path "/scrachfs"
Security List で Portを開放
Security List で以下のルールを開放します。NFSプロトコルとして、以下のポートを開ける必要があります。
- Ingress Rules
- TCP Destination Port 111
- TCP Destination Port 2048-2050
- UDP Destination Port 111
- UDP Destination Port 2048
- Egress
- TCP Source Port 2048-2050
- TCP Source Port 111
- UDP Source Port 111
対象PortのDocument
https://docs.cloud.oracle.com/iaas/Content/File/Tasks/securitylistsfilestorage.htm
NFS Client からマウント
OCIのCompute Instaceを適当に作成し、showmountで、File Storage が公開されているか確認します。
> showmount -e 10.0.0.3
Export list for 10.0.0.3:
/scrachfs1 (everyone) <============= このような表示で見えていればOK
>
InstanceへNFSマウントを行います。
sudo mkdir /mnt/fs01
sudo mount -v -t nfs -o vers=3 10.0.0.3:/scrachfs1 /mnt/fs01
容量を確認します。Mount元のOSからは8.0エクサバイトで認識されています。おそらく、実際に8.0エクサバイトは確保されてはおらず、実際の使用容量とともに確保容量が増えていくのだと思います。
# df -hT
Filesystem Type Size Used Avail Use% Mounted on
udev devtmpfs 7.4G 0 7.4G 0% /dev
tmpfs tmpfs 1.5G 960K 1.5G 1% /run
/dev/sda1 ext4 45G 1.3G 44G 3% /
tmpfs tmpfs 7.4G 0 7.4G 0% /dev/shm
tmpfs tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs tmpfs 7.4G 0 7.4G 0% /sys/fs/cgroup
/dev/sda15 vfat 105M 3.6M 101M 4% /boot/efi
/dev/loop0 squashfs 90M 90M 0 100% /snap/core/6673
/dev/loop1 squashfs 15M 15M 0 100% /snap/oracle-cloud-agent/3
tmpfs tmpfs 1.5G 0 1.5G 0% /run/user/1001
10.0.0.3:/scrachfs1 nfs 8.0E 0 8.0E 0% /mnt/fs01 <========= ここの部分
適当にファイルを作成してみます
echo "mieru-?" > /mnt/fs01/test.txt
中身を確認します
> cat /mnt/fs01/test.txt
mieru-?
tips
- Filestorageのパフォーマンスをよくしたい場合は、FilesystemとMount元のインスタンスを同一ADで作成すると良い。