【Linux网络】典型NAS存储方式:NFS网络共享存储服务
一、关于存储的分类
二、NFS的介绍
nfs的相关介绍:
1、原理
2、nfs的特点
3、nfs软件学习
4、共享配置文件的书写格式
关于权限,学习:
5、关于命令的学习:
三、实验操作
1、nfs默认共享权限(服务端设置)
2、客户端进行挂载
编辑 3、客户端测试:
4、调优
①修改共享配置文件,添加写的权限
②还需要修改文件夹,因为目前现在文件夹没有其他用户的写的权限
四、总结
一、关于存储的分类
存储类型分为三种
1、直连式存储:Direct-Attached Storage,简称DAS
特点:存储和主机直接连接,比如家用的电脑,服务和硬盘直接连接,存储和主机在一台机器上
适用范围:适用于那些数据量不大,对磁盘访问速度要求较高的中小企业
2、网络附加存储:Network-Attached Storage,简称NAS
特点:存储在远程,文件系统也在远程,这块空间是你可以直接访问上面的文件,如ftp、nfs都属于NAS(可以理解为通过网络共用一个设备,且设备的数据仅存了一份)
适用范围:适用于文件服务器,用来存储非结构化数据,虽然受限于以太网的速度,但是部署灵活,成本低
3、存储区域网络:Storage Area Network,简称SAN
特点:有一定的距离,主机距离存储设备相对较远,只提供空间不提供文件系统,管理等其他软件服务,比如ceph,gfs等
适用范围:适用于大型应用或数据库系统,缺点是成本高、较为复杂
二、NFS的介绍
nfs的相关介绍:
nfs是一种NAS存储,NFS也是一种网络文件系统,基于内核的文件系统。
nfs端口号不固定,早期喜欢说是2049,但是实际上是不固定的,它依赖于rpc(Remote Process Call,远程过程调用协议),通过nfs协议,客户机可以像访问本地目录一样远程访问服务器的共享资源。
1、原理
首先,服务端:nfs开启以后,服务端自己的rpc会注册相关信息;
然后,客户端:想要去连接服务端,会先找一下rpc注册中心,获取nfs的端口号(因为nfs的端口号是随机的,由rpc来进行管理) ;
最后,rpc会告诉客户端关于服务端的nfs端口号,客户端实现访问
2、nfs的特点
- 使用tcp/ip传输网络文件(rpcbind的端口号是111,nfs的端口号不固定)
- 比较适合局域网环境,内部操作
- 安全性低
3、nfs软件学习
软件包:nfs-utils(包括服务器端和客户端)
相关软件包:rpcbind(必须)(centos7的rpcbind由systemd直接管理,不需要启动,会有叫醒服务,在centos7之前都需要先启rpcbind再启动nfs)
nfs端口号不固定 RPC端口号111(tcp和udp都是)
NFS服务主要进程:
-
rpc.nfsd 最主要的NFS进程,管理客户端是否可登录
-
rpc.mountd 挂载和卸载NFS文件系统,包括权限管理
-
rpc.lockd 非必要,管理文件锁,避免同时写出错
-
rpc.statd 非必要,检查文件一致性,可修复文件
日志:/var/lib/nfs/
4、共享配置文件的书写格式
/etc/exports
共享目录 共享给哪些主机(权限)
/dir 192.168.20.0/24(rw.....等)
举例:最简单的:/opt *
可获取的主机可以是一台,也可以是网段等
关于权限,学习:
默认选项:(ro,sync,root_squash,no_all_squash)
ro,rw 只读和读写(如果允许客户端创建文件夹,写内容等,需要调为rw)
async 异步,数据变化后不立即写磁盘,先写入到缓冲区中,过一段时间再写入磁盘,性能高,安全性低
##但是异步的速度快,因为缓存在内存了
sync(1.0.0后为默认)同步 ##数据在请求时立即写入共享存储磁盘,性能低,安全性高
root_squash ##(默认)远程root映射为nfsnobody,UID为65534,CentOS8 为nobody,CentOS
7以前的版本为nfsnobody
no_root_squash ##远程root映射成NFS服务器的root用户
all_squash 所有远程用户(包括root)都变成nfsnobody,CentOS8 为nobody
no_all_squash (默认)保留共享文件的UID和GID(这里注意是id号)
anonuid和anongid 指明匿名用户映射为特定用户UID和组GID,而非nobody,可配合all_squash使用
/data/nfs1 *(rw,all_squash,anonuid=1002,anongid=1002)
##以后在生产环境中,为了调优和统一化部署,建议映射为id号相同的用户
5、关于命令的学习:
服务端:
1、软件的配置文件不需要修改,需要修改共享配置文件:/etc/exports
2、修改完以后,先重启一下nfs服务,有两种方法:exportfs -r和systemctl reload nfs
3、查看本机的共享配置文件信息:exportfs -v
客户端:
1、需要知道服务端是否开启了共享服务:showmount -e 服务端的ip
2、服务端需要挂载:
临时挂载:mount 服务端ip:/共享目录 挂载点
永久挂载:vim /etc/fstab;服务端ip:/共享目录 挂载点 nfs defaults,_netdev 0 0
注意:因为是通过网络共享,那么需要知道,万一服务器不在线,那么永久挂载的配置文件会在开机的时候加载,那么如果没有“_netdev”则开不了机。这个“_netdev”的意思是能够ping通才行,没ping通不生效
三、实验操作
1、nfs默认共享权限(服务端设置)
[root@localhost ~]#mkdir /data
[root@localhost ~]#vim /etc/exports
##exportfs -r和systemctl reload nfs用法一样
[root@localhost ~]#exportfs -r
exportfs: No options for /data 192.168.20.0/24: suggest 192.168.20.0/24(sync) to avoid warning
[root@localhost ~]#exportfs -v
/data 192.168.20.0/24(ro,sync,wdelay,hide,no_subtree_check,sec=sys,secure,root_squash,no_all_squash)
2、客户端进行挂载
[root@localhost ~]#systemctl start nfs
[root@localhost ~]#showmount -e 192.168.20.30
[root@localhost ~]#mkdir /nfsdir
##临时挂载
[root@localhost ~]#mount 192.168.20.30:/data /nfsdir/
[root@localhost ~]#df -hT
##永久挂载
[root@localhost ~]#vim /etc/fstab
[root@localhost ~]#mount -a
[root@localhost ~]#df -hT
3、客户端测试:
4、根据实验来学习权限配置
想要客户端有写的权限:
①修改共享配置文件,添加写的权限
②还需要修改文件夹,因为目前现在文件夹没有其他用户的写的权限
5、关于文件的属主
1、默认情况下,是root_squash,no_all_squash,即:root压榨为匿名用户,普通用户只是保留uid与名称无关
2、添加完rw权限以后,客户端可以写内容也可以删除内容
6、客户多台客户机使用nfs
7、比较常用的选项配置:
共享配置文件的常用选项
/data *(rw,all_squash,anonuid=2000,anongid=2000)
测试结果
建议在使用的时候,将所有主机的uid=2000的用户使用同一个人,这样比较方便
拓展
在这个使用的基础上,指定uid为2000的用户使用,这样更加安全!!
验证 在服务端和客户端只是认识uid为2000的用户,换个名字也是一样的
8、验证rpcbind是tcp和udp的111端口:
四、总结
1、服务端添加共享目录的写的权限的时候,需要注意给软件添加权限,然后还得给共享的目录添加权限,目录权限添加有两种办法:直接用chmod 777;或者使用setfacl 只给指定的用户或uid给rwx权限;
2、rpcbind用了tcp协议也用了udp协议,都是111端口,tcp用于建立可靠的客户端连接,udp用于管理注册信息nfs的端口号;
3、要知道如果系统默认是进行root压榨为nfsnobody和普通用户不压榨,但是是以uid记录,所有属主和属组都是看uid的,与用户名无关;
4、在生产环境中,建议使用全部压榨,调整为uid为统一的用户,使用setfacl限定,这样数据更安全
5、最后,nfs是一种nas存储方式,nfs本身就是一种网络文件系统,所以直接挂载就可以使用