虚拟主机和网站的关系,如何建立互联网公司网站,易讯网站建设,哪些网站可以做团购ceph体系结构 rados#xff1a;reliable, autonomous, distributed object storage, rados
rados采用c开发
对象存储
ceph严格意义讲只提供对象存储能力#xff0c;ceph的块存储能力实际是基于对象存储库librados的rbd
对象存储特点
对象存储采用put/get/delete#xf…ceph体系结构 radosreliable, autonomous, distributed object storage, rados
rados采用c开发
对象存储
ceph严格意义讲只提供对象存储能力ceph的块存储能力实际是基于对象存储库librados的rbd
对象存储特点
对象存储采用put/get/delete不支持修改
对象存储结构是扁平结构不支持多层容器嵌套结构
rados
rados集群主要由两种节点组成osd和monitor。osd节点负责数据维护和存储monitor节点负责检测和维护系统状态。osd和monitor节点之间相互传递节点状态信息共同得出系统总体运行状态并将其保存在一个全局数据结构中集群运行图
使用rados系统时客户端向monitor索取最新集群运行图然后直接在本地运算得到存储的位置便直接与osd通信完成数据操作
osdmonitorceph客户端均可直接通信意味osd也可以分担monitor等重要节点的部分业务缓解节点压力
osd
osd可被抽象为系统进程和守护进程
osd节点实质是一个安装了os和fs的节点同时还应当 保证osd拥有一定的计算能力内存能力网络带宽
osd的守护进程可完成osd的所有逻辑功能包括monitor和其他osd的通信维护系统及更新状态等
rados接收来自ceph客户端发送的数据然后存储为对象对象在节点是fs中的一个文件。对象存储中是扁平结构没有目录层次。文件只有文件id对象内容的二进制格式和文件的元数据。文件元数据取决于客户端请求发送的一些信息如文件创建者创建日期最后修改日期等
osd状态
osd状态直接影响数据重新分配
osd状态用两个维度表示up或downdaemon和monitor连接是否正常和in或outosd是否有pg两种状态叠加起来osd总共有四种状态
up inosd正常工作状态
up out一般是osd刚启动osd还没有pg
down in可能网络中断或daemon意外退出
down outosd无法恢复
PGPlacement Group用来映射osd节点和存储的对象
osd状态检测
ceph是基于通用计算机硬件构建的分布式系统故障概率远高于专用硬件构建的分布式系统。如何检测节点故障和网络故障是ceph高可用的一个重点ceph采用了心跳检测机制但增加了监控维度
osd之间心跳包如果osd之间都相互发送心跳则时间复杂度是pow(n,2)ceph选择仅peerOSD之间发送心跳包这样时间复杂度是pow(n,1)。peerOSD是osd存储对象和其PG副本所在的osd。ceph同时提供公共网络osd和客户端通信和集群网络osd之间通信网络peerOSD心跳包也可按网络进行分类。
osd和monitor之间心跳包osd之间心跳检测结果通过osd和monitor心跳包传送
数据寻址
分布式系统有两个最基本的问题数据放在哪数据写在哪。ceph寻址过程如图 file面向客户的文件对象
object面向rados的文件对象。object和file的区别是object单元最大大小存在上限如2MB或4MB大于单个object单元大小的file会被切分为一系列统一大小的object进行存储
PG一个PG负责组织多个object一个object只能被映射在一个PG一个PG会被映射在n多个OSD中实际工作中n可能大于等于2
file-object映射
将file切分为object进行存储每个object有唯一的oidoid可分为两部分分别是切分的object的元数据和object在切分列表里的序号比如某个id为filename的文件被切分为序号为012的三个object则三个object的oid分别为filename0 filename1 filename2
此处存在一个隐含问题及文件的id元数据必须不重复否则无法映射
object-PG映射
映射公式hash(oid) mask - pgid
先对oid哈希再和mask按位与。按rados设计PG总数应为2的整数次幂mask的值为PG总数-1所以此映射公式含义是从总数为m的PG中随机均匀地选取一个PG这样的话rados保证了object和pg尽量均匀的映射
PG-OSD映射
rados使用一个名为CRUSH的算法输入pgid输出n个osd idn需配置为大于等于2。CRUSH算法和pgid的映射不同它不是固定输出结果的而是会受到其他因素影响系统状态和存储策略配置。
系统状态即集群运行图。其他osd状态变化时可能导致集群运行图变化
存储策略配置和安全有关即管理员指定PG分配在OSD的规则比如亲和规则
当系统状态和存储策略配置不变时PG和OSD的映射才是固定不变的
使用CRUSH算法的原因一个是算法结果收到配置osd亲和的影响还有一个是CRUSH算法稳定性的特点即系统中加入大量osd时大部分PG和OSD之间的映射不会改变只有少部分映射会发生改变并引发数据迁移
小结
三个映射没有任何全局查表的操作唯一的全局数据结构集群运行图其操作与维护是轻量级的不会对系统造成太大影响
为什么在object和osd之间引入PG
如果没有PG(1) 则osd损坏时或新增osd时原有的object和osd之间的映射无法被更新 (2)有PG时osd间心跳检测是以PG为粒度而PG数量在每个osd是基本固定的当文件增多PG不会增加。如果不用PG则osd间心跳则以文件为粒度当object变多心跳花的时间也会变多
存储池
一个存储池包含若干PG 存储池创建命令
ceph osd pool create {POOL_NAME} {PG_NUM} [{PGP_NUM}] [REPLICATED] [CRUSH_RULESET_NAME]
ceph osd pool create {POOL_NAME} {PG_NUM} {PGP_NUM} erasure [erasure_code_profile] [crush_ruleset_name]
pgp数目通常和pg数目一致增加pg数量通常不会发生迁移增加pgp数量时用户数据才会发生迁移
PGP含义 注意到当PG增加时原PG分为两半所以新PG和原PG在同一个OSD上
monitor
客户端处理数据前必须通过monitor获取集群状态图。ceph也支持只有一个monitor节点
monitor不会主动查询osd状态而是osd给monitor主动上报osd状态
集群运行图实际是多个map统称如monitor map, osdmap, pg map, crush map, mds map等各运行图维护各自的运行状态。CRUSH MAP用于定义如何选择OSDCRUSH MAP是树形结构 default下是主机主机下是主机自己的osd。CRUSH MAP中所有非叶节点称为桶Bucket所有Bucket的ID都是负数OSD ID是正数这样可以区分OSD的ID。选择OSD时需要先从一个指定的bucket开始往树底下寻找直到到达叶节点。目前有五种算法来实现子节点的寻找包括UniformListTreeStrawStraw2不同算法性能如下 monitor与客户端通信
客户端包括rbd客户端rados客户端ceph fs客户端等。根据通信内容分为获取OSDMAP和命令行操作
命令行操作主要由monitor执行或monitor转发到osd执行
获取OSDMAP因为有了集群状态图客户端可不经过monitor直接与osd通信所以仅需要获取OSDMAP时客户端才需要与monitor通信。再就是客户端初始化。再就是某些特殊情况会主动获取OSDMAP如找不到PGPG删除或创建存储池等空间占满或者OSDMAP设置了暂停所有读/写每次读写都会获取OSDMAP
monitor与osd通信
相比monitor与客户端通信monitor与osd通信更复杂
osd定期将其PG信息发给monitor。PG信息包含PG状态Object信息等
osd操作命令通过monitor转发给osd
数据操作流程
ceph读写仅对object的主osd进行读写保证了数据的强一致性。primary收到写请求后负责把数据发给副本只有副本都成功写primary才接收object的写请求保证了副本一致性写入流程可参考下图