Linux常用工具服务——NFS共享文件系统

NFS介绍

NFS(Network File System)网络文件系统,它的主要功能是通过网络(一般是局域
网)让不同的主机系统之间可以共享文件或目录,NFS客户端(一般为应用服务器,例如web)可以通过挂载(mount)的方式将NFS服务器端共享的数据目录挂载到NFS客户端本地系统中(就是某一个挂载点下)

应用场景

(1) 共享视频,图片,附件等静态资源文件
(2) 在虚拟机动态迁移过程中,数据盘共享存储减少迁移数据量,提高迁移效率
(3) 在负载均衡场景中,为负载服务器提供统一的大数据存储

NFS环境部署

主机规划

角色 主机名 ip
NFS服务器端 nfs01 192.168.213.129
http web服务器 web01 192.168.213.125

修改主机名

NFS服务器端
hostnamectl set-hostname nfs01
su -l
http web服务器
hostnamectl set-hostname web01
su -l

处理防火墙

systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i "/^SELINUX=/cSELINUX=disabled" /etc/selinux/config

NFS服务器端设置

nfs-utils:NFS服务的主程序,包括rpc.nfsd,rpc.mountd这两个daemons和相关文档说明,以及执行命令文件等
rpcbind:完成端口和功能的对应映射,在提供NFS服务之前必须先启动rpcbind服务

(1) 准备工作

rpm -qa nfs-utils rpcbind
yum install nfs-utils rpcbind -y

查看某个命令属于哪个软件包
[root@nfs01 ~]# rpm -qf /usr/sbin/rpcinfo
rpcbind-0.2.0-48.el7.x86_64
[root@nfs01 ~]# rpm -qf `which showmount`
nfs-utils-1.3.0-0.65.el7.x86_64

(2) 启动rpcbind

systemctl start rpcbind

查看NFS服务向rpc服务注册的端口信息

[root@nfs01 ~]# rpcinfo -p localhost	;111端口为rpcbind服务对外提供服务的主端口
   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常见进程说明

(4) 启动NFS服务 systemctl start nfs

(5) 配置NFS服务端开机自启动

systemctl enable nfs
systemctl enable rpcbind

(6) 修改NFS服务的默认配置
NFS共享的目录 NFS客户端地址1(参1,参2...)客户端地址2(参1,参2...)

[root@nfs01 ~]# cat /etc/exports
/data 192.168.213.0/24(rw,sync)

命令说明:
/data :nfs的共享目录路径
192.168.213.0/24:允许挂载我的共享目录的IP地址段
(rw/ro):可读可写/只读
(sync/async):实时同步/异步

systemctl reload nfs	;修改配置文件后,必须重启nfs服务

(7) 创建共享目录并授权创建共享目录并授权

[root@nfs01 ~]# 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@nfs01 ~]# mkdir /data
[root@nfs01 ~]# chown -R nfsnobody:nfsnobody /data

如果不授权属主属组,那么共享目录挂载以后将不遵循配置文件exports的设定好的读写规则,虽然能正常挂载,但是会导致写入文件时提示没有权限

本地挂载测试

[root@web01 ~]# mount 192.168.213.129:/data /mnt
[root@web01 ~]# ls /mnt
[root@web01 ~]# echo "test" >/mnt/test
[root@web01 ~]# ls /mnt
test

[root@nfs01 ~]# cat /data/test
test

当配置文件exports里设定了(rw,rsync)后,表示目录可读写,并且是实时同步的,也就是说,在其中任意一个挂载目录里改变了里面的内容信息,那么所有挂载目录包含源共享目录的内容信息同步改变

配置NFS客户端实战

(1) 安装nfs-utils软件

yum install nfs-utils -y

(2) 检查远端showmount

[root@web01 ~]# showmount -e 192.168.213.129
Export list for 192.168.213.129:
/data 192.168.213.0/24

(3) 客户端挂载

[root@web01 ~]# mount 192.168.213.129:/data /mnt

(4) 进行文件读写及同步测试

[root@web01 ~]# ls /mnt
[root@web01 ~]# echo "test" >/mnt/test
[root@web01 ~]# ls /mnt
test
[root@web01 ~]# ssh [email protected] "ls /data"
[email protected]'s password:
test

(5) 配置开机自动挂载nfs共享目录(/etc/fstab)
方法一:将挂载命令放在/etc/rc.local里

echo "mount -t nfs 192.168.213.129:/data /mnt" >> /etc/rc.local

缺点:偶尔开机挂载不上,工作中除了开机自启动配置,还要对是否挂载做监控

方法二:将挂载命令放在/etc/fstab里

192.168.213.129:/data /mnt nfs defaults 0 0

缺点:在CentOS6及以前:fstab会优先于网络被Linux系统加载,网络没启动时执行fstab会导致连不上NFS服务器端,无法实现开机挂载,需要在开机自启动服务里设置并启动netfs服务

[root@web01 ~]# chkconfig --list netfs
netfs 0:关闭 1:关闭 2:关闭 3:关闭 4:关闭 5:关闭 6:关闭
[root@web01 ~]# chkconfig netfs on
[root@web01 ~]# chkconfig --list netfs
netfs 0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭

