配置NFS服务器并实现开机自动挂载

NFS服务端概述:
NFS,是Network File System的简写,即网络文件系统。网络文件系统是FreeBSD支持的文件系统中的一种,也被称为NFS. NFS允许一个系统在网络上与他人共享目录和文件。通过使用NFS,用户和程序可以像访问本地文件一样访问远端系统上的文件。

nfs4使用的端口号 nfs默认端口号是多少_centos


nfs4使用的端口号 nfs默认端口号是多少_nfs4使用的端口号_02

模式: C/S 模式
端口:
RHEL7是以NFSv4作为默认版本,NFSv4使用TCP协议(端口号是2049)和NFS服务器建立连接

安装NFS

[root@localhost178 ~]# yum -y install rpcbind nfs-utils

配置文件位置

[root@localhost178 ~]# ls /etc/exports
/etc/exports

启动NFS服务

[root@localhost178 ~]# systemctl start rpcbind           #启动nfs前,先启动rpcbind
[root@localhost178 ~]# systemctl start nfs-server.service
[root@localhost178 ~]# netstat -anltpu |grep 2049            #查看端口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@localhost178 ~]# chkconfig nfs-server on
注意:正在将请求转发到“systemctl enable nfs-server.service”。
Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.

客户端

[root@localhost181 ~]# yum -y install rpcbind nfs-utils  #安装不需要启服务
[root@localhost181 ~]# showmount -e 10.10.100.178    #能够查看到这样的内容,就可以进行挂载了
Export list for 10.10.100.178:

服务端配置文件

[root@localhost178 ~]# mkdir /web
[root@localhost178 ~]# vim /etc/exports   #写入内容
/web  *(rw)
共享文件夹      对所有开放(读写权限)

注意: * 表示对所有网段开放权限
也可以指定特定的网段

重启服务

[root@localhost178 ~]# exportfs -rv    ##重新读取配置文件,不中断服务.
exporting *:/web

客户端挂载共享

[root@localhost181 ~]# mkdir  /test1
[root@localhost181 ~]# mount -t nfs 10.10.100.178:/web /test1
[root@localhost181 ~]# df -h
文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root   50G  1.5G   49G    3% /
devtmpfs                 979M     0  979M    0% /dev
tmpfs                    991M     0  991M    0% /dev/shm
tmpfs                    991M  9.5M  981M    1% /run
tmpfs                    991M     0  991M    0% /sys/fs/cgroup
/dev/sda1               1014M  133M  882M   14% /boot
/dev/mapper/centos-home   47G   33M   47G    1% /home
tmpfs                    199M     0  199M    0% /run/user/0
10.10.100.178:/web        50G  1.4G   49G    3% /test1     #查看挂载成功

开机自动挂载:

[root@localhost181 ~]# cat /etc/fstab 

#
# /etc/fstab
# Created by anaconda on Thu Oct 17 08:19:57 2019
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root /                       xfs     defaults        0 0
UUID=e1a9a299-73a7-4f54-a401-f4031627ab79 /boot                   xfs     defaults        0 0
/dev/mapper/centos-home /home                   xfs     defaults        0 0
/dev/mapper/centos-swap swap                    swap    defaults        0 0
10.10.100.178:/web  /test1  nfs    defaults   0 0       #添加这一行,注意不要写错

验证写入权限

[root@localhost181 test1]# mkdir 11
mkdir: 无法创建目录"11": 权限不够

解决方法:
设置访问权限一般包含2部分
1)服务本身权限
2)目录访问权限
nfs默认使用nfsnobody用户

[root@localhost178 ~]# 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@localhost178 ~]# chmod o+w /web/
或者直接修改目录的属主与属组
[root@localhost178 ~]# ll -d /web/
drwxr-xrwx 3 root root 16 10月 17 13:40 /web/
[root@localhost178 ~]# chown nfsnobody.nfsnobody -R /web/

再次验证写入权限

[root@localhost181 test1]# mkdir 11
[root@localhost181 test1]# ll
总用量 0
drwxr-xr-x. 2 nfsnobody nfsnobody 6 10月 17 13:40 11

下面是一些NFS共享的常用参数:
ro 只读访问
rw 读写访问
sync 资料同步写入到内存与硬盘当中
async 资料会先暂存于内存当中,而非直接写入硬盘

secure NFS通过1024以下的安全TCP/IP端口发送
insecure NFS通过1024以上的端口发送
wdelay 如果多个用户要写入NFS目录,则归组写入(默认)
no_wdelay 如果多个用户要写入NFS目录,则立即写入,当使用async时,无需此设置。
Hide 在NFS共享目录中不共享其子目录
no_hide 共享NFS目录的子目录
subtree_check 如果共享/usr/bin之类的子目录时,强制NFS检查父目录的权限(默认)
no_subtree_check 和上面相对,不检查父目录权限

all_squash 共享文件的UID和GID映射匿名用户anonymous,适合公用目录。
no_all_squash 保留共享文件的UID和GID(默认)
root_squash root用户的所有请求映射成如anonymous用户一样的权限(默认)
no_root_squash root用户具有根目录的完全管理访问权限

[root@localhost178 ~]# cat /etc/exports
/web/a/      *(rw,no_root_squash)
/web/a/sync               10.10.100.0/24(rw,sync)
/web/a/ro                  10.10.100.181(ro)
/web/a/all_squash             10.10.100.0/24(rw,all_squash,anonuid=500,anongid=500)
/web/a/async                    10.10.100.0/255.255.255.0(async)
/web/a/rw          10.10.100.0/255.255.255.0(rw)    10.10.101.0/255.255.255.0(rw)
/web/a/root_squash   *(rw,root_squash)

注意:在发布共享目录的格式中除了共享目录是必跟参数外,其他参数都是可选的。并且共享
目录与客户端之间及客户端与客户端之间需要使用空格符号,但是客户端与参数之间是不能有
空格的

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 #内核最大写缓存

用法:

[root@localhost181 test1]#mount  -t nfs  -o noatime,nodiratime,rsize=131072,wsize=131072,intr 10.10.100.178:/web/NFS  /test1

或者写到挂载文件里:

[root@localhost181 test1]#vim /etc/fstab
10.10.100.178:/web/NFS /test1  nfs       noatime,nodiratime,rsize=131072,wsize=131072,intr 0 0