配置NFS服务器并实现开机自动挂载
NFS服务端概述:
NFS,是Network File System的简写,即网络文件系统。网络文件系统是FreeBSD支持的文件系统中的一种,也被称为NFS. NFS允许一个系统在网络上与他人共享目录和文件。通过使用NFS,用户和程序可以像访问本地文件一样访问远端系统上的文件。
模式: 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