NFS配置权限设置常用参数说明

参数 说明
rw Read-write,表示可读写权限
ro Read-only,表示只读权限
sync 实时同步,请求或写入数据时,数据同步写入到NFS Server的硬盘后才返回
async 异步,写入时数据会先写到内存缓冲区,只到硬盘有空档才会写入磁盘,以提升写入速率
风险为若服务器挂掉或不正常关机,会损失缓冲区中未写入磁盘的数据
no_root_squash 不降低root账户在共享目录的身份,身份还是root
root_squash 将root账户在共享目录里的身份降低为匿名者(默认nfsnobody)身份
all_squash 将所有访问用户在共享目录里的身份都降低为匿名者(默认nfsnobody)身份
anonuid 指定共享文件夹里文件所有者的uid号:例如:(rw,squash,anonuid=12306,anongid=12306)
anongid 指定共享文件夹里文件所有者的gid号:例如:(rw,squash,anonuid=12306,anongid=12306)

详解

root_squash(NFS默认使用的参数)

(1) root用户在共享目录里创建的文件的属主属组为nobody,任何文件都不受保护,所有用户都可以读取,修改,删除
(2) root用户依然有管理者权限,能对所有共享目录里的所有文件进行查看,修改,删除操作
(3) 所有普通用户之间只能互相查看文件,但不知道是谁创建的,只能修改或删除自己创建的文件

no_root_squash

(1) root在共享目录里创建的文件的属主属组为root,不能被普通用户修改和删除
(2) 非root用户同root_squash一样,并不降低权限

all_squash

所有用户只要在共享目录里创建文件,那么文件的属主属组就是默认情况下的nfsnobody,任何访问用户都可以对共享目录里的任何文件进行查看,修改,删除操作

anonuid和anongid

这两个参数通过指定虚拟账户的uid和gid的方式修改NFS默认的虚拟账户nfsnobody

exports配置文件相关参数的说明

# sample /etc/exports file
/ master(rw) trusty(rw,no_root_squash)
/projects proj*.local.domain(rw)
/usr *.local.domain(ro) @trusted(rw)
/home/joe pc001(rw,all_squash,anonuid=150,anongid=100)
/pub *(ro,insecure,all_squash)

上述各个列的参数含义如下:
(1)NFS共享的目录:为NFS服务端要共享的实际目录,要用绝对路径
(2)NFS客户端地址:为NFS服务端授权的可访问共享目录的NFS客户端地址
(3)权限参数集:对授权的NFS客户端的访问权限设置

nfs权限(共享权限):本地文件系统权限,挂载目录的权限

客户端地址 具体地址 说明
授权单一客户端访问NFS 10.0.0.30 一般情况,生产环境中此配置不多
授权整个网段可访问NFS 10.0.0.0/24 配置简单,维护方便
授权整个网段可访问NFS 10.0.0.* 指定网段的另外写法(不推荐使用)
授权某个域名客户端访问 nfs.chensiqiedu.com 此方法生产环境中一般不常用
授权整个域名客户端访问 *.chensiqiedu.com 此方法生产环境中一般不常用

练习

实例一:
共享/data目录给10.0.0.0/24整个网段可读可写

[root@nfs01 ~]# mkdir /data
[root@nfs01 ~]# chown -R nfsnobody:nfsnobody /data
[root@nfs01 ~]# cat /etc/exports
/data 10.0.0.0/24(rw,sync)

实例二:
nfs服务器:172.16.1.31
共享下面两个目录:
/app/w :要求可读可写,同步数据,所有用户压缩为匿名用户
/app/r:要求只读,同步数据,所有用户都压缩为匿名用户
客户端上面的要求:
backup服务器,把nfs服务器的/app/r挂载到/data/r
web01服务器,把nfs服务器的/app/w挂载到/data/w

NFS服务器配置:
[root@nfs01 ~]# mkdir -p /app/w
[root@nfs01 ~]# mkdir /app/r
[root@nfs01 ~]# chown -R nfsnobody:nfsnobody /app
[root@nfs01 ~]# ls -l /app
total 0
drwxr-xr-x 2 nfsnobody nfsnobody 6 Feb 18 20:32 r
drwxr-xr-x 2 nfsnobody nfsnobody 6 Feb 18 20:32 w
[root@nfs01 ~]# cat /etc/exports
/app/w 192.168.213.0/24(rw,sync,all_squash)
/app/r 192.168.213.0/24(ro,sync,all_squash)
[root@nfs01 ~]# systemctl reload nfs	#重启nfs服务
NFS客户端配置:
[root@web01 ~]# mkdir -p /app/r
[root@web01 ~]# mkdir /app/w
[root@web01 ~]# mount -t nfs 192.168.213.123:/app/w /app/w
[root@web01 ~]# mount -t nfs 192.168.213.123:/app/r /app/r
```![在这里插入图片描述](https://img-blog.csdnimg.cn/20200218211247715.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQyMDQ5NDk2,size_16,color_FFFFFF,t_70)
发布了57 篇原创文章 · 获赞 32 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_42049496/article/details/104293008