Edited at

EC2上にNFSサーバ/クライアント構築する

More than 1 year has passed since last update.


ゴール

EC2(Amazon Linux 2015.09)2台でNFSv4サーバ/クライアントを構成する。


環境

[root@ ec2-user]# cat /etc/issue

Amazon Linux AMI release 2015.09
Kernel \r on an \m

[root@ ec2-user]# yum list | grep nfs
libnfsidmap.i686 0.25-11.10.amzn1 amzn-updates
libnfsidmap-devel.x86_64 0.25-11.10.amzn1 amzn-updates
nfs4-acl-tools.x86_64 0.3.3-6.6.amzn1 amzn-main ★NFSv4
texlive-mfnfss.noarch 2:svn19410.0-27.21.amzn1 amzn-main
texlive-mfnfss-doc.noarch 2:svn19410.0-27.21.amzn1 amzn-main
texlive-psnfss.noarch 2:svn23394.9.2a-27.21.amzn1 amzn-main
texlive-psnfss-doc.noarch 2:svn23394.9.2a-27.21.amzn1 amzn-main

バージョンの確認は以下でも確認可能

■サーバ側

[root@ ec2-user]# nfsstat
Server rpc stats:
calls badcalls badclnt badauth xdrcall
333668 0 0 0 0

Server nfs v4:
null compound
5 0% 333663 99%

Server nfs v4 operations:
op0-unused op1-unused op2-future access close commit
0 0% 0 0% 0 0% 14487 1% 55895 5% 8182 0%
create delegpurge delegreturn getattr getfh link
4815 0% 0 0% 0 0% 316697 31% 60736 6% 0 0%
lock lockt locku lookup lookup_root nverify
0 0% 0 0% 0 0% 26 0% 0 0% 0 0%
open openattr open_conf open_dgrd putfh putpubfh
55899 5% 0 0% 8 0% 0 0% 333377 33% 0 0%
putrootfh read readdir readlink remove rename
5 0% 1 0% 8463 0% 0 0% 11 0% 0 0%
renew restorefh savefh secinfo setattr setcltid
253 0% 0 0% 0 0% 8 0% 60703 6% 14 0%
setcltidconf verify write rellockowner bc_ctl bind_conn
14 0% 0 0% 83786 8% 0 0% 0 0% 0 0%
exchange_id create_ses destroy_ses free_stateid getdirdeleg getdevinfo
0 0% 0 0% 0 0% 0 0% 0 0% 0 0%
getdevlist layoutcommit layoutget layoutreturn secinfononam sequence
0 0% 0 0% 0 0% 0 0% 0 0% 0 0%
set_ssv test_stateid want_deleg destroy_clid reclaim_comp
0 0% 0 0% 0 0% 0 0% 0 0%

■クライアント側
[root@ ec2-user]# nfsstat
Client rpc stats:
calls retrans authrefrsh
333492 0 333492

Client nfs v4:
null read write commit open open_conf
0 0% 0 0% 83785 25% 8182 2% 55893 16% 5 0%
open_noat open_dgrd close setattr fsinfo renew
0 0% 0 0% 55890 16% 60701 18% 16 0% 173 0%
setclntid confirm lock lockt locku access
9 0% 9 0% 0 0% 0 0% 0 0% 14469 4%
getattr lookup lookup_root remove rename link
40993 12% 21 0% 4 0% 9 0% 0 0% 0 0%
symlink create pathconf statfs readlink readdir
0 0% 4815 1% 12 0% 10 0% 0 0% 8456 2%
server_caps delegreturn getacl setacl fs_locations rel_lkowner
28 0% 0 0% 0 0% 0 0% 0 0% 0 0%
secinfo exchange_id create_ses destroy_ses sequence get_lease_t
8 0% 0 0% 0 0% 0 0% 0 0% 0 0%
reclaim_comp layoutget getdevinfo layoutcommit layoutreturn getdevlist
0 0% 0 0% 0 0% 0 0% 0 0% 0 0%
(null)
0 0%


サーバ構築

■EC2のセキュリティグループ設定

インバウンドの設定でNFSサーバのポートをローカルセグメントからのみ許可する。

※デフォルトでは「2049/tcp」

■rootユーザにスイッチ

[ec2-user@NFS_SERVER ~]$ sudo -s

[root@ ec2-user]#

■共有する為のボリューム作成

NFSサーバが提供するボリュームは、ルートボリューム(/)を利用する事もできるが、スナップショットの取得などを考慮し、EBSでボリュームを作成しアタッチ及びマウントする。

[root@ ec2-user]# lsblk

NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda 202:0 0 8G 0 disk
└─xvda1 202:1 0 8G 0 part /
xvdf 202:80 0 100G 0 disk ★アタッチされている事を確認

[root@ ec2-user]# mkfs -t ext4 /dev/xvdf

[root@ ec2-user]# vi /etc/fstab
#
LABEL=/ / ext4 defaults,noatime 1 1
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
/dev/xvdf /export/nfs ext4 defaults,nofail 1 2 ★追加

