CEPH分布式存储应用实践——Ceph的组件解析与资源划分和存储

CEPH分布式存储应用实践——Ceph的组件解析与资源划分和存储 CEPH分布式存储应用实践——分布式存储简介与CEPH分布式存储https://blog.csdn.net/xiaochenXIHUA/article/details/162394922一、Ceph其他组件与概念1.1、PoolPool是存储对象的逻辑分区或者叫存储池它规定了数据冗余的类型和对应的副本分布策略默认存储3份副本支持两种类型【副本replicated】和 【纠删码 Erasure Code】。存储池的两种类型说明Replicated pool默认副本池默认的存储池类型把每个存入的对象Object存储为多个副本其中分为主副本和从副本从副本相当于备份副本从而确保在部分 OSD 丢失的情况下数据不丢失。这种类型的 pool 需要更多的裸存储空间但是它支持所有的 pool 操作。如果客户端在上传对象的时候不指定副本数默认为3个副本。在开始存数据之前会计算出该对象存储的主副本与从副本的位置首先会将数据存入到主副本然后主副本再将数据分别同步到从副本。主副本与从副本同步完毕后会通知主副本这时候主副本再响应客户端并表示数据上传成功。所以如果客户端收到存储成功的请求后说明数据已经完成了所有副本的存储。Erasure-coded pool纠删码池此类型会将数据存储为KM其中K是数据块数量每个对象存储到Ceph集群的时候会分成多个数据块分开进行存储。而M为最多容忍可坏的数据块数量类似于磁盘阵列RAID5在最大化利用空间的同时还能保证数据丢失可恢复性相比副本池更节约磁盘的空间。因为副本池很浪费存储空间如果Ceph集群总容量为100T如果使用副本池那么实际可用空间按3个副本算那么只有30T出头。而使用纠删码池就可以更大化的利用空间但纠删码池更浪费计算资源如存储一个100M的资源若使用副本池按3副本计算实际上要使用300M的空间。而使用纠删码池如果将100M资源分为25块如果将M指定为2那么总共只需要108M空间即可计算公式为100100/25*2。注意如果存储RBD镜像那么不支持纠删码池。关于此类型存储池使用不多不做过多介绍。1.2、PG与PG tempPG(全称Placement Group又叫归置组)可以将PG看做一个逻辑容器这个容器包含多个对象同时这个逻辑对象映射多个OSD上。如果没有PG在成千上万个OSD上管理和跟踪数百万计的对象的复制和传播是相当困难的。没有PG这一层管理海量的对象所消耗的计算资源也是不可想象的。PG的作用PG相当于一个虚拟组件出于集群伸缩性能方面的考虑Ceph将每个存储池分为多个PG如果存储池为副本池类型并会给该存储池每个PG分配一个主OSD和多个从OSD当数据量大的时候PG将均衡的分布在集群中的每个OSD上面【OSDobject storage device是负责存储文件的进程一般配置成和磁盘一一对应一块磁盘启动一个OSD进程。主要功能是存储数据、复制数据、平衡数据、恢复数据以及与其它OSD间进行心跳检查负责响应客户端请求返回具体数据的进程等在Ceph集群中所有的文件都会以对象的形式存储到OSD中。OSD与OSD之间是可以相互通信的】。PG temp一个PG组里有三个组员OSD三个组员第一个是组长组长负责对外提供服务组员负责备份一旦组长挂掉后相当于公司中一个部门的项目经理辞职了公司会招聘一个新的项目经理但新的项目经理刚来的时候还什么都不知道即新加进来的osd是没有任何组内数据的此时公司会让某个组员先临时接替一下组长的职务、对外提供服务一旦新来的组长了解了业务即新加进来的osd已经同步好数据了那么就可以让新组长出山了。1.3、PGPPGPPlacement Groups of Placement是为了实现定位而设置的PG是存储池PG中OSD分布组合个数它的值应该和PG的总数即pg_num保持一致。对于Ceph的一个pool而言如果增加pg_num还应该调整pgp_num为同样的值。这样集群才可以开始再平衡。1.4、ObjectObject(存储对象)是最底层的存储单元包含元数据和原始数据。1.5、Pool、PG、 Object、OSD之间的关系LVM逻辑卷对应CephPool、PG、Object、OSD之间的关系类比LVM逻辑卷pv------osd把一系列的盘都做好标记由LVM管理起来vg------pool是把一系列的pv给归类到一起相当于一块大磁盘lv------image相当于从vg这个”大磁盘“中分出的一个“分区”如上图所示Object与PG是多对一关系PG与OSD daemon是多对多关系OSD daemon与Disk是一对一关系Pool是PG对象的逻辑集合pool中的副本数若设置为3则一个pg中包含3个osd即同一个PG接收到的所有object将在这3个osd上被复制。一个OSD上的PG则可达到数百个。PG数量的设置牵扯到数据分布的均匀性问题。PG 和 OSD 之间的映射关系由 CRUSH 决定而它做决定的依据是 CRUSH 规则rules。对象的副本数目也就是被拷贝的次数是在创建 Pool 时指定的。该份数决定了每个PG会在几个OSD上保存对象。如果一个拷贝型Pool的size拷贝份数为 2它会包含指定数目的PG每个PG使用两个 OSD其中第一个为主OSD primary其它的为从 OSDsecondary。不同的 PG 可能会共享一个 OSD。PG 是Ceph集群做清理scrubbing的基本单位也就是说数据清理是一个一个PG来做的。1.6、PG数目的确定创建 pool 时需要确定其 PG 的数目在 pool 被创建后也可以调整该数字但是增加池中的PG数是影响ceph集群的重大事件之一生成环境中应该避免这么做因为pool中pg的数目会影响到数据的均匀分布性。每个 OSD 上的PG数目不宜过大否则会降低数据的持久性可以肯定的一点是osd数越多存储池中包含的pg的数目也应对应增加这样每个osd上的pg数才会尽量均匀、不会过大。那如何确定一个Pool中有多少 PG?Ceph不会自己计算,而是给出了一些参考原则,让Ceph用户自己计算单OSD的PG副本数推荐阈值单Pool基准PG数 (集群OSD总数 × 100) / pool_sizepool_size副本池 副本数size3 则填 3纠删码池 KM 之和如 426计算结果向上取最近 2 的幂64/128/256/512/1024/2048/4096/8192/…CRUSH 哈希效率最优Ceph单Pool建议PG (单OSD目标PG副本数 × OSD总数 × 该池数据占比) / pool_size单 OSD 目标 PG 副本集群不扩容选 100未来扩容一倍选 200% Data该池存储数据占集群总数据比例多 RGW / 多业务池必须分摊少于 5 个 OSD daemon 建议将pool中的pg数设为 1285 到 10 个 OSD daemon建议将pool中的pg数设为 51210 到 50 个 OSD daemon建议将pool中的pg数设为 4096PG 设置正反影响PG 过少数据分布不均、热点 OSD、IO 并发差、故障恢复粒度大PG 过多OSD 内存 / CPU 暴涨、Peering/Recovery 速度大幅下降、集群卡顿、触发mon_max_pg_per_osd告警1.7、RBD、CephFS、CrushRBD全称RADOS block device是Ceph对外提供的块设备服务CephFS全称Ceph File System是Ceph对外提供的分布式文件存储服务CRUSH是Ceph底层使用的数据分布算法让数据分配到预期的地方通过Crush算法的寻址操作Ceph得以摒弃了传统的集中式存储元数据寻址方案。而Crush算法在一致性哈希基础上很好的考虑了容灾域的隔离使得Ceph能够实现各类负载的副本放置规则如跨机房、机架感知等同时Crush算法有相当强大的扩展性理论上可以支持数千个存储节点。二、Ceph的资源划分与存储过程2.1、Ceph的资源划分与存储过程原理Ceph采用crush算法在大规模集群下实现数据的快速、准确存放同时能够在硬件故障或扩展硬件设备时做到尽可能小的数据迁移其原理如下Ceph的资源划分与存储过程原理《1》当用户要将数据存储到Ceph集群时数据先被分割成多个object(每个object一个object id大小可设置默认是4MBobject是Ceph存储的最小存储单元。《2》由于object的数量很多为了有效减少了Object到OSD的索引表、降低元数据的复杂度使得写入和读取更加灵活引入了pg(Placement Group )PG(归置组用来管理object每个object通过Hash映射到某个pg中一个pg可以包含多个object。《3》Pg再通过CRUSH计算映射到osd中。如果是三副本的则每个pg都会映射到三个osd保证了数据的冗余。2.2、Ceph的数据写入流程Ceph的数据写入流程《1》数据通过负载均衡获得节点动态IP地址《2》通过块、文件、对象协议将文件传输到节点上《3》数据被分割成4M对象并取得对象ID《4》对象ID通过HASH算法被分配到不同的PG《5》不同的PG通过CRUSH算法被分配到不同的OSD。2.3、Ceph的网络可以在 Ceph 配置文件的 [global] 部分配置两个网络public network {public-network/netmask}cluster network {cluster-network/netmask}public network是连接客户端通信的网络【网络带宽没有严格要求一般千兆就够了】。cluster network是连接 Ceph 各存储节点集群内通信的网络【涉及各种数据的大量传输需要很高的网络带宽一般都需要万兆或者光纤】。