一些关于NFS和AMD的tips
今天决定把ports都做在一个网段的一台服务器上,同网段其他的服务器都用NFS挂在这个输出。
以前在公司内网就做过了,也用了相当长的时间。不过今天才发现有些小事情以前并没遇见。
1. 锁的问题。例如编译automake19,configure的时候会检查autoconf, 但是autoconf是要进行锁,NFS默认是不支持锁的,以前原以为/etc/rc.d/nfslocking只需要在nfs client用就可以了,问了delphij,原来还要在nfs server开。ok, 在nfs server的/etc/rc.conf加上(红色的新加)
rpcbind_enable="yes"
nfs_client_enable="yes"
rpc_statd_enable="yes"
rpc_lockd_enable="yes"
nfs_server_enable="yes"
nfs_server_flags="-u -t -n 12"
mountd_enable="yes"
然后去启动 nfslocking 吧。不过这东西很讨厌,和我的ssl imap, ssl pop3端口冲突。!@#$%
2. nfs client如果联系不上nfs server的时候,有nfs读写操作,那么进程就会锁死,而且连kill -9都没法解决掉这个该死的进程。这个NFS老问题了,暂时只有临时解决方案。用 intr (-i) 和 soft (-s) 去挂载nfs输出的卷。好处就是可以用kill来把进程杀掉。不过要注意,如果没有及时umount,然后又有进程去读写nfs卷,你还是准备抓狂reboot吧,这个临时解决的是只有一次性效果。写到amd.map是soft,intr。
/defaults type:=host;fs:=${autodir}/${rhost}/host;rhost:=${key}
* opts:=rw,grpid,resvport,vers=3,proto=udp,nosuid,nodev,soft,intr
3. UDP还是TCP。nfs默认使用udp通信,man里面写如果不是同一局域网,建议用tcp, 而且不是所有udp server支持tcp。但问题是我有两台机器用udp就是不能用阿!!都是同一个网段同一个局域网,别的都正常就这两个。一开始我还以为是/etc/exports, mountd的问题,因为这两台机器的ip刚好是exports里面第一个和最后一个。弄了半天,还用了,mountd -dl, tcpdump来测试,最后发现通信是正常的,就是不能用。改tcp方式后一切正常,udp果然不可靠,不过tcp性能要下降了。amd.map的参数proto=udp要改为proto=tcp, 参见上面。
我的/etc/amd.conf:
[ global ]
unmount_on_exit = yes
log_file = /var/log/amd
#log_options = all
auto_dir = /mnt
nfs client的rc.conf:
rpcbind_enable="yes"
nfs_client_enable="yes"
rpc_statd_enable="yes"
rpc_lockd_enable="yes"
amd_enable="yes"
amd_flags="-F /etc/amd.conf /amd /etc/amd.map"