[root@ ec2-user]# mkdir -p /export/nfs

[root@ ec2-user]# mount /export/nfs

[root@ ec2-user]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda 202:0 0 8G 0 disk
└─xvda1 202:1 0 8G 0 part /
xvdf 202:80 0 100G 0 disk /export/nfs ★マウント済み

[root@ ec2-user]# df -h
ファイルシス サイズ 使用 残り 使用% マウント位置
/dev/xvda1 7.8G 1.1G 6.6G 15% /
devtmpfs 489M 60K 489M 1% /dev
tmpfs 498M 0 498M 0% /dev/shm
/dev/xvdf 99G 6.8G 87G 8% /export/nfs ★マウント済み

■exportポイント設定(クライアントに共有するボリュームの設定)

[root@ ec2-user]# vi /etc/exports

/export/nfs 10.0.0.0/255.255.0.0(rw,no_root_squash)

※②③をセットとして複数の対象に異なるオプションで共有可能
①/export/nfs : 共有するディレクトリパス
②10.0.0.0/255.255.255.0.0 : 共有可能なネットワーク範囲(ホスト指定可)
③(rw,no_root_squash) : オプション(rw:読み書き可、no_root_squash:クライアントのroot権をサーバ側でも適用)

※exportfsコマンドでも設定可能

■サービス開始

[root@ ec2-user]# service --status-all | grep nfs

/export/nfs
nfsd is stopped

[root@ ec2-user]# service nfs start
Starting NFS services: [ OK ]
Starting NFS quotas: [ OK ]
Starting NFS mountd: [ OK ]
Starting NFS daemon: [ OK ]
Starting RPC idmapd: [ OK ]

[root@ ec2-user]# service --status-all | grep nfs
/export/nfs
nfsd (pid 3533 3532 3531 3530 3529 3528 3527 3526) is running...

※デーモン起動済みの場合は以下のコマンドで設定を有効化
[root@ ec2-user]# exportfs -ar

■exportポイント設定有効化確認

[root@ ec2-user]# exportfs -v

/export/nfs
10.0.0.0/255.255.0.0(rw,wdelay,no_root_squash,no_subtree_check,sec=sys,rw,secure,no_root_squash,no_all_squash)
※デフォルト値を含む設定していないオプションも確認可

[root@ ec2-user]# showmount -e
Export list for ip-10-0-0-xxx:
/export/nfs 10.0.0.0/255.255.0.0

■自動起動/停止設定(ランレベル3〜5で有効化)

[root@ ec2-user]# chkconfig --list | grep nfs

nfs 0:off 1:off 2:off 3:off 4:off 5:off 6:off

[root@ ec2-user]# chkconfig --level 345 nfs on

[root@ ec2-user]# chkconfig --list | grep nfs
nfs 0:off 1:off 2:off 3:on 4:on 5:on 6:off

NFSv4以降はportmap、rpcbind、nfslockは不要


クライアント

■rootユーザにスイッチ

[ec2-user@NFS_CLIENT ~]$ sudo -s

[root@ ec2-user]#

■nfsマウントに必要なライブラリ(mountコマンドのhelperなど)をインストール

[root@ ec2-user]# yum install nfs-utils nfs-utils-lib

■アクセス用ユーザ設定(例としてec2-userにグループ設定を追加)

[root@ ec2-user]# groupmod -g 1001 nfs

[root@ ec2-user]# usermod -G wheel,nfs ec2-user
※既に別のサブグループに所属している場合は、所属済みのグループの最後に指定する。
[root@ ec2-user]# id ec2-user
uid=500(ec2-user) gid=500(ec2-user) groups=500(ec2-user),10(wheel),1001(nfs)

■マウントポイント作成

[root@ ec2-user]# mkdir -p -m 775 /mnt/nfs

■アクセス用の所有権設定(ここではnfsグループに対して許可)

[root@ ec2-user]# chown root:nfs /mnt/nfs

■マウントポイントの設定

[root@ data_nfs]# cat /etc/fstab

#
LABEL=/ / ext4 defaults,noatime 1 1
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
10.0.0.X:/export/nfs /mnt/nfs nfs4 defaults 0 0

※IPは環境に合わせて設定

■マウント

[root@ ec2-user]# mount /mnt/nfs

■確認

[root@ ec2-user]# df -h

Filesystem Size Used Avail Use% Mounted on
/dev/xvda1 50G 29G 21G 59% /
devtmpfs 3.9G 76K 3.9G 1% /dev
tmpfs 4.0G 0 4.0G 0% /dev/shm
s3fs 256T 0 256T 0% /data_s3fs
10.0.0.X:/export/nfs 99G 6.8G 87G 8% /mnt/nfs


参考URL

https://docs.oracle.com/cd/E39368_01/e48214/ol_about_nfs.html

http://linux.kororo.jp/cont/server/nfs.php

http://web.mit.edu/rhel-doc/4/RH-DOCS/rhel-rg-ja-4/s1-nfs-start.html

http://kaede.blog.abk.nu/nfs-ports-lock