NFS就是Network File System的缩写,它最大的功能就是可以通过网络,让不同的机器、不同的操作系统可以共享彼此的文件。
NFS服务器可以让PC将网络中的NFS服务器共享的目录挂载到本地端的文件系统中,而在本地端的系统中来看,那个远程主机的目录就好像是自己的一个磁盘分区一样,在使用上相当便利;
NFS服务器的挂载结构图:
rpc服务:
RPC(Remote Procedure Call)即远程过程调用。RPC 最主要的功能就是在指定每个 NFS 功能所对应的 port number ,并且回报给客户端,让客户端可以连结到正确的port上去
通讯原理:
优缺点:
1)优点
a.节省本地存储空间将常用的数据存放在一台服务器可以通过网络访问
b.简单容易上手
c.方便部署非常快速,维护十分简单
2)缺点
a.局限性容易发生单点故障,及server机宕机了所有客户端都不能访问
b.在高并发下NFS效率/性能有限
c.客户端没用用户认证机制,且数据是通过明文传送,安全性一般(一般建议在局域网内使用)
d.NFS的数据是明文的,对数据完整性不做验证
e.多台机器挂载NFS服务器时,连接管理维护麻烦
部署配置:
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0
[root@localhost ~]# mount /dev/sr0 /mnt
[root@localhost ~]# yum install nfs-utils
[root@localhost ~]# rpm -qa | egrep "nfs|rpcbind"
libnfsidmap-0.25-12.el7.x86_64
rpcbind-0.2.0-32.el7.x86_64
nfs-utils-1.3.0-0.21.el7.x86_64
[root@localhost ~]# systemctl restart nfs
[root@localhost ~]# 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
100024 1 udp 49392 status
100024 1 tcp 46675 status
100005 1 udp 20048 mountd
100005 1 tcp 20048 mountd
100005 2 udp 20048 mountd
100005 2 tcp 20048 mountd
100005 3 udp 20048 mountd
100005 3 tcp 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 37873 nlockmgr
100021 3 udp 37873 nlockmgr
100021 4 udp 37873 nlockmgr
100021 1 tcp 55802 nlockmgr
100021 3 tcp 55802 nlockmgr
100021 4 tcp 55802 nlockmgr
5.查看rpcbind监听状态(主端口为111)
[root@localhost ~]# lsof -i:111
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rpcbind 7745 rpc 6u IPv4 81368 0t0 UDP *:sunrpc
rpcbind 7745 rpc 8u IPv4 81370 0t0 TCP *:sunrpc (LISTEN)
rpcbind 7745 rpc 9u IPv6 81371 0t0 UDP *:sunrpc
rpcbind 7745 rpc 11u IPv6 81373 0t0 TCP *:sunrpc
[root@localhost ~]# netstat -tlunp | grep rpcbind
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 7745/rpcbind
tcp6 0 0 :::111 :::* LISTEN 7745/rpcbind
udp 0 0 0.0.0.0:704 0.0.0.0:* 7745/rpcbind
udp 0 0 0.0.0.0:111 0.0.0.0:* 7745/rpcbind
udp6 0 0 :::703 :::* 7745/rpcbind
udp6 0 0 :::111 :::* 7745/rpcbind
nfs服务所开启的端口号
[root@localhost ~]# netstat -tlunp | grep -E 'nfs|rpc'
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 7745/rpcbind
tcp 0 0 0.0.0.0:20048 0.0.0.0:* LISTEN 7752/rpc.mountd
tcp 0 0 0.0.0.0:46675 0.0.0.0:* LISTEN 7733/rpc.statd
tcp6 0 0 :::111 :::* LISTEN 7745/rpcbind
tcp6 0 0 :::20048 :::* LISTEN 7752/rpc.mountd
tcp6 0 0 :::48377 :::* LISTEN 7733/rpc.statd
udp 0 0 127.0.0.1:703 0.0.0.0:* 7733/rpc.statd
udp 0 0 0.0.0.0:704 0.0.0.0:* 7745/rpcbind
udp 0 0 0.0.0.0:111 0.0.0.0:* 7745/rpcbind
udp 0 0 0.0.0.0:49392 0.0.0.0:* 7733/rpc.statd
udp 0 0 0.0.0.0:20048 0.0.0.0:* 7752/rpc.mountd
udp6 0 0 :::39599 :::* 7733/rpc.statd
udp6 0 0 :::703 :::* 7745/rpcbind
udp6 0 0 :::111 :::* 7745/rpcbind
udp6 0 0 :::20048 :::* 7752/rpc.mountd
NFS常见进程详解
[root@localhost ~]# ps -ef | grep -E 'nfs|rpc'
root 732 2 0 14:02 ? 00:00:00 [rpciod]
rpcuser 7733 1 0 14:34 ? 00:00:00 /usr/sbin/rpc.statd --no-notify
rpc 7745 1 0 14:34 ? 00:00:00 /sbin/rpcbind -w
root 7748 1 0 14:34 ? 00:00:00 /usr/sbin/rpc.idmapd
root 7752 1 0 14:34 ? 00:00:00 /usr/sbin/rpc.mountd
root 7762 2 0 14:34 ? 00:00:00 [nfsd4]
root 7764 2 0 14:34 ? 00:00:00 [nfsd4_callbacks]
root 7772 2 0 14:34 ? 00:00:00 [nfsd]
root 7774 2 0 14:34 ? 00:00:00 [nfsd]
root 7775 2 0 14:34 ? 00:00:00 [nfsd]
root 7779 2 0 14:34 ? 00:00:00 [nfsd]
root 7781 2 0 14:34 ? 00:00:00 [nfsd]
root 7782 2 0 14:34 ? 00:00:00 [nfsd]
root 7785 2 0 14:34 ? 00:00:00 [nfsd]
root 7786 2 0 14:34 ? 00:00:00 [nfsd]
root 8572 4503 0 14:41 pts/0 00:00:00 grep --color=auto -E nfs|rpc
架设一台NFS服务器,并按照以下要求配置
1)开放/nfs/shared目录,供所有用户查询资料
2)开放/nfs/upload目录作为192.168.171.0/24网段的数据上传目录,并将所有用户及所属的用户组映射为nfs-upload,其UID和GID均为210
3)将/home/tom目录仅共享给192.168.171.144这台主机,并只有用户tom可以完全访问该目录
[root@localhost ~]# groupadd -g 210 nfs-upload
[root@localhost ~]# useradd -u 210 -g 210 nfs-upload
[root@localhost ~]# cat /etc/exports
/nfs /shared *(ro)
/nfs/upload 192.168.171.0/24(rw,all_squash,anonuid=210,anongid=210)
/home/tom 192.168.171.144(rw)
[root@localhost ~]# exportfs -r