nfs
指尖二进制 • 1 年前 • 809 次点击 • LINUX
NFS概述-配置NFS服务器并实现开机自动挂载
NFS服务端概述:
NFS,是Network File System的简写,即网络文件系统。网络文件系统是FreeBSD支持的文件系统中的一种,也被称为NFS。NFS允许一个系统在网络上与他人共享目录和文件。通过使用NFS,用户和程序可以像访问本地文件一样访问远端系统上的文件。
模式:C/S模式
端口:
RHEL7是以NFSv4作为默认版本,NFSv4使用TCP协议(端口号是2049)和NFS服务器建立连接
[root@jz1 ~]# vim /etc/services
nfs 2049/tcp nfsd shilp # Network File System
nfs 2049/udp nfsd shilp # Network File System
nfs 2049/sctp nfsd shilp # Network File System
安装nfs
[root@jz1 ~]# yum -y install rpcbind nfs-utils
配置文件位置:NFS服务的配置文件为 /etc/exports,这个文件是NFS的主要配置文件,不过系统并没有默认值,所以这个文件不一定会存在,可能要使用vim手动建立,然后在文件里面写入配置内容。
[root@jz1 ~]# ls /etc/exports
/etc/exports
启动
[root@jz1 ~]# netstat -antpu | grep 2049
[root@jz1 ~]# systemctl start rpcbind
[root@jz1 ~]# systemctl start nfs-server.service
[root@jz1 ~]# netstat -antpu | grep 2049
tcp 0 0 0.0.0.0:2049 0.0.0.0:* LISTEN -
tcp6 0 0 :::2049 :::* LISTEN -
udp 0 0 0.0.0.0:2049 0.0.0.0:* -
udp6 0 0 :::2049 :::* -
配置开机启动
[root@jz1 ~]# chkconfig nfs-server on
[root@jz1 ~]# chkconfig rpcbind on
[root@jz1 jz]# systemctl list-unit-files | grep enabled|grep rpcbind
rpcbind.socket enabled
[root@jz1 jz]# systemctl list-unit-files | grep enabled|grep nfs-server
nfs-server.service enabled
修改配置文件
[root@jz1 ~]# vim /etc/exports
/data *(rw) #注意: * 表示对所有网段开放权限,也可以指定特定的网段
重新读取配置文件,不中断服务。-v显示过程
[root@jz1 ~]# exportfs -rv
客户端查看
[root@jz2 ~]# showmount -e 192.168.111.128
Export list for 192.168.111.128:
/data *
客户端挂共享目录并查看
[root@jz2 ~]# mount -t nfs 192.168.111.128:/data /export/
[root@jz2 ~]# df -Th /export/
Filesystem Type Size Used Avail Use% Mounted on
192.168.111.128:/data nfs4 7.0G 33M 7.0G 1% /export
开机自动挂载
[root@jz2 ~]# echo "192.168.111.128:/data /export nfs defaults 0 0" >> /etc/fstab
验证写入权限
[root@jz2 ~]# cd /export/
[root@jz2 export]# touch a.txt
touch: cannot touch ‘a.txt’: Permission denied
报错说没有写入权限
解决方法:
设置访问权限一般包含2部分
1)服务本身权限
2)目录访问权限
nfs默认使用nfsnobody用户
[root@jz1 ~]# grep nfs /etc/passwd
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
修改权限
[root@jz1 ~]# chmod 777 -R /data/
[root@jz1 ~]# chown nfsnobody.nfsnobody -R /data/
[root@jz1 ~]# ll / |grep data
drwxrwxrwx. 2 nfsnobody nfsnobody 6 11月 16 16:58 data
再次验证写入权限
[root@jz2 export]# touch a.txt
[root@jz2 export]# ll !$
ll a.txt
-rw-r--r--. 1 nfsnobody nfsnobody 0 Nov 16 04:17 a.txt
注意:在发布共享目录的格式中除了共享目录是必跟参数外,其他参数都是可选的。并且共享目录与客户端之间及客户端与客户端之间需要使用空格符号,但是客户端与参数之间是不能有空格的
NFS客户端挂载参数的优化:
NFS高并发环境下的服务端重要优化(mount -o 参数)
async 异步同步,此参数会提高I/O性能,但会降低数据安全(除非对性能要求很高,对数据可靠性不要求的场合。一般生产环境,不推荐使用)
noatime 取消更新文件系统上的inode访问时间,提升I/O性能,优化I/O目的,推荐使用。
nodiratime 取消更新文件系统上的directory inode访问时间,高并发环境,推荐显式应用该选项,提高系统性能
intr:可以中断不成功的挂载
rsize/wsize 读取(rsize)/写入(wsize)的区块大小(block size),这个设置值可以影响客户端与服务端传输数据的缓冲存储量。一般来说,如果在局域网内,并且客户端与服务端都具有足够的内存,这个值可以设置大一点,比如说32768(bytes),提升缓冲区块将可提升NFS文件系统的传输能力。但设置的值也不要太大,最好是实现网络能够传输的最大值为限。
内核优化:
net.core.wmem_default = 8388608 #内核默认读缓存
net.core.rmem_default = 8388608 #内核默认写缓存
net.core.rmem_max = 16777216 #内核最大读缓存
net.core.wmem_max = 16777216 #内核最大写缓存
用法:
mount -t nfs -o noatime,nodiratime,rsize=131072,wsize=131072,intr 192.168.111.128:/data /export
或者写到挂载文件里:
192.168.111.128:/data /export nfs noatime,nodiratime,rsize=131072,wsize=131072,intr 0 0