存储和nfs网络文件系统
一、存储
1、概述
1、存储架构的演进
-
自带存储
-
直连存储(DAS),通过这个scsi线,DAS,直连单台服务器,无法实现共享
-
u盘,硬盘,光盘
-
需要分区格式化后才能使用
-
-
集中式存储(NAS/SAN),通过网络,提供共享,但是存在单点瓶颈,
-
分布式存储(云存储),通过网络将数据分散在多态服务器上
2、按照使用使用方式
-
共享存储,一台存储设备供给多台服务器使用,SAN,NAS,分布式存储
-
独享存储,存储设备或介供一台服务器使用,服务器自带硬盘, 内部总线(SATA/SAS)直连,直连存储
-
DAS 直连式存储(通过scsi(前端)总线和存储设备直连)
-
u盘,硬盘,光盘
-
需要分区格式化后才能使用
-
-
NAS 网络附加存储(通过网络连接到指定的存储并得到共享目录)
-
NFS,CIFS
-
在主机上表现的是一个共享目录,能直接使用
-
-
SAN 存储区域网络(指的是存储设备和主机的直连网络)
-
根据网络的类型差异,将其分为2类
-
ip-san 也就是通过以太网进行共享
-
fc-san 通过光纤网络进行共享
-
表现为块介质,需要分区格式化后挂载使用
-
3、数据存储方式和访问方式
-
块存储 挂载到存储设备上,数据存储到硬盘里面,需要格式化挂载才能使用
-
文件存储 挂载文件系统存储设备上,nfs,数据存储在目录里面,需要有对对应的文件系统驱动
-
对象存储 url访问,存储在对象存储系统上,http接口来进行访问
2、NAS网络附加存储
-
关注点:
-
存储资源如何做成文件系统
-
如何将文件系统共享出去(通过共享协议进行共享)
-
-
NAS的共享协议
-
NFS 网络文件系统,linux与linux之间
-
CIFS 通用性网络文件系统,linux之间和windows之间
-
-
特点:
-
无需购买特定的硬件,普通服务器和x86架构即可实现NAS
-
也不需要复杂的组网就可以进行文件共享
-
通常支持普遍的文件共享协议比如NFS和CIFS
-
在使用者的客户端表现形式永远是一个目录因此不需要分区格式化即
-
二、nfs
1、概述
1、nfs是什么
-
是一个NAS,网络文件系统,挂载到宿主机上是一个目录
-
通过网络连接共享的出去的
-
让网络上的多台计算机能够像访问本地硬盘一样,透明的共享同一个目录
-
是一个C/S架构
2、nfs解决了什么
-
在没有NFS的时候
-
三个服务器,用户在A服务器上上传了一个图片
-
下次访问的时候,负载均衡分发到B服务器,但是这个服务器根本没有这个照片,访问不到
-
-
有了NFS后
-
创建了一个通用的地址,所有服务器都挂载同一个网络路径
-
实现了数据一致,解决了无需再每台服务器上重复存放相同的文件,一份存储,多个计算机使用
-
-
这就是NFS要解决的核心矛盾:在由多台计算机组成的网络中,如何让数据被所有计算机一致地访问,从而让计算机可以专注于“计算”而无须关心数据在哪。
3、nfs依赖的包
-
rpc-bind 端口协商,端口映射,服务之间的端口映射
-
就是客户端不知道服务端的nfs监听在哪一个端口上,这个rpcbind就知道nfs监听的端口,注册端口,客户端就知道了
-
nfs-server nfs的主程序,来自于nfs-utils,这个包即是服务端也是客户端程序包
4、nfs工作流程
-
在/etc/export 中配置NFS的共享条目
-
启动nfs-server服务,nfs向rpc-bind注册端口
-
用户访问nfs服务时,先通过111端口请求rpc-bind
-
rpc-bind根据用户的请求来查找nfs注册记录
-
rpc-bind找到注册记录后将nfs的端口返回给客户端
-
客户端根据返回的端口重新连接nfs服务,开始处理共享文件

