知识的领域是无限的,我们的学习也是无限期的。这篇文章主要讲述测试标题相关的知识,希望能为你提供帮助。
(一)存储的分类:
(1)集中式存储:
①nfs,raid,一台机器所有的东西都存储在一台机器上,商业硬件存储一般都是集中式比如FSAN。
(2)分布式存储:
使用多台服务器来存储相同的数据,将数据进行切片,切的这些片叫做{对象}然后查找出所有的对象并呈现出来,使其分布在不同的节点上,然后通过多副本的方式来确保这些分片的可靠性。
①moosefs
②glusterrfs
③ceph
(二)存储的类型:
(1)文件系统存储:
①就是一个目录,底层是格式化好的文件系统,格式化{装载文件系统}--挂载目录,一般有ext4,xfs这种格式,一般提供的服务有nfs,moosefs,glusterfs,ceph
(2)块存储:
②提供一块裸盘,或者一个裸分区,一般提供的服务有SANFC-SAN,ISCSI-SAN,ceph也支持
(3)对象存储:对象网关对ceph来说是客户端
①主要用于存储视频,图片等不怎么修改的文件,因为存储的时候是用切片的方式,如果采用切片的方式那么一个文件会被切成很多片,如果文件修改那么整个全部都要变动,对象存储是不支持mount挂载的,而是直接使用一个“url”或者一个地址,对象存储的标准是通过url的方式通过上传和下载删除等,对于对象存储而言,底层还是文件系统。ceph,s3,swift,但是定义对象存储接口的只有s3和swift,但是ceph同时支持s3和swift所以就支持了,而“定义的s3”的意思就是定义了使用的标准,假如什么是上传,什么是下载,什么是删除,你要使用就必须遵守这些。
②阿里云的OSS:就支持s3和swift
③总结:文件系统存储用于直接存储数据,块存储,需要格式化成文件系统存储数据,对象存储,底层实际上还是文件系统,但是在文件系统上封装了一个标准的接口,对外提供的是http的服务。
(三)ceph的简介:
(1)概念:
①ceph是提供了软件定义的,统一存储解决方案的开源项目。
②ceph是一种分布式、可扩展、高性能、不存在单点故障的存储系统(支持pb级规模数据)。
③同时支持块存储、文件系统存储、对象存储(兼容swift和s3协议),但是对块存储,和文件系统存储支持的是比较差的,没有传统的好。
(2)ceph的发行版:
①和openstack一样是开源的,主流是n版,一般选择长期支持版,比如14.X其中x表示双数的就是长期支持版,14版本是主流版本,但是学习的时候是12版也就是L版,在L版中文件存储系统是filestore,N版是bluestore性能有了极大的增强,在N版开始支持完整的图形界面管理。
(四)存储的架构:
(1)moosefs存储架构:
①文件:文件是由文件的元数据+文件的数据组成,而文件的元数据是指文件的大小,名称的格式,文件的存储位置,i号码。文件的数据就是文件的内容。
②控制节点告诉数据的大小,文件的名称,文件的存储位置,然后在拿着这些信息去读取这些数据,每一个控制节点都存储了全量的元数据,但随着元数据的增多性能也成了一部分问题,但是如果将元数据放在内存中,会解决性能问题,但是内存可能没有那么大,还有个问题就是各个控制节点怎么去同步数据,这就就没办法解决,所以只能是单控制节点采用主备的方式
一旦是主备的方式,那么等一台挂了以后数据还需要同步到另一台的控制节点,这个时候是不能对外提供服务的,那么冗余性也就丢失了,一般128G的内存,大概能存储1亿张图片,就会触发性能瓶颈,这就是moosefs的系统。
(2)glusterrfs的架构:
①安装客户端,客户端里面有每个节点的地址,然后自己会去计算出一个数据节点去写数据,下次存储的时候有会计算一个数据节点。
②在读取的时候会先读取元数据,这个元数据也是分布式存储在各个节点上的,等吧元数据读取出来之后,就在根据元数据在去读取数据。
③还会将存储的元数据在本地缓存一份{这是将自己读取过的,不是全量的},那么在连接的时候就会直接取数据,那么会在客户端会稍微内存使用多些。
(3)ceph架构:
①控制节点不叫元数据服务器叫“monitro”
②安装一个客户端,连接monitor来获取所有节点信息,但是“monitro”是不保存元数据的,但是会给元数据服务器的地址。
③然后就可以直接拿元数据服务的地址去请求元数据,多了一次请求,读取一次的时候就会缓存一份,如果没有就去数据节点去取,如果缓存满了就把没用的清理掉。
④既不用客户端记录所有的服务器的地址,也不用客户端就去缓存这些数据,使用“monitro”的方式
⑤但是明显的是访问多了一次,性能明显下降,不如glusterfs。
(4)ceph存储后端组件:
①使用ceph的时候会调用的以下3种接口,不然就需要自己开发:{ceph同时支持以下3种的存储类型}
1、RGW{对象存储,可以兼容s3和swift},是由rados封装了2个接口。
2、RBD{块存储},如果调用块存储,就需要使用RBD驱动,要进行格式化等,因为要格式化等多了一层, 所以性弄不是太好。
3、CEPH FS{类似nfs,smb},可以直接写文件。
②monitors(mon):维护集群状态的map,帮助其他守护进程互相协调,控制节点叫“monitro”
1、ceph monitor通过保存一份集群状态映射来维护整个集群的健康状态,它分别为每个组维护映射信息,包括osd map、mon map、pg map和crush map。
2、所有集群节点都向mon节点汇报状态信息,并分享它们状态中的任何变化。
3、ceph monitor不存储数据。
4、mon需要配置为奇数个,只有超过半数正常,ceph存储集群才能运行并可访问。
③object storage devices(osd):存储数据,并且处理数据复制、恢复和再平衡,据存储服务器叫做“osd”,一个osd就是一块磁盘,这是添加了3块磁盘,所以有3个osd
【测试标题】
④managers(mgr):通过web浏览器和 rest api跟踪运行指标并显示集群信息,收集所有组件的监控信息比如磁盘的大小,cpu,内存等利用率,给“monitors”,“monitors”存储下来,采集的工作是由MGR做的。
⑤metadata servers(mds):存储供 cephas使用的元数据,能让客户端高效执行posix命令。元数据服务叫“mds”
1、对象存储不需要mds,因为对象存储对于他的RGW而言很特殊,他能直接在OSD中直接读取数据,在组件的上层,提供了一个labrados库自己内部有个文件系统,而不需要mds提供的标准文件系统。
2、ceph底层实现了一个文件系统由存储驱动实现,所以对象存储网关是可以直接对到内部的存储系统去的,而不需要经过mds,mds只是提供一个标准的文件系统给ecph对外提供ecph。
3、为ceph文件系统提供元数据计算、缓存与同步。在ceph中,元数据也是存储在osd节点中的,mds类似于元数据的代理缓存服务器。
4、需要使用cephfs时,才需要配置mds节点,mds进程并不是必须的进程。
⑥rados gw:是http服务,提供http协议,支持swift和s3协议,ceph底层管理对象。 如果要往里面存数据就需要调用lab rados库存储对象,一个文件也是一个对象
⑦rados:全称reliable autonomic distributed object storer 用户实现数据分配、failover等集群操作。
⑧librados:rados的提供库,因为协议很难直接访问rados,因此上层的rbd、rgw和ceph fs都是通过librados访问,目前提供php、ruby、java、python、c和c++支持。
(5)ceph数据存储过程:
①数据在存储的时候会把文件分成很多块{这种块一般是2M或者4M},如果块过大,那么在呈现数据的时候会“搜索量”会很大,所以就分了很多的规制组“PG”比如:“1-50”是一组。
②然后根据编号搜索相应的组,然后由文件ID和对象ID组成一个叫“OID”,然后哈希{算法采用crush}到整个归置组,然后一个PG会对应到对个OSD,然后去计算这个对象要存在哪个OSD节点上。
③以后的数据迁移对象的迁移都是以"PG"为单位进行,所以PG的数量决定了数据分布的均匀性,所以合理设置PG数量可以很好的提升CEPH集群的性能并使数据均匀分布,一般一个OSD上有128个PG。
1、少于 5 个 osd 时可把 pg_num 设置为 128。
2、osd 数量在 5 到 10 个时,可把 pg_num 设置为 512。
3、osd 数量在 10 到 50 个时,可把 pg_num 设置为 4096。
4、osd 数量大于 50 时,你得理解权衡方法、以及如何自己计算 pg_num 取值。
5、自己计算 pg_num 取值时可借助 pgcalc 工具。
④在规置组的上一层就是存储池,假设有9个osd假设为900g,但是有好几个部门想使用,可以使用“pool”存储池来隔离,默认情况下每个存储池会占用整个osd空间。
1、一个对象只能属于一个规置组,也就是一个PG,PG来维护对象,对象就有多副本,如果对象只存在一个OSD上面,那OSD挂掉之后数据就没有了,所以就有多副本机制,一个对象会存储在多个存储池上。
⑤osd写流程:
1、ceph是强一致性,如果这个对象下到OSD上,那么这个OSD就要向多个OSD进行同步,等他们都写完之后就反馈写完,读取的时候只要读任何一个就可以。
2、客户在写入的时候第一个就是主OSD,每一个对象都有自己的主OSD,意思是如果文件a的主OSD可能是OSD1,文件b的主OSD可能是OSD2,在写入的时候只有多个写入完成才会反馈成功,在读的时候只需要读主OSD就可以了。
(6)EC纠删码:
①复制池:副本机制,数据量小选择,复制池
②纠删码池:K+M=N,数据量大选择纠删码池
1、假设4m的对象,存3副本就是占用12m,假设K是3,3+2=5
2、3就是在将4m切成3分,每一份就是4除以3,每一份就是1.几
3、2的意思救赎根据纠删码池算法得到2个1.3,这2个1.3可以算是效验值,那就是2*1.3+4=6.6M。
4、之前使用率是1/3,现在就是4/6.6,纠删码池比复制池更剩空间,但性能会稍微差点,因为要计算效验。
推荐阅读
- #yyds干货盘点#哈希算法和多种加密算法综合使用
- #2021年底大盘点#线程调度的方法
- #yyds干货盘点# C语言字符串与内存库函数的介绍与模拟实现
- 过程里看见的那个自己
- #yyds干货盘点#MyBatis-plus学习笔记
- #yyds干货盘点#Linux常见面试题之文件管理命令
- kubernetes-部署longhorn
- MYSQL事务超全知识总结#yyds干货盘点#
- 用pipeline来实现一个自由风格的构建