1、常见的存储设备或者存储系统
·存储介质
·磁盘
·sata
·ssd
·sas
·磁带
·光盘
·软盘
2、存储类型
·块存储
·分区、格式化、挂载
·raw
·对象存储
·本质上是把数据存储在文件系统上的,存文件一定是存在文件系统上的。
·对象存储会将文件的元数据和数据存储在一起,普通的文件存储系统是分开存储的。这就是区别
·数据名称不可修改
·数据也不可修改
·记录数据名称、路径即可
·查询数据的时候,必须要以绝对路径查询数据
·文件系统存储
·格式化:装载文件系统,需要格式化才能使用的(在格式化时候,会少了点大小,那些少的是存储元数据信息。)只要是文件系统,一定会有元数据。
磁盘由一个个的小格子组成的,每个小格子称为数据块,一个块大小是可以由格式化的时候指定
比如 mkfs.xfs
整个过程是把整个磁盘一个个的拆成小的磁盘块,可以指定块的大小,不指定的话,默认大小就是4KB,4096个字节。
写数据的时候,就是一块一块的写。如果数据小于4K,剩余的也不可以给别人用。如果是小文件太多了(就是说写入块的数据不大于4KB,每个块都里面写入的数据都是小于4KB),而且没顺序,诸如此类的称为磁盘碎片,只是针对机械盘。
为什么块存储被称为裸磁盘?
因为在装载文件系统之前,或者过程中,整个磁盘介质是被划分为4KB的小格子,每个小格子被称为块,所以被称为块存储,而块存储也被称为裸存储,裸存储是不可以直接写数据的,如果要裸存储要写数据,必须要格式化。分区,格式化,挂载,然后就变成了文件系统存储,才可以写数据。
什么是块存储?
就是一块裸磁盘,没做任何格式化。
块存储和裸磁盘的区别就是:有没有格式化,有没有装载文件系统,没有装载文件系统就是块存储,装载了文件系统或者格式化就是文件系统存储。
文件:
1、元数据
2、真正的数据
元数据包含什么?
文件的大小、文件的权限、属组、文件存储的位置等这些被称为元数据,磁盘上有单独的地方存储这些元数据信息。
比如这些东西,权限,属组之类的,创建的时候也没有指定,这些就是元数据信息。
我们在查找文件的时候,返回的也有元数据的信息。
真正的数据是:真正的文件
对象存储会将文件的元数据和数据存储在一起,问题是如何查找数据?
文件系统会做很多复杂的操作,很多的就是基于元数据去查找数据。如果在一块的话,查找元数据也就是查找数据。
但是如果元数据和数据在一块,怎么找元数据?
对象存储,数据一旦写入,数据名称不可修改,那么就以数据名字做唯一索引,对于对象存储而言,没办法通过元数据来查找数据,所以说存进去的数据名是不可修改的,数据也不可修改,对象存储存上去的东西,一经存储,什么都不能改。这样的话,对象存储只需要记录数据名称,路径即可。而数据名称,路径是自己记录的。在查找数据的时候,需要传入明确的数据名称以及路径。
对象存储数据可以写入也可以删除,查找。
对于对象存储可以增删改。但是不可修改。
对象存储只能通过框柱的方法去查,下面的查不到。
对象存储适用场景:
网盘、备份、后端资源、镜像、视频、图片、日志文件
既然对象存储本质也是在文件系统上的,文件系统也可以增删改查,为什么还要对象存储呢?
因为对象存储提供了一套标准的rest接口,支持远程读写。文件系统是一个系统。
对象存储本身是一个服务,对于对象存储而言,本身提供了一个http服务,可以通过这个接口上传数据,下载数据,本质上是写在本地存储上的。
最主要的是提供了http接口,可以读写删除。
好比登陆百度网盘写入数据。如果是文件系统的话,就是提供一个文件系统去写。。。。这样不合适。。。
http服务支持增删查,curl -X POST http://s3.gch.cn/aaa/bbb/111 -d @111.txt 将本地的@111.txt文件上传到对象存储上了。
读取的时候 curl http://s3.gch.cn/aaa/bbb/111 这样就是读取下来了。但是不支持修改,如果要修改,下载到本地再POST上去,但是那又是一个新的,和之前的没半毛钱关系。
curl -X DELETE http://s3.gch.cn/aaa/bbb/111 删除上传的内容。
集中式存储:
·DAS:直连式存储,通过磁盘总线连接,移动硬盘就是个很好的例子。
·SAN:本质上和DAS没区别,只不过SAN是通过网络连接,全称是存储区域网络
·光纤存储fcsan
·iscsiscan挂载的是裸磁盘,需要自己格式化,分区,装载文件系统
·NAS:也是网络连接,区别是SAN提供的是块存储,NAS是提供的网络系统存储,在NAS上面已经格式好了,可以直接使用,但是SAN是裸磁盘,需要自己装载文件系统。所以说NAS只是比SAN多做了一步。最典型的NAS就是NFS,CIFS(CIFS针对windows实现SMB服务)
淘宝的大战略:去IOE,去除IBM的aix,去除Oracle数据库,去除EMC存储。这些东西太贵了,能吓死人,所以说淘宝将这些东西全部去除。
将Oracle替换为—>mysql---->alisql
aix替换为—>x86服务—>linux---->alios(centos)
因为EMC存储就是用的SAN和NAS,当磁盘插满的时候就得买,但是太贵了。
分布式存储就是因为商业存储太贵才发展起来的:
1、便宜
·可以用普通的商业服务器甚至是普通的家用服务器就可以组建起来分布式存储,对硬件要求不是很大
2、能解决商业存储的设备:可以扩展到任意大小,扩展性。
·当磁盘空间不足时,可以随意添加磁盘空间
3、可用性。
·一台服务器一块盘或者一块服务器出现宕机时候,数据服务不会丢失,还可正常提供服务。
4、性能还过得去。只有数据库对这种需求比较大,但是数据库也不会放到分布式存储上。数据库基本是DAS
·保障基本的业务性能需求。
分布式存储:
·moosefs
·metaserver:
·1、与客户端建立连接并返回数据相关的信息,比如说chunkserver在哪,读取的数据在哪,应该写到哪个chunkserver上。
·2、存储元数据信息
·3、只要存储元数据的就叫metaserver
·glusterfs
·ceph
对于存储而言,客户端是业务服务器。存储视频,图片之类的是由业务服务器存的。
为什么分布式存储性能会差?
因为在写入数据的时候,为了分布会将数据写入到每个服务器里面,而且再加上网络的传输延迟,所以说性能不是很好,而且还有一个重要的是,网络要强壮,网络必须要好。不然直接影响性能。
mkfs —>分布式的文件系统存储
chunkserver:数据服务器。chunkserver之间会互相读数据。挂掉一个chunkserver也只是丢掉一个副本而已,不影响业务。除非全挂了。因为是多个副本,所以说不需要做raid,挂了就挂了,挂了直接拔掉再换一个新的。
metaserver:元数据服务器。有所有chunkserver的信息,存储数据的大小、属组属主、mode、副本数、每个磁盘的独立标识。读数据直接从meteserver找。然后将对应的chunkserver返回给客户端。
1、与客户端建立连接并返回数据相关的信息,比如说chunkserver在哪,读取的数据在哪,应该写到哪个chunkserver上。
2、存储元数据信息
但是如果chunkserver有几百台,那么metaserver怎么办?
对于moosefs分布式存储而言,metaserver是无法扩展的,如果满了就完了。这也是一个最大弊端。
万一metaserver挂了怎么办呢?
于是出现了metalogserver,元数据在写入的同时会出现日志,metalogserver会实时同步metaserver上的数据,如果metaserver挂了,将metalogserver的备份导入到metaserver。但是这样的最大问题,就是存储会中断了,那就找死了。所以说metalogserver是一个鸡肋。
做一个NFS,将几台metaserver挂载到同一个NFS,这样就可以共享存储数据,因为moosefs的工作机制,只能有一台metaserver工作。
但是对接的时候,第二台metaserver要加载第一台metaserver的内存缓存到自己的服务器上,这个过程,会非常非常慢,效能非常差。
在这个加载的时间,虽然能正常提供mfs服务,但是一边要加载内存缓存,一边还要提供服务,这个时候的性能是非常差的,非常非常的卡。
所以这也是mfs不适合超大存储规模的一个原因。
ceph:
提供的最早功能是:对象存储,在此基础上扩展了块存储(性能不好),最后才有了文件系统存储(性能也不好)。但是对文件系统的支持是很差。
对象存储最早诞生于:AWS(亚马逊云),当初也不叫对象存储,叫s3,最大的意义就是解决了上传下载大文件的问题。
最主要的意义是定义了一套标准的接口, curl -X POST完成上传,curl -X GET 完成下载,curl-X DELETE完成删除,根据这些规范完成s3的操作。
然后全球巨大的山寨之王:OpenStack—>swift,也定义了一套对象存储的规范,因为S3和swift名气非常大,所以说,所有云的对象存储规范都会支持S3和swift。
moosefs和glusterfs是只支持文件系统存储
moosefs的文件系统存储就只有一个元数据服务器,glusterfs的文件存储将元数据服务器拆成两份,客户端承受一部分功能,服务端也承受一部分功能。
ceph同时支持三种类型,而且不存在单点故障(高可靠性),每个组件都可以扩展(高扩展性),可以运行在任何普通商业硬件之上(所有分布式存储都是这样),每个组件都尽可能拥有自我管理和自我修复能力:
ceph的对象存储:
非常好
ceph的块存储:底层是对象。
如果要使用ceph的块存储,没有nvme-ssd和SATA-ssd就别用了。本身就是依靠ssd的性能,自己真的很一般。
ceph的文件系统存储:
是最差的,
sds—>software define storage 软件定义存储 #通过分布式软件实现分布式存储
sdn—> software define network 软件定义网络 #通过分布式软件实现分布式网络
ceph的发行版本以的26字母为准。最新版本是P版16.X 。2020年10月11日11:29:11。
当前最新稳定版是N版,14.X。偶数是稳定版,奇数是开发版。N版相当于L版有了巨大的性能提升。
对于ceph而言,也要有客户端,只需要安装客户端包就行了。客户端基于写对象是http
monitor:是整个集群入口,负责与客户端建立连接,并返回集群状态信息给客户端。
所以说monitor记录的数据:集群中有多少个数据节点,每个数据节点有多少块磁盘,每块磁盘有多大容量。
OSD:真正存储数据,每一个存储节点成为OSD节点,每一个存储数据的磁盘成为OSD磁盘,磁盘大小不需要一样。ceph内部对每个磁盘大小不同的磁盘有一个权重(优先级)。对象存储在存储数据的时候会进行切片。每个OSD之间都互相同步数据。对于ceph而言,一个数据块为4M,文件大于4M就会进行切片。
对ceph而言,如果是做文件系统挂载呢?
元数据服务器是独立的元数据服务器,只对于ceph而言。
但是在ceph中,做文件系统挂载,元数据服务器是一定需要的,元数据服务器是用来存储元数据的,元数据实际上是存储在OSD上面的,客户端首先请求monitor拿到集群状态信息,然后通过集群状态信息就可以找到元数据是哪个,找到元数据之后会请求元数据服务器,元数据服务器回去找OSD拿到元数据,然后在元数据服务器的本地缓存一份,然后元数据服务器把元数据返回给客户端。所以说元数据信息是由元数据服务器返回给客户端的,客户端请求OSD只是拿数据,不是拿元数据,元数据只是找MDS拿的。
Ceph的元数据服务器叫MDS,只在文件系统存储中才有。
MGR:主要作用是监控,通常与monitor装在一起,不需要任何配置。
一个OSD进程代表一块磁盘。
磁盘都是单盘,所以说不用raid。如果必须要做raid,那就针对所有单盘都做个raid0。好处就是加速磁盘写入。
ceph主要是用副本来保护数据的。