2、nfs实现
1、服务端配置
yum -y install nfs-utils
# 创建nfs共享目录,就是共享给客户端的目录
mkdir /nfs-share
# 编辑nfs配置文件
[root@server ~]# cat /etc/exports
/nfs-share *(rw) # *表示任何客户端的都能访问,rw表示对共享文件有读写的权限
systemctl enable rpcbind --now
systemctl enable nfs-server --now
2、客户端配置
# 安装客户端软件包
yum -y install nfs-utils
# 查看服务端共享
[root@node1 ~]# showmount -e 192.168.50.20
Export list for 192.168.50.20:
/nfs-share *
# 手动挂载nfs,将共享目录挂载到mnt目录下面
[root@node1 ~]# mount -t nfs 192.168.50.20:/nfs-share /mnt/
[root@node1 ~]# df -hT /mnt
Filesystem Type Size Used Avail Use% Mounted on
192.168.50.20:/nfs-share nfs4 49G 2.4G 44G 6% /mnt
# 自动挂载,写入到/etc/fstab中
192.168.50.20:/nfs-share /mnt nfs defaults 0 0
# __netdev 是网络设备
# nfs是网络文件系统,在系统重启的时候,会自动的等待网络启动后,才挂载到目录上面去
3、权限的问题
- 上面的实验完成了客户端挂载服务端
客户端在这个共享目录里面写入文件,发现没有权限
# 没有权限写入,但是nfs配置文件配置了rw的权限
[root@node1 mnt]# echo 123 > 1.txt
-bash: 1.txt: Permission denied
- 没有权限的原因的就是,客户端的root被压缩成了nobody,客户端对其进行写入的操作的话,是没有权限的
# 将共享目录属性设置为nobody
[root@server nfs-share]# chown nobody:nobody .
[root@server nfs-share]# ll -d .
drwxr-xr-x 2 nobody nobody 4096 Mar 5 20:21 .
# 客户端进行写入操作
[root@node1 mnt]# echo 123 > 1.txt
[root@node1 mnt]# cat 1.txt
123
# 创建的文件,属主和属组都是nobody
[root@node1 mnt]# ll
total 4
-rw-r--r-- 1 nobody nobody 4 Mar 5 20:37 1.txt
- 还有一种解决方法就是,在nfs配置中配置,客户端挂载的时候,不压缩root为nobody
# 将共享文件属性改为root
[root@server nfs-share]# ll -d
drwxr-xr-x 2 root root 4096 Mar 5 20:40 .
[root@server nfs-share]# cat /etc/exports
/nfs-share *(rw,no_root_squash)
# 重启nfs服务
[root@server nfs-share]# systemctl restart nfs-server
[root@node1 mnt]# echo 999 > 2.txt
[root@node1 mnt]# ll
total 8
-rw-r--r-- 1 nobody nobody 4 Mar 5 20:37 1.txt
-rw-r--r-- 1 root root 4 Mar 5 20:40 2.txt
-
客户端没有被压缩为nobody的话,root就有写入的权限,因为这个对root有w的权限
-
为什么会有这个压缩客户端的root为nobody呢?
- 为了避免客户端的roo用户可以修改服务端root用户的文件,注意默认仅打压了root用户,普通用户没有打压,也就是服务端uid1000的用户,对应的客户端uid是1000的用户
3、配置文件详解
-
ro 表示 只读的方式共享
-
sync 同步模式,写入的时候,直接写入到磁盘中,才能进行下一次操作
-
async 异步模式,先写入到内存中,在写入到磁盘中,这样的话,速度非常的快,但是断电的话,内存中的数据就会丢掉
-
no_root_squash 不将客户端的root用户映射为nobody用户
-
root_squash 将客户端的root用户映射为nobody用户,默认开启
-
all_squash 将客户端的所有的普通用户映射为nobody用户
# 查看配置项
[root@server nfs-share]# exportfs -v
/nfs-share <world>(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,no_root_squash,no_all_squash)
注意
-
客户端挂载的时候,root映射为nobody,所以没有权限
-
文件锁
-
ip-san ,虚拟硬盘,网络模拟出来的硬盘,

浙公网安备 33010602011771号