一、NFS简介
NFS是网络文件系统的意思,他的主要功能是通过网络(一般是局域网)让不同的主机系统之间可以共享文件或者目录,NFS客户端,(一般为应用服务器,例如web)可以通过挂载(mount)的方式将NFS服务端共享的数据目录挂载到NFS客户端本地系统中,(就是在某一个挂载点下,),从客户端来看,NFS服务端共享的目录就好像是客户端自己的磁盘分区或者目录一样,而实际上却是远端NFS服务器的目录,
二、NFS配置步骤
1、下载NFS服务
//下载NFS以及rpcbind[root@localhost ~]# yum install nfs-utils rcpbind -y[root@localhost ~]# rpm -qa | egrep "nfs|rpcbind"nfs-utils-1.3.0-0.54.el7.x86_64rpcbind-0.2.0-44.el7.x86_64//下载完成之后会多一个nfsnobody的用户[root@localhost ~]# id nfsnobodyuid=65534(nfsnobody) gid=65534(nfsnobody) groups=65534(nfsnobody)//rpc的主端口是111//nfs的主端口是2049//为什么需要rpc:因为NFS支持的功能相当多,而不同的功能都会使用不同的程序来启动,每启动一个功能就会启用一些端口来传输数据,因此,NFS的功能所对应的端口无法固定,它会随机取用一些未被使用的端口来作为传输之用,用户需要 通过rpc来获取端口访问。
2、启动NFS服务。
//需要先启动rpc,然后再启动nfs[root@localhost ~]# systemctl start rpcbind[root@localhost ~]# lsof -i:111COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAMErpcbind 11434 rpc 6u IPv4 29471 0t0 UDP *:sunrpc rpcbind 11434 rpc 8u IPv4 29473 0t0 TCP *:sunrpc (LISTEN)rpcbind 11434 rpc 9u IPv6 29474 0t0 UDP *:sunrpc rpcbind 11434 rpc 11u IPv6 29476 0t0 TCP *:sunrpc (LISTEN)//查看rpc对应的服务[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//启动nfs[root@localhost ~]# systemctl start nfs//查看rpc对应的服务[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 41580 status 100024 1 tcp 41087 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 37240 nlockmgr 100021 3 udp 37240 nlockmgr 100021 4 udp 37240 nlockmgr 100021 1 tcp 44041 nlockmgr 100021 3 tcp 44041 nlockmgr 100021 4 tcp 44041 nlockmgr
3、配置NFS配置文件,
NFS语法如下:NFS共享的目录 NFS客户端地址(参1 参2)
NFS共享的目录:为NFS服务端要共享的实际目录,要用绝对路径如/data,注意共享目录的本地权限,如果需要读写共享,一定要让本地目录可以被NFS客户端用户 (nfsnobody)可以读写
NFS客户端地址:为NFS服务端授权的可访问共享目录的NFS客户端地址,可以为单独的ip地址或者主机名,域名等,也可以为整个网段地址,还可以用 “*”来匹配所有客户端服务器,这里所谓的客户端一般来说是指前端的业务服务器,例如:web服务器,
权限参数集: 对授权的NFS客户端的访问权限设置,
NFS配置参数:
rw 表示可读写权限
ro 表示只读权限
sync 请求或写入数据时,数据同步写入NFS server的硬盘才返回,优点:数据安全不会丢,缺点:性能比不启动该参数要查,
async 写入时数据会先写到内存缓冲区,直到硬盘有空档才会再写入磁盘,这样可以提升写入效率,风险为若服务器宕机或者不正常关机,会损失缓冲区中未写入磁盘的数据,(解决办法:服务器主板电池或加 ups不间断电源,)
all_squash 不管访问NFS server共享目录的用户身份如何,他的权限都将被压缩成匿名用户,同时它的UID和GID都会变成 nfsnobody 账户身份,在早期多个NFS客户端同时读写NFS server 数据时,这个参数很有用。
//需要注意的是,要将服务端的防火墙和selinux关闭[root@localhost ~]# systemctl stop firewalld.service[root@localhost ~]# systemctl disable firewalld.service[root@localhost ~]# setenforce 0//创建一个用于共享的目录[root@localhost ~]# mkdir /data[root@localhost ~]# chown -R nfsnobody.nfsnobody /data//编辑nfs的配置文件[root@localhost ~]# vim /etc/exports/data 192.168.80.0/24(rw,sync) //写入共享的内容[root@localhost ~]# systemctl reload nfs //平滑重启nfs服务[root@localhost ~]# showmount -e 192.168.80.131 //自查,显示如下结果即表示nfs服务端已经配置完成Export list for 192.168.80.131:/data 192.168.80.0/24
服务端配置nfs配置完成之后需要配置一下客户端的内容。
[root@localhost backup]# yum install rpcbind nfs-utils -y[root@localhost backup]# systemctl start rpcbind[root@localhost backup]# lsof -i:111COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAMErpcbind 3738 rpc 6u IPv4 30074 0t0 UDP *:sunrpc rpcbind 3738 rpc 8u IPv4 30076 0t0 TCP *:sunrpc (LISTEN)rpcbind 3738 rpc 9u IPv6 30077 0t0 UDP *:sunrpc rpcbind 3738 rpc 11u IPv6 30079 0t0 TCP *:sunrpc (LISTEN)[root@localhost /]# showmount -e 192.168.80.131Export list for 192.168.80.131:/data 192.168.80.0/24[root@localhost /]# mount -t nfs 192.168.80.131:/data/ /data/[root@localhost /]# [root@localhost /]# df -hFilesystem Size Used Avail Use% Mounted on/dev/mapper/cl-root 17G 1.1G 16G 7% /devtmpfs 478M 0 478M 0% /devtmpfs 489M 0 489M 0% /dev/shmtmpfs 489M 6.7M 482M 2% /runtmpfs 489M 0 489M 0% /sys/fs/cgroup/dev/sda1 1014M 139M 876M 14% /boottmpfs 98M 0 98M 0% /run/user/0192.168.80.131:/data 17G 1.1G 16G 7% /data//验证,在客户端往/data目录中写文件,在服务端查看,