ceph是一个可靠的,自动重均衡,自动恢复的分布式存储系统。
根据场景可以分为三大块:对象存储,块设备存储和文件服务系统。ceph相比于其他存储,优势点在于它不单单是存储,同时还充分利用了存储节点上的计算能力,在存储每一个数据时,都会通过计算得出该数据存储的位置,尽量将数据分布均衡,同时由于Ceph的良好设计,采用了CRUSH算法,HASH等方法,使得它不存在传统的单点故障问题,且随着规模的扩大性能并不会受到影响。
Ceph的核心组件包括Ceph OSD,Monitor和Ceph MDS
Ceph OSD:OSD的全称是Object Storage Device,它的主要功能是存储,复制,平衡,恢复数据,以及与其它OSD间进行心跳检查并把一些变化情况上报给Ceph Monitor。一般情况下一个硬盘对应一个OSD,由OSD来对硬盘进行管理。(总结来说,OSD就是一个组件,它的功能就是协助存储数据到磁盘)
Ceph OSD的架构实现由物理磁盘驱动器,linux文件系统和Ceph OSD组成,其中linux文件系统显性的支持了其拓展性,一般linux文件有好几种,比如BTRFS、XFS、Ext4等,一般比较推荐使用XFS。
伴随OSD的还有一个概念叫做Journal盘,一般写数据到Ceph集群时,都是先将数据写入到 Journal 盘中,然后每隔一段时间比如5秒再将Journal盘中的数据刷新到文件系统中。一般为了使读写时延更小,Journal盘都是采用SSD,一般分配10G以上,当然分配多点那是更好,Ceph中引入Journal盘的概念是因为Journal允许Ceph OSD功能很快做小的写操作;一个随机写入首先写入在上一个连续类型的journal,然后刷新到文件系统,这给了文件系统足够的时间来合并写入磁盘,一般情况下使用SSD作为OSD的journal可以有效缓冲突发负载。
Ceph Monitor:由该英文名字我们可以知道它是一个监视器,负责监视Ceph集群,维护Ceph集群的健康状态,同时维护着Ceph集群中的各种Map图,比如OSD Map、Monitor Map、PG Map和CRUSH Map,这些Map统称为Cluster Map,Cluster Map是RADOS的关键数据结构,管理集群中的所有成员、关系、属性等信息以及数据的分发,比如当用户需要存储数据到Ceph集群时,OSD需要先通过Monitor获取最新的Map图,然后根据Map图和object id等计算出数据最终存储的位置。
Ceph MDS:全称是Ceph MetaData Server,主要保存的文件系统服务的元数据,但对象存储和块存储设备是不需要使用该服务的。
最底层的是RADOS,RADOS自身是一个完整的分布式对象存储系统,它具有可靠,智能,分布式等特性,Ceph的高可靠,高可拓展,高性能,高自动化都是由这一层来提供的,用户的数据最终也是由这一层来进行存储的,RADOS可以说就是Ceph的核心。
RADOS系统主要由两部分组成,分别是OSD和Monitor。
基于RADOS层的上一层是LIBRADOS,LIBRADOS是一个库,它允许应用程序通过访问该库来与RADOS系统进行交互,支持多种编程语言,比如C、C++、Python等。
基于LIBRADOS层开发的又可以看到有三层,分别是RADOSGW、RBD和CEPH FS。
RADOSGW:RADOSGW是一套基于当前流行的RESTFUL协议的网关,并且兼容S3和Swift。
RBD:RBD通过Linux内核客户端和QEMU/KVM驱动来提供一个分布式的块设备。
CEPH FS:CEPH FS通过Linux内核客户端和FUSE来提供一个兼容POSIX的文件系统。
在分布式存储系统中比较关注的一点是如何使得数据能够分布得更加均衡,常见的数据分布算法有一致性Hash和Ceph的Crush算法。Crush是一种伪随机的控制数据分布、复制的算法,Ceph是为大规模分布式存储而设计的,数据分布算法必须能够满足在大规模的集群下数据依然能够快速的准确的计算存放位置,同时能够在硬件故障或扩展硬件设备时做到尽可能小的数据迁移,Ceph的CRUSH算法就是精心为这些特性设计的,可以说CRUSH算法也是Ceph的核心之一。
在说明CRUSH算法的基本原理之前,先介绍几个概念和它们之间的关系。
存储数据与object的关系:当用户要将数据存储到Ceph集群时,存储数据都会被分割成多个object,每个object都有一个object id,每个object的大小是可以设置的,默认是4MB,object可以看成是Ceph存储的最小存储单元。
object与pg的关系:由于object的数量很多,所以Ceph引入了pg的概念用于管理object,每个object最后都会通过CRUSH计算映射到某个pg中,一个pg可以包含多个object。
pg与osd的关系:pg也需要通过CRUSH计算映射到osd中去存储,如果是二副本的,则每个pg都会映射到二个osd,比如[osd.1,osd.2],那么osd.1是存放该pg的主副本,osd.2是存放该pg的从副本,保证了数据的冗余。
pg和pgp的关系:pg是用来存放object的,pgp相当于是pg存放osd的一种排列组合,我举个例子,比如有3个osd,osd.1、osd.2和osd.3,副本数是2,如果pgp的数目为1,那么pg存放的osd组合就只有一种,可能是[osd.1,osd.2],那么所有的pg主从副本分别存放到osd.1和osd.2,如果pgp设为2,那么其osd组合可以两种,可能是[osd.1,osd.2]和[osd.1,osd.3],pgp就是代表这个意思。一般来说应该将pg和pgp的数量设置为相等。
1,PG是指定存储池存储对象的目录有多少个,PGB是存储池PG的OSD分布组合个数;
2,PG的增加会引起PG内的数据进行分裂,分裂相同的OSD上新生成的PG当中;
3,PGB的增加会引起部分PG的分布进行变化,但是不会引起PG内对象的变动。
5.1 OSD:
Object Storage Device
5.2 逻辑池是啥:
简单点理解,如果ceph是个数据库的话,逻辑池就是数据表了。
5.3 PG是啥:
placement group (安置群组)
5.4 NFS,CIFS是啥:
NFS (Network File System,网络文件系统):它允许网络中的计算机之间共享资源。在NFS的应用中,本地的NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。
CIFS(Common Internet File System,通用Internet文件系统):它允许客户端访问服务器本地文件并读写这些文件,允许与其它用户一起共享这些文件块,允许在断线时自动恢复与网络的连接,而且使用的是统一编码文件名。
CIFS和NFS的对比:
(1)CIFS面向网络连接的共享协议,对网络传输的可靠性要求高,常使用TCP/IP;NFS是独立于传输的,可使用TCP或UDP; (2)NFS缺点之一,是要求client必须安装专用软件;而CIFS集成在OS 内部,无需额外添加软件; (3)NFS属无状态协议,而CIFS属有状态协议;NFS受故障影响小,可以自行恢复交互过程,CIFS不行;从传输效率上看,CIFS优于NFS,没用太多冗余信息传送; (4)两协议都需要文件格式转换,NFS保留了unix的文件格式特性,如所有人、组等等;CIFS则完全按照win的风格来作。
5.5 DNS是个啥?
DNS(domain name service,域名服务器):简单理解为,将域名翻译成ip地址。
5.6 SNMP是个啥?
简单网络管理协议(Simple Network Management Protocol,SNMP)是由互联网工程任务组定义的一套网络管理协议。该协议是基于简单网关监视协议(Simple Gateway Monitor Protocol,SGMP)制定的。 SNMP 可以使网络管理员通过一台工作站完成对计算机、路由器和其他网络设备的远程管理和监视。利用 SNMP 协议可以更好地管理和监控网络。管理工作站可以远程管理所有支持该协议的网络设备,如监视网络状态、修改网络设备配置、接收网络事件警告等。
5.7 SMTP是个啥?
SMTP称为简单Mail传输协议(baiSimple Mail Transfer Protocal),目标是向用户提供高效、可靠的邮件传输。SMTP的一个重要特点是它能够在传送中接力传送邮件,即邮 件可以通过不同网络上的主机接力式传送。工作在两种情况下:一是电子邮件从客户机传输到服务器;二是从某一个服务器传输到另一个服务器。 .SMTP是个请求/响应协议,它监听25号端口,用于接收用户的Mail请求,并与远端Mail服务器建立SMTP连接。