ceph架构学习1

2024-06-04 00:58
文章标签 学习 架构 ceph

本文主要是介绍ceph架构学习1,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

       本次文档详细学习ceph官网架构文档,网址为:http://ceph.com/docs/master/architecture/

   先关注一下ceph的API类型:

  1. librados是rados的 library,可以支持C,C++,Java,Python,Rubby和php;
  2. radosgw是基于通的REST网关,兼容S3和和Swift接口;
  3. rbd 是稳定的全分布式块设备,支持linux kernel client和QEMU/KVM driver;
  4. CEPH-fuse 是个人比较感兴趣的模块,支持fuse模块,后面我会详细比较ceph-fuse、moosefs、hdfs三种文件系统;

     rados:代表了 reliable,autonomoc,distributed object store 。牛逼的地方是使用crush算法做到数据高可性,去掉了分布式文件系统的namenode。
   下面的这句话是理解ceph架构的关键:
     Storage cluster clients andeach Ceph OSD Daemon usethe CRUSH algorithm to efficiently compute information about data location,instead of having to depend on a central lookup table.(存储机器的clients和每个osd Daemon 使用CRUSH算法 高效计算出数据的location,替代查找一个中心的查询表)。 如果理解hdfsmoosefs系统架构,可以深入的体会这一点hadoop2.0 HDFSFederation以及前面的HA,都是弥补namenode单节点问题。ceph的底层采用librados,为上层服务提供统一interface;
  所都数据最后都是以对象的形式存储到rados中的,osd 存储所有数据以对象的方式存储到扁平的namespace里面(不存在目录结构),一个对象包含:一个identifier,二进制数据和包含name、value的键值集合的metadata。例如:cephfs利用metadata存储文件的ower、create data ,last  modified  date。具体的存储格式如下:
    在hdfs和moosefs里面 metadata 是放到namenode里面的。id在整个集群是唯一的。ceph 让osd和client 可以直接连接,这都是使用crush算法保证的。crush通过干净利落分布所有工作到集群中的client和osd保证集群规模,下面简要介绍一下crush map的工作机制,后面我会详细介绍crush算法。
   crush map有五个种类:
  1.     monitor map:[root@rados01 ~]# ceph mon dump
    dumped monmap epoch 1 
    epoch 1
    fsid 96aa2924-f83f-4145-94ad-0fdb71fa8afa
    last_changed 2014-01-23 07:10:30.526764
    created 2014-01-23 07:10:30.526764
    0: 192.168.15.56:6789/0 mon.rados01
    1: 192.168.15.57:6789/0 mon.rados02
    2: 192.168.15.58:6789/0 mon.rados03
  2. osd map:[root@rados01 ~]#  ceph osd dump
    epoch 217
    fsid 96aa2924-f83f-4145-94ad-0fdb71fa8afa
    created 2014-01-23 07:10:44.930304
    modified 2014-03-17 15:41:57.110964
    flags 
    pool 0 'data' rep size 2 min_size 1 crush_ruleset 0 object_hash rjenkins pg_num 256 pgp_num 256 last_change 1 owner 0 crash_replay_interval 45
    pool 1 'metadata' rep size 2 min_size 1 crush_ruleset 1 object_hash rjenkins pg_num 256 pgp_num 256 last_change 1 owner 0
    pool 2 'rbd' rep size 2 min_size 1 crush_ruleset 2 object_hash rjenkins pg_num 256 pgp_num 256 last_change 1 owner 0
    pool 3 '.rgw' rep size 2 min_size 1 crush_ruleset 0 object_hash rjenkins pg_num 64 pgp_num 64 last_change 13 owner 0
    pool 4 '.rgw.control' rep size 2 min_size 1 crush_ruleset 0 object_hash rjenkins pg_num 64 pgp_num 64 last_change 14 owner 0
    pool 5 '.rgw.gc' rep size 2 min_size 1 crush_ruleset 0 object_hash rjenkins pg_num 64 pgp_num 64 last_change 15 owner 0
    pool 6 '.log' rep size 2 min_size 1 crush_ruleset 0 object_hash rjenkins pg_num 64 pgp_num 64 last_change 16 owner 0
    pool 7 '.intent-log' rep size 2 min_size 1 crush_ruleset 0 object_hash rjenkins pg_num 64 pgp_num 64 last_change 17 owner 0
    pool 8 '.usage' rep size 2 min_size 1 crush_ruleset 0 object_hash rjenkins pg_num 64 pgp_num 64 last_change 18 owner 0
    pool 9 '.users' rep size 2 min_size 1 crush_ruleset 0 object_hash rjenkins pg_num 64 pgp_num 64 last_change 19 owner 0
    pool 10 '.users.email' rep size 2 min_size 1 crush_ruleset 0 object_hash rjenkins pg_num 64 pgp_num 64 last_change 20 owner 0
    pool 11 '.users.swift' rep size 2 min_size 1 crush_ruleset 0 object_hash rjenkins pg_num 64 pgp_num 64 last_change 21 owner 0
    pool 12 '.users.uid' rep size 2 min_size 1 crush_ruleset 0 object_hash rjenkins pg_num 64 pgp_num 64 last_change 22 owner 0
    pool 13 '.rgw.buckets.index' rep size 2 min_size 1 crush_ruleset 0 object_hash rjenkins pg_num 64 pgp_num 64 last_change 23 owner 0
    pool 14 '.rgw.buckets' rep size 2 min_size 1 crush_ruleset 0 object_hash rjenkins pg_num 64 pgp_num 64 last_change 24 owner 0
    pool 15 '.rgw.root' rep size 2 min_size 1 crush_ruleset 0 object_hash rjenkins pg_num 8 pgp_num 8 last_change 39 owner 0
    pool 16 '' rep size 2 min_size 1 crush_ruleset 0 object_hash rjenkins pg_num 8 pgp_num 8 last_change 160 owner 18446744073709551615
    pool 18 'hadoop02' rep size 1 min_size 1 crush_ruleset 0 object_hash rjenkins pg_num 256 pgp_num 256 last_change 183 owner 0
    pool 19 'hadoop03' rep size 1 min_size 1 crush_ruleset 0 object_hash rjenkins pg_num 256 pgp_num 256 last_change 185 owner 0
    pool 22 'hadoop01' rep size 1 min_size 1 crush_ruleset 0 object_hash rjenkins pg_num 256 pgp_num 256 last_change 214 owner 
    max_osd 3
    osd.0 up   in  weight 1 up_from 168 up_thru 216 down_at 163 last_clean_interval [157,162) 192.168.15.56:6802/5328 192.168.15.56:6803/5328 192.168.15.56:6804/5328 192.168.15.56:6805/5328 exists,up 4332f60b-f55a-46da-9994-fe1e3cf1d3a7
    osd.1 up   in  weight 1 up_from 209 up_thru 216 down_at 208 last_clean_interval [206,207) 192.168.15.57:6801/1398 192.168.15.57:6802/1398 192.168.15.57:6803/1398 192.168.15.57:6804/1398 exists,up 966ecd52-9cdd-44b8-8c68-ae3451d158b9
    osd.2 up   in  weight 1 up_from 173 up_thru 216 down_at 169 last_clean_interval [149,169) 192.168.15.58:6801/30110 192.168.15.58:6802/30110 192.168.15.58:6803/30110 192.168.15.58:6804/30110 exists,up 7ab39fe2-64ff-4c9b-9ab6-5759887a1f95
  3. pg map:ceph pg dump
  4. crush map  后面详细研究。
  5. mds  map:ceph mds dump。[root@rados01 ~]# ceph mds dump
    dumped mdsmap epoch 84
    epoch   84
    flags   0
    created 2014-01-23 07:10:44.930114
    modified        2014-03-10 15:57:12.995183
    tableserver     0
    root    0
    session_timeout 60
    session_autoclose       300
    last_failure    74
    last_failure_osd_epoch  193
    compat  compat={},rocompat={},incompat={1=base v0.20,2=client writeable ranges,3=default file layouts on dirs,4=dir inode in separate object,5=mds uses versioned encoding}
    max_mds 1
    in      0
    up      {0=5500}
    failed
    stopped
    data_pools      0,17,21,22,30
    metadata_pool   1
    5500:   192.168.15.56:6800/4809 'rados01' mds.0.13 up:active seq 4346
    6066:   192.168.15.57:6800/1217 'rados02' mds.-1.0 up:standby seq 1
  多个moniter 会根据 Paxos实现消息传递一致性,后面我们会详细说明这个算法,个人感觉和hadoop zookeeper也实现这样的功能。后面在研究吧。。。。。见笑了。
  ceph 授权osd daemon 检查附件的osd是否宕机,更新cluster map 并通知所有的ceph monitor,这样保证了monitor工作较轻负载。
        为了保证数据的一致性和干净,ceph osd可以在一个PG里面scrub 所有对象。osd对比一个PG里面对象的元数据(与其他osd上面对象元数据对比)。获取系统和文件系统的错误,osd也会以bit方式比较备份 object。深度scrub会在light scrub中找到bad 数据段。
   osd 使用crush算法备份和负载均衡object的,the primary osd 使用 crush map 找到 secondary and tertiary OSDs,在ceph中备份是以object为单位的,不是以PG 或者PG分散的数据为对象的。将对象复制到 secondary 和tertiary OSDs ,然后返回给客户端存储成功:
                                                       
