DRYな備忘録

Don't Repeat Yourself.

【AWS】EC2上にnfsサーバを構築する

tl;dr

まったく同じタイトルのものがあった

以下読まなくていいです。







nfsサーバ構築のログ

ウェブコンソールからインスタンスのローンチ

f:id:otiai10:20180308123503p:plain

マウントされるためのデバイスを追加した。

# ログイン
% ssh -i ~/Documents/otiai10.tokyo.pem ec2-user@18.182.13.38
[ec2-user@ip-172-31-30-22 ~]$ sudo su -
[root@ip-172-31-30-22 ~]# uname -a
Linux ip-172-31-30-22.ap-northeast-1.compute.internal 4.9.76-38.79.amzn2.x86_64 #1 SMP Mon Jan 15 23:35:15 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
# パッケージ確認
[root@ip-172-31-30-22 ~]# yum list | grep nfs-utils
nfs-utils.x86_64                        1:1.3.0-0.48.amzn2.0.1        installed
# ブロックデバイス一覧を確認
[root@ip-172-31-30-22 ~]# lsblk
NAME    MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda    202:0    0   8G  0 disk
└─xvda1 202:1    0   8G  0 part /
xvdb    202:16   0  16G  0 disk
# xvdbを使っていく

lsblk: 【 lsblk 】コマンド――ブロックデバイスを一覧表示する:Linux基本コマンドTips(180) - @IT

[root@ip-172-31-30-22 ~]# mkfs -t ext4 /dev/xvdb
# 中略
Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

[root@ip-172-31-30-22 ~]#

mkfs: Linux パーティションにmkfsでファイルシステムを作る

# ローカルのディレクトリの確認
[root@ip-172-31-30-22 ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        484M     0  484M   0% /dev
tmpfs           497M     0  497M   0% /dev/shm
tmpfs           497M   13M  484M   3% /run
tmpfs           497M     0  497M   0% /sys/fs/cgroup
/dev/xvda1      8.0G 1017M  7.0G  13% /
tmpfs           100M     0  100M   0% /run/user/1000
tmpfs           100M     0  100M   0% /run/user/0

# 上記のデバイスをローカルパスにマウントする設定を記述
[root@ip-172-31-30-22 ~]# cp /etc/fstab ~/fstab.backup
[root@ip-172-31-30-22 ~]# vi /etc/fstab
[root@ip-172-31-30-22 ~]# diff -u ~/fstab.backup /etc/fstab

diff ↓

 devpts      /dev/pts    devpts  gid=5,mode=620  0   0
 sysfs       /sys        sysfs   defaults        0   0
 proc        /proc       proc    defaults        0   0
+/dev/xvdb   /export/nfs ext4    defaults,nofail 1   2
# マウント
[root@ip-172-31-30-22 ~]# mkdir -p /export/nfs
[root@ip-172-31-30-22 ~]# mount /export/nfs

# 確認
[root@ip-172-31-30-22 ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        484M     0  484M   0% /dev
tmpfs           497M     0  497M   0% /dev/shm
tmpfs           497M   13M  484M   3% /run
tmpfs           497M     0  497M   0% /sys/fs/cgroup
/dev/xvda1      8.0G 1017M  7.0G  13% /
tmpfs           100M     0  100M   0% /run/user/1000
tmpfs           100M     0  100M   0% /run/user/0
/dev/xvdb        16G   45M   15G   1% /export/nfs

/etc/fstab

# 外部ホストへの公開設定を記述
[root@ip-172-31-30-22 ~]# echo '/export/nfs *(rw,async,no_root_squash)'
/export/nfs *(rw,async,no_root_squash)
[root@ip-172-31-30-22 ~]# echo '/export/nfs *(rw,async,no_root_squash)' >> /etc/exports
# nfsサービスの開始
[root@ip-172-31-30-22 ~]# systemctl status nfs
[root@ip-172-31-30-22 ~]# systemctl start nfs
[root@ip-172-31-30-22 ~]# systemctl status nfs
[root@ip-172-31-30-22 ~]# exportfs -ar
# 確認
[root@ip-172-31-30-22 ~]# exportfs -v
/export/nfs     <world>(rw,async,wdelay,hide,no_subtree_check,sec=sys,secure,no_root_squash,no_all_squash)
[root@ip-172-31-30-22 ~]# showmount -e
Export list for ip-172-31-30-22.ap-northeast-1.compute.internal:
/export/nfs *
[root@ip-172-31-30-22 ~]#
# ポートの確認
[root@ip-172-31-30-22 ~]# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      1/systemd
tcp        0      0 0.0.0.0:20048           0.0.0.0:*               LISTEN      9137/rpc.mountd
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      3249/sshd
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      3092/master
tcp        0      0 0.0.0.0:60795           0.0.0.0:*               LISTEN      358/rpc.statd
tcp        0      0 0.0.0.0:37729           0.0.0.0:*               LISTEN      -
tcp        0      0 0.0.0.0:2049            0.0.0.0:*               LISTEN      -
tcp6       0      0 :::111                  :::*                    LISTEN      1/systemd
tcp6       0      0 :::20048                :::*                    LISTEN      9137/rpc.mountd
tcp6       0      0 :::22                   :::*                    LISTEN      3249/sshd
tcp6       0      0 :::37309                :::*                    LISTEN      -
tcp6       0      0 :::55325                :::*                    LISTEN      358/rpc.statd
tcp6       0      0 :::2049                 :::*                    LISTEN      -

Program nameが-なのが気になるけど、2049/tcpはLISTENになっている。

クライアント側からのmount確認

適当にクライアントとなるEC2インスタンスを同VPC内の同SecurityGroupで建てて、同SecurityGroup間でのNFSポート(2049)を開ける。
左がサーバ。右がクライアント。sample.txtという名前のファイルがネットワーク越しに同期しているのが確認できた。

f:id:otiai10:20180308160440p:plain

f:id:otiai10:20180308160844p:plain

Macからのマウントで、Operation not permitted

  1. クライアントインスタンスから、Public IP Addressで、マウントしようとすると、tcpが疎通していないような挙動になる
    • これは意味が分かる。Public IP Addressで参照しているということは、いったんVPCの外に出ているので、SecurityGroupに弾かれていると思われる。
  2. ためしに、当SGで一瞬すべてのSourceからのnfsを許してみると、クライアントインスタンスから Public IP Addressをもちいて nfs疎通が確認できた
  3. ローカルのMacから、Public IP Addressで、マウントしようとすると、Operation not permitted となる
    • SG的には、職場のIP AddressからAll protocol/trafficのinboundを許している
    • 上記[2]より、ネットワーク的なエラーではないと思われる
  4. Macのクライアントの設定だった

解決

sudo mount_nfs \
  -o resvport ${NFS_SERVER_PUBLIC_IP_ADDR}:/export/nfs \
  ./mountpoint

DRYな備忘録として

図解でわかる Linuxサーバ構築・設定のすべて

図解でわかる Linuxサーバ構築・設定のすべて

サーバ構築の実際がわかる Apache[実践]運用/管理 (Software Design plus)

サーバ構築の実際がわかる Apache[実践]運用/管理 (Software Design plus)