NFS是Network File System的缩写,即网络文件系统。它的主要功能是通过网络(一般是局域网)让不同的主机系统之间可以共享文件或目录。NFS客户端(一般为应用服务器,例如web)可以通过挂载(mount)的方式将NFS服务端共享的数据目录挂载到NFS客户端本地系统中(就是某一个挂载点下)。从NFS客户端的机器本地看,NFS服务端共享的目录就好像是客户自己的磁盘分区或者目录一样,而实际上确是远端的NFS服务端的目录。
NFS网络文件系统类似windows系统的网络共享、安全功能、网络驱动器映射,这也和linux系统里的samba服务类似。应用于互联网中小型集群架构后端作为数据共享,如果是大型网站,那么有可能还会用到更复杂的分布式文件系统,例如Moosefs(mfs)、glusterfs、FastDFS。
在企业集群架构的工作场景中,NFS网络文件系统一般被用来存储共享视频、图片、附件等静态资源文件。一般是把网站用户上传的文件都放在NFS共享里,例如,BBS产品的图片、附件、头像,注意网站BBS程序不要放在NFS共享里,然后前端所有的节点访问存储服务之一,特别是中小网站公司应用频率更高。
NFS可以被视为一个RPC程序,在启动任何一个RPC程序之前,需要做好端口映射工作,这个映射工作就是由rpcbind服务来完成的。因此,必须先启动rpcbind服务。
[root@nfs-server ~]# /etc/init.d/rpcbind status #查看rpcbind服务
rpcbindisstopped
[root@nfs-server ~]# /etc/init.d/rpcbind start #启动rpcbind服务
Starting rpcbind: [ OK ]
[root@nfs-server ~]# /etc/init.d/rpcbind status
rpcbind (pid 26101)isrunning...
[root@nfs-server ~]# lsof -i:111 #rpcbind服务端口111
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rpcbind 26101 rpc 6u IPv4 28829 0t0 UDP *:sunrpc
rpcbind 26101 rpc 8u IPv4 28832 0t0 TCP *:sunrpc (LISTEN)
rpcbind 26101 rpc 9u IPv6 28834 0t0 UDP *:sunrpc
rpcbind 26101 rpc 11u IPv6 28837 0t0 TCP *:sunrpc (LISTEN)
[root@nfs-server ~]# netstat -lntup|grep rpcbind
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 26101/rpcbind
tcp 0 0 :::111 :::* LISTEN 26101/rpcbind
udp 0 0 0.0.0.0:836 0.0.0.0:* 26101/rpcbind
udp 0 0 0.0.0.0:111 0.0.0.0:* 26101/rpcbind
udp 0 0 :::836 :::* 26101/rpcbind
udp 0 0 :::111 :::* 26101/rpcbind
[root@nfs-server ~]# chkconfig --list|grep rpcbind
rpcbind 0:off 1:off 2:on 3:on 4:on 5:on 6:off
[root@nfs-server ~]# rpcinfo -p localhost
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
[root@nfs-server ~]# /etc/init.d/nfs status #查看nfs服务
rpc.svcgssdisstopped
rpc.mountdisstopped
nfsdisstopped
rpc.rquotadisstopped
[root@nfs-server ~]# /etc/init.d/nfs start #启动nfs服务
Starting NFS services: [ OK ]
Starting NFS quotas: [ OK ]
Starting NFS mountd: [ OK ]
Starting NFS daemon: [ OK ]
Starting RPC idmapd: [ OK ]
[root@nfs-server ~]# /etc/init.d/nfs status
rpc.svcgssdisstopped
rpc.mountd (pid 26225)isrunning...
nfsd (pid 26241 26240 26239 26238 26237 26236 26235 26234)isrunning...
rpc.rquotad (pid 26220)isrunning...
[root@nfs-server ~]# netstat -lntup|grep 2049 #nfs服务端口2049
tcp 0 0 0.0.0.0:2049 0.0.0.0:* LISTEN -
tcp 0 0 :::2049 :::* LISTEN -
udp 0 0 0.0.0.0:2049 0.0.0.0:* -
udp 0 0 :::2049 :::* -
[root@nfs-server ~]# rpcinfo -p localhost
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
100011 1 udp 875 rquotad
100011 2 udp 875 rquotad
100011 1 tcp 875 rquotad
100011 2 tcp 875 rquotad
100005 1 udp 56844 mountd
100005 1 tcp 49326 mountd
100005 2 udp 47287 mountd
100005 2 tcp 47817 mountd
100005 3 udp 56317 mountd
100005 3 tcp 47741 mountd
100003 2 tcp 2049 nfs
100003 3 tcp 2049 nfs
100003 4 tcp 2049 nfs
100227 2 tcp 2049 nfs_acl
100227 3 tcp 2049 nfs_acl
100003 2 udp 2049 nfs
100003 3 udp 2049 nfs
100003 4 udp 2049 nfs
100227 2 udp 2049 nfs_acl
100227 3 udp 2049 nfs_acl
100021 1 udp 45085 nlockmgr
100021 3 udp 45085 nlockmgr
100021 4 udp 45085 nlockmgr
100021 1 tcp 42582 nlockmgr
100021 3 tcp 42582 nlockmgr
100021 4 tcp 42582 nlockmgr
[root@nfs-server ~]# chkconfig --list nfs
nfs 0:off 1:off 2:off 3:off 4:off 5:off 6:off
[root@nfs-server ~]# chkconfig nfs on #nfs添加开机自启动
[root@nfs-server ~]# chkconfig --list nfs
nfs 0:off 1:off 2:on 3:on 4:on 5:on 6:off
[root@nfs-server ~]# less /etc/init.d/rpcbind
#! /bin/sh
#
# rpcbind Start/Stop RPCbind
#
# chkconfig: 2345 13 87 #开机启动顺序
[root@nfs-server ~]# less /etc/init.d/nfs
#!/bin/sh
#
# nfs This shell script takes care of starting and stopping
# the NFS services.
#
# chkconfig: - 30 60 #开机启动顺序
[root@nfs-server ~]# cat /var/lib/nfs/etab
/data 192.168.31.*(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,anonuid=65534,anongid=65534,sec=sys,rw,root_squash,no_all_squash) #nfs的由65534进行管理
[root@nfs-server ~]# cat /etc/exports
/data 192.168.31.*(rw,sync)
[root@nfs-server ~]# ls -ld /data
drwxr-xr-x 2 root root 4096 Jan 19 11:36 /data #/data的属主是root
[root@nfs-server ~]# grep 65534 /etc/passwd #查看65534的用户名
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
[root@nfs-server ~]# chown -R nfsnobody /data #更改/data属主
[root@nfs-server ~]# ls -ld /data
drwxr-xr-x 2 nfsnobody root 4096 Jan 19 11:36 /data