ゴール
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