一、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_64 rpcbind-0.2.0-44.el7.x86_64 //下载完成之后会多一个nfsnobody的用户 [root@localhost ~]# id nfsnobody uid=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:111 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME rpcbind 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:111 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME rpcbind 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.131 Export 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 -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/cl-root 17G 1.1G 16G 7% / devtmpfs 478M 0 478M 0% /dev tmpfs 489M 0 489M 0% /dev/shm tmpfs 489M 6.7M 482M 2% /run tmpfs 489M 0 489M 0% /sys/fs/cgroup /dev/sda1 1014M 139M 876M 14% /boot tmpfs 98M 0 98M 0% /run/user/0 192.168.80.131:/data 17G 1.1G 16G 7% /data //验证,在客户端往/data目录中写文件,在服务端查看,