这样就减轻了client的压力,实现了数据的可用性和数据安全。

     下面我们详细分析 crush 动态管理过程,是理解ceph机制的重要过程。下面我们分析crush是如何用云存储架构去放置数据、均在均衡机器和自动容错。
    pools是存储对象逻辑分区,主要设置了如下参数:  
    • Ownership/Access to Objects
    • The Number of Object Replicas
    • The Number of Placement Groups
    • The CRUSH Ruleset to Use.

        每个osd有很多PG,PG是osd和client 的隔离层,这层再次保证了数据的负载均衡。如下图:

 下面我们来看看osd 是如何获取PG id的:
  • client输入 pool id 和 object id;(e.g., pool = “liverpool” and object-id = “john”)
  • crush 获取 object id 然后取其hash值hashvalue;
  • PG ID = hashvalue % osd个数 (e.g., 0x58)
  • crush通过给的pool name 获取到pool ID; (e.g., “liverpool” = 4)
  • crush 叠加 pool ID 和PG ID(e.g., 4.0x58).
兄弟们,简单吧,学过程序的同学都会写。。。

osd 之间有两个动作:
  • 检查相互之间的heartbeats  ,并报告给monitor;
  • 相互之间做peering,意思就是将一个PG 里面的osd 同步这个PG里面所用对象的状态。这个过程是由Primary osd负责完成的;
  • acting set 是一个PG里面的osd集合,up set 是一个PG里在up状态的osd集合;
下面看看 rebalancing过程是怎么做的
  
   




  


  
    
  


这篇关于ceph架构学习1的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1028613

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

mybatis的整体架构

mybatis的整体架构分为三层: 1.基础支持层 该层包括:数据源模块、事务管理模块、缓存模块、Binding模块、反射模块、类型转换模块、日志模块、资源加载模块、解析器模块 2.核心处理层 该层包括:配置解析、参数映射、SQL解析、SQL执行、结果集映射、插件 3.接口层 该层包括:SqlSession 基础支持层 该层保护mybatis的基础模块,它们为核心处理层提供了良好的支撑。

百度/小米/滴滴/京东,中台架构比较

小米中台建设实践 01 小米的三大中台建设:业务+数据+技术 业务中台--从业务说起 在中台建设中,需要规范化的服务接口、一致整合化的数据、容器化的技术组件以及弹性的基础设施。并结合业务情况,判定是否真的需要中台。 小米参考了业界优秀的案例包括移动中台、数据中台、业务中台、技术中台等,再结合其业务发展历程及业务现状,整理了中台架构的核心方法论,一是企业如何共享服务,二是如何为业务提供便利。

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识