概要
EFS(Elastic File System)の作り方を確認した時のメモです。
確認用としてap-northeast-1aとap-northeast-1cにそれぞれEC2インスタンスを作成し、EFSで作成したファイルシステムをマウントします。
参考
- [Amazon EFS Features] (https://aws.amazon.com/jp/efs/features/)
- [Getting Started with Amazon Elastic File System] (https://docs.aws.amazon.com/efs/latest/ug/getting-started.html)
- [Troubleshooting Amazon EFS] (https://docs.aws.amazon.com/efs/latest/ug/troubleshooting.html)
VPC
VPCを作成したら「DNSホスト名の編集」で”はい”を選択します。
この設定が”いいえ”の場合、EFSのファイルシステムのマウントが失敗します。
Failed to resolve "fs-ef6997ce.efs.ap-northeast-1.amazonaws.com" - check that your file system ID is correct.
See https://docs.aws.amazon.com/console/efs/mount-dns-name for more detail.
サブネットの作成
EC2インスタンスとEFSのマウントターゲットを作成するPublicサブネットをap-northeast-1aとap-northeast-1cに作成します。(説明は割愛しますがインターネットゲートウェイの作成とルートテーブルへの追加も行いました)
インターネット側からアクセスできるように「IPv4の自動割り当て」を有効にします。
セキュリティグループの作成
EC2に割り当てるセキュリティグループ
ローカルPCからsshで接続できるように、下記のインバウンドのルールを追加します。
タイプ | プロトコル | ポート範囲 | ソース |
---|---|---|---|
SSH | TCP | 22 | MyIP |
EFSのマウントターゲットに割り当てるセキュリティグループ
EC2インスタンスからEFSのマウントターゲットに接続できるように、下記のインバウンドのルールを追加します。
ポート範囲は2049を設定する必要があります。
タイプ | プロトコル | ポート範囲 | ソース |
---|---|---|---|
NFS | TCP | 2049 | EC2に割り当てたセキュリティグループのID |
EC2
EC2インスタンスの作成
publicサブネットのap-northeast-1aとap-northeast-1cにそれぞれ1つずつEC2インスタンスを作成します。
セキュリティグループには先に作成したEC2インスタンス用のセキュリティグループを指定します。
Amazon EFS マウントヘルパーのインストール
EC2インスタンスが立ち上がったらsshで接続し、updateとEFSマウントヘルパーのインストールを行います。
$ sudo yum update -y
Amazon EFS マウントヘルパーのインストール
$ sudo yum install -y amazon-efs-utils
マウントポイントの作成
EFSのマウントポイントは、/mnt/efsにしました。
$ sudo mkdir /mnt/efs
EFS
マウントターゲットの作成
アベイラビリティーゾーンとサブネットは、先に作成したサブネットを指定します。
セキュリティグループは、事前に作成したマウントターゲット用のセキュリティグループを指定します。
オプション設定
パフォーマンスモードの選択
- General Purpose
- Max I/O
General Purposeパフォーマンスモードを選択しました。(デフォルト)
スループットモードの選択
- Bursting
- Provisioned
Burstingスループットモードを選択しました。(デフォルト)
暗号化の有効化
”保管時のデータの暗号化の有効化”はチェックしませんでした。(デフォルト)
EFSをマウントする
DNS名
EFSはDNS名が設定されています。
それぞれのインスタンスからnslookupで調べると、アベイラビリティーゾーン毎のIPアドレスがわかります。
ap-northeast-1aから
$ nslookup fs-ef6997ce.efs.ap-northeast-1.amazonaws.com
Server: 10.0.0.2
Address: 10.0.0.2#53
Non-authoritative answer:
Name: fs-ef6997ce.efs.ap-northeast-1.amazonaws.com
Address: 10.0.1.213
ap-northeast-1cから
$ nslookup fs-ef6997ce.efs.ap-northeast-1.amazonaws.com
Server: 10.0.0.2
Address: 10.0.0.2#53
Non-authoritative answer:
Name: fs-ef6997ce.efs.ap-northeast-1.amazonaws.com
Address: 10.0.2.161
mountコマンド
$ sudo mount -t efs fs-ef6997ce:/ /mnt/efs
^^^^^^^^^^^ ^^^^^^^^
| |
| +--- マウントポイント
+--- ファイルシステムID
確認
$ df -Th
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 476M 0 476M 0% /dev
tmpfs tmpfs 493M 0 493M 0% /dev/shm
tmpfs tmpfs 493M 328K 493M 1% /run
tmpfs tmpfs 493M 0 493M 0% /sys/fs/cgroup
/dev/xvda1 xfs 8.0G 1.3G 6.8G 16% /
tmpfs tmpfs 99M 0 99M 0% /run/user/1000
fs-ef6997ce.efs.ap-northeast-1.amazonaws.com:/ nfs4 8.0E 0 8.0E 0% /mnt/efs
umountコマンド
$ sudo umount /mnt/efs
自動的にマウントする
/etc/fstabファイルに下記の行を追加します。
fs-883ac4a9:/ /mnt/efs efs defaults,_netdev 0 0
補足
fioで性能計測
こちらの「[fioを使ってストレージの性能を計測してみた] (https://qiita.com/toshihirock/items/fa4d310115e6921ab0ac)」を参考にシーケンシャルリードの性能を計測してみました。
- EBS : iops=6251
- EFS : iops=2438
EBS
$ fio -filename=/tmp/test2g -direct=1 -rw=read -bs=4k -size=2G -numjobs=64 -runtime=10 -group_reporting -name=file1
file1: (g=0): rw=read, bs=4K-4K/4K-4K/4K-4K, ioengine=psync, iodepth=1
...
fio-2.14
Starting 64 processes
file1: Laying out IO file(s) (1 file(s) / 2048MB)
Jobs: 64 (f=64): [R(64)] [100.0% done] [23035KB/0KB/0KB /s] [5758/0/0 iops] [eta 00m:00s]
file1: (groupid=0, jobs=64): err= 0: pid=8508: Sun Sep 30 07:44:35 2018
read : io=250320KB, bw=25004KB/s, iops=6251, runt= 10011msec
clat (usec): min=407, max=15003, avg=10229.58, stdev=2856.49
lat (usec): min=407, max=15004, avg=10230.13, stdev=2856.48
clat percentiles (usec):
| 1.00th=[ 932], 5.00th=[ 1064], 10.00th=[10944], 20.00th=[11072],
| 30.00th=[11072], 40.00th=[11072], 50.00th=[11072], 60.00th=[11072],
| 70.00th=[11072], 80.00th=[11072], 90.00th=[11200], 95.00th=[11200],
| 99.00th=[11712], 99.50th=[12096], 99.90th=[12608], 99.95th=[12736],
| 99.99th=[13504]
lat (usec) : 500=0.01%, 750=0.07%, 1000=2.80%
lat (msec) : 2=5.86%, 4=0.05%, 10=0.13%, 20=91.09%
cpu : usr=0.11%, sys=0.03%, ctx=62600, majf=0, minf=724
IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%
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.0%
issued : total=r=62580/w=0/d=0, short=r=0/w=0/d=0, drop=r=0/w=0/d=0
latency : target=0, window=0, percentile=100.00%, depth=1
Run status group 0 (all jobs):
READ: io=250320KB, aggrb=25004KB/s, minb=25004KB/s, maxb=25004KB/s, mint=10011msec, maxt=10011msec
Disk stats (read/write):
xvda: ios=33406/2, merge=28456/0, ticks=337012/24, in_queue=337304, util=99.04%
EFS
$ sudo fio -filename=/mnt/efs/test2g -direct=1 -rw=read -bs=4k -size=2G -numjobs=64 -runtime=10 -group_reporting -name=file1
file1: (g=0): rw=read, bs=4K-4K/4K-4K/4K-4K, ioengine=psync, iodepth=1
...
fio-2.14
Starting 64 processes
file1: Laying out IO file(s) (1 file(s) / 2048MB)
Jobs: 64 (f=64): [R(64)] [100.0% done] [9456KB/0KB/0KB /s] [2364/0/0 iops] [eta 00m:00s]
file1: (groupid=0, jobs=64): err= 0: pid=8616: Sun Sep 30 07:48:51 2018
read : io=97796KB, bw=9752.3KB/s, iops=2438, runt= 10028msec
clat (msec): min=3, max=75, avg=26.15, stdev= 3.45
lat (msec): min=3, max=75, avg=26.15, stdev= 3.45
clat percentiles (usec):
| 1.00th=[16064], 5.00th=[20352], 10.00th=[24960], 20.00th=[25472],
| 30.00th=[25728], 40.00th=[25984], 50.00th=[26240], 60.00th=[26496],
| 70.00th=[27264], 80.00th=[27776], 90.00th=[28032], 95.00th=[28544],
| 99.00th=[31616], 99.50th=[33536], 99.90th=[71168], 99.95th=[72192],
| 99.99th=[73216]
lat (msec) : 4=0.01%, 10=0.08%, 20=4.63%, 50=95.03%, 100=0.26%
cpu : usr=0.06%, sys=0.01%, ctx=26570, majf=0, minf=669
IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%
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.0%
issued : total=r=24449/w=0/d=0, short=r=0/w=0/d=0, drop=r=0/w=0/d=0
latency : target=0, window=0, percentile=100.00%, depth=1
Run status group 0 (all jobs):
READ: io=97796KB, aggrb=9752KB/s, minb=9752KB/s, maxb=9752KB/s, mint=10028msec, maxt=10028msec