VMware Workstationを使ってサーバを立てていたのだが仮想サーバが増えてきたのでESXi(当然無償版)の専用サーバを立ててそこに集約することにした。ただストレージ容量の多いマシンは確保できなかったので長らくお休みになられていたPCにNFSサーバとして復帰してもってESXiからマウントすることにした。
NFSサーバはCentOS7を使って構築した。
ただ、CentOSはデフォルトではNFSv4であり、ESXiはNFSv3までしかサポートしていないのでなかなか接続成功までが大変であった。
まずインストール
$ yum -y nfs-utils rpcbind
次にidmapdの設定をする
/etc/idmapd.conf
[General]
Domain = 自ドメイン
[Mapping]
Nobody-User = nfsnobody
Nobody-Group = nfsnobody
他デフォルトのまま
NFSv3では動的なポートをいくつか使うのでファイアウォールと相性が悪い。
まずはそれを固定してしまう。
/etc/sysconfig/nfsに設定を入れる。MOUNTD_NFS_V3はいるのか分からんけど。。
RPCRQUOTADOPTS="--port ポート番号"
LOCKD_TCPPORT=ポート番号
LOCKD_UDPPORT=ポート番号
STATDARG="--outgoing-port ポート番号 --port ポート番号"
MOUNTD_NFS_V3="yes"
各サービスを立ち上げる、かつサーバ起動時に有効にする。
$ systemctl start nfs-idmap nfs-mountd nfs-server nfs-lock rpcbind
$ systemctl enable nfs-idmap nfs-mountd nfs-server nfs-lock rpcbind
ポートが固定できたか確認する。
$ rpcinfo -p
program vers proto port service
100000 4 tcp 111 portmapper
100000 3 tcp 111 portmapper
100000 2 tcp 111 portmapper
100000 4 udp 111 portmapper
100000 3 udp 111 portmapper
100000 2 udp 111 portmapper
100005 2 udp 20048 mountd
100024 1 udp 2050 status
100024 1 tcp 2050 status
100005 3 udp 20048 mountd
100003 3 tcp 2049 nfs
100003 4 tcp 2049 nfs
100227 3 tcp 2049 nfs_acl
100003 3 udp 2049 nfs
100003 4 udp 2049 nfs
100227 3 udp 2049 nfs_acl
100021 1 udp 32769 nlockmgr
100021 3 udp 32769 nlockmgr
100021 4 udp 32769 nlockmgr
100021 1 tcp 32803 nlockmgr
100021 3 tcp 32803 nlockmgr
100021 4 tcp 32803 nlockmgr
100011 1 udp 2052 rquotad
100011 2 udp 2052 rquotad
100011 1 tcp 2052 rquotad
100011 2 tcp 2052 rquotad
こんな感じで出ると思う。
portmapper, mountd, status, nfs, nlockmgrr, quotadが予定どおりのポート番号ならOK。
次にファイアウォールを設定して固定したポートを開放する。
ポート番号指定で開けてもいいけど、せっかくなのでサービスを定義して開けてみる
/lib/firewalld/servicesに使えるサービスを定義したxmlがある。
nfs, mountd, rpc-bindは定義されているのでそれ以外を定義する。
rquotd, nlockmgr, statdを追加する。
既存のサービスのファイルをコピーして中身を書きかえるのが吉。
shortやdescriptionは好きなものにすればよい。
rquotd.xml
<?xml version="1.0" encoding="utf-8"?>
<service>
<short>rquotad</short>
<description>define rquotad</description>
<port protocol="tcp" port="ポート番号"/>
<port protocol="udp" port="ポート番号"/>
</service>
nlockmgr.xml
<?xml version="1.0" encoding="utf-8"?>
<service>
<short>nlockmgr</short>
<description>define nlockmgr</description>
<port protocol="tcp" port="ポート番号"/>
<port protocol="udp" port="ポート番号"/>
</service>
statdはoutgoing分も纏めて定義してしまう。
statd.xml
<?xml version="1.0" encoding="utf-8"?>
<service>
<short>statd</short>
<description>define statd</description>
<port protocol="tcp" port="ポート番号(outgoing)"/>
<port protocol="udp" port="ポート番号(outgoing)"/>
<port protocol="tcp" port="ポート番号"/>
<port protocol="udp" port="ポート番号"/>
</service>
これらと元々定義されているサービスを使ってfirewalldの設定に入れてポートを解放する。
$ firewall-cmd --permanent --add-service=mountd
$ firewall-cmd --permanent --add-service=rpc-bind
$ firewall-cmd --permanent --add-service=nfs
$ firewall-cmd --permanent --add-service=rquotad
$ firewall-cmd --permanent --add-service=nlockmgr
$ firewall-cmd --permanent --add-service=statd
$ firewall-cmd --reload
反映されたかを確認
$ firewall-cmd --list-all
public (default, active)
interfaces: enp3s0
sources:
services: mountd nfs nlockmgr rpc-bind rquotad ssh statd
ports:
masquerade: no
forward-ports:
icmp-blocks:
rich rules:
余計なサービスが表示されるなら以下で消しておく。
$ firewall-cmd --permanent --remove-servie=サービス名
これでポートの開放のOK。
後はNFSサーバのexportsを設定。
/exportsを192.168.1.0のネットワークに公開する例
/etc/exports
/exports 192.168.1.0/255.255.255.0(rw,sync)
exportsを反映させて確認する。
$ exportfs -ar
$ exportfs -v
/exports 192.168.1.0/255.255.255.0(rwwdelay,root_squash,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash)
最後にSELINUXのポリシーを変えて読み書きを許可する。
$ setsebool -P nfs_export_all_rw on
ここまででNFSサーバは構築できた。
このNFSをESXiからマウントしてデータストアとして使う。
だがここで問題が起こった。。
vSphere Clientを使ってESXiにログインし、データストアの追加を行った。
マウントは無事できた。
しかし、数分経つとNSFが切断されてしまう。数分経つと復旧したりしなかったりで非常に不安定となる。
ESXi5.5 Update1 でそういうバグがあるとの報告があったがESX5.1を使っても改善しなかった。
だが、どうやらvSphere Clientを立ち上げなおした直後は接続できていてしばらく経つと切断するという傾向が見えてきた。そこでESXiにログインしてCLIで操作することにした。
マウントは以下
$ esxcli storage nfs add -H NFSサーバ -s /exports -v データストア名
マウントは無事できた。
状態確認
$ esxcli storage nfs list
Volume Name Host Share Accessible Mounted Read-Only Hardware Acceleration
----------- ----------- ----------------------- ---------- ------- --------- ---------------------
データストア名 NFSサーバ /exports true true false Not Supported
問題ないようだ。
しばらく待ってもAccessibleはtrueのままである。
ここでvSphere Clientを立ち上げてESXiに接続してみる。
するととたんにAccessibleがfalseに切り替わった。
やはりvSphere Clientをつなぐとダメなようだ。
しかたがないのでVMware WorkstationをESXiに繋いでしのぐことにしよう。。
# 2014/10/05 追記
接続が不安定な問題は基本的なミスであった。
クライアントとして使っていたマシンのIPアドレスがNFSサーバとかぶってしまっていた。
ホント恥ずかしいくらい初歩的なミス。
VMwareのバグを疑ってごめんなさい。むしろ一時的にでも良く繋がったなというくらい。