ceph简介

ceph是业界目前人气最高的开源存储项目之一,关于其定义在官网是这样的:“Ceph is a unified, distributed storage system designed for excellent performance, reliability and scalability.”

翻译一下就是:Ceph是一种为优秀的性能、可靠性和可扩展性而设计的统一的、分布式的存储系统。这里面有两个重点,一是分布式的,关于这点我的理解是指其无中心解构和无理论上限系统规模,体现着扩展性与大规模,早在2013年,其在Dreamhost公司最大部署规模已达3PB;二是统一的,关于存储我们明白一般有三种功能即对象存储、块存储和文件存储,而这三种功能在ceph上都可以做统一的交付,所以它几乎可以覆盖了绝大部分企业对存储的需求。

整体架构

从下向上看,我们基本可以把ceph分为三个层次(不包括上层应用),分别是:

1)RADOS(Reliable, Autonomic, Distributed Object Store)即可靠的、自动化的、分布式的对象存储,顾名思义,这是一个基础的对象存储系统,也就是说所有用户写入的数据最终是落在这里的;

2)LIBRADOS 基础库,这一层可以理解是对RADOS进行封装和抽象,并向上层直接提供API,以便用户可以直接对RADOS进行开发,而其也支持多种开发语言,例如C/C++/Java/Python/Ruby和PHP等,需要说明的是因为RADOS是一个对象存储系统,因此librados实现的API也只是针对对象存储功能;

3)高层应用接口,这一层分为三个部分:RADOSGW(RADOS Gateway)、 RBD(Reliable Block Device)和Ceph FS(Ceph File System),其作用是在librados库的基础上提供抽象层次更高、更便于应用或客户端使用的上层接口,关于其介绍可以直接参见图中介绍,总而言之这三者就是向外提供对象存储、块存储和文件存储三种存储的接口.

RADOS运行说明

了解了基础架构后我们不难发现,RADOS其实是ceph的核心,而RADOS其实有两个重要组件分别是OSD和monitor,还有一个可选组件MDS,其中OSD数量一般很多(ceph官方推荐每个OSD对应一个SATA盘),是用来完成数据存储和维护的,monitor则是若干个负责完成系统状态检测和维护的组件。

这里是一张对象写入的过程图,在图中每个笑脸代表一个对象,在开始写入时Client端会跟Monitors通信,获取Cluster Maps信息,然后通过CRUSH算法算出每个Object存储的OSD位置,直接与OSD通信,写入Object数据。也就是说只要有当前集群的拓扑结构,ceph的客户端就能直接计算出文件的存储位置,直接跟OSD 通信获取文件而不在需要询问文件位置,从而避免了单点。另外ceph采用了无Master设计,对象的复制,集群的扩容,数据的迁移,故障的检测和处理等功能由OSD提供, 既避免了单点失败,又提升了集群扩展性,这也为ceph的稳定高质提供了底层条件。

三个特性

在开头我们说“Ceph是一种为优秀的性能、可靠性和可扩展性而设计的统一的、分布式的存储系统”,其实这里面隐含了三个特性:

1)高扩展性:ceph可以针对OSD和Monitor集群的动态可扩容,每当有新的OSD加入后,Monitor集群会通过两层Map机制(pool, object) -> (pool, PG) -> OSD set)来有效的隔离了集群扩容对上层client的影响,总之底层OSD的扩展对于上层client来说是完全明晰的;

2)高可靠性:针对安全问题,Ceph会在集群中存储同一数据的多个副本,用户也可以通过自定义副本数,来保证在某些设备故障后数据还可用,对于副本存储的逻辑关系,可以在ceph中进行设置,达到不同主机、不同机架、甚至不同机房的互备效果,除此之外,Ceph能自动探测到OSD/Monitor的故障,并自行恢复,有效减少了单设备节点的稳定性对集群的影响。

3)高性能:Ceph中通过文件切分和CRUSH算法,保证数据chunk分布基本均衡,同时Ceph的无元数据信息的设计(CephFS除外),保证了Client可以根据cluster map,通过固定算法确定数据的位置信息,避免了单个元数据节点的性能瓶颈,可以提供非常高的并行化IO性能,其原因是Client端数据经过切分为Objects后,可以同时与多个OSDs交互,写入数据。

ceph在品高云中的实践

ceph在品高云是作为云底层资源池分布式存储的地位存在的,针对RADOSGW、 RBD和Ceph FS 三种都会有很好的支持,而就目前技术成熟度来看,其中块存储RBD是最为成熟的并且也是使用率最高的,以下是ceph作为一个存储类型在品高云中的使用截图

在详情中可以针对名称、Monitor、存储调度标记等进行修改,并且可以将云平台的用户同步到ceph RADOSGW的用户接口中;

当我们需要创建一个实例或者存储卷的时候,可以直接选择将其创建在ceph存储上,这里使用的其实就是ceph的RBD块存储服务;

当然,对于ceph FS的使用则是可以将一个文件目录直接进行挂载,然后可以在其中存储文件,以下是在一台品高云主机中部署ceph FS的截图;

ceph调优

Ceph是一个复杂的系统,官方的默认配置能保证系统基本运行,但不一定能贴合用户实际需求,达到最大化用户物理系统性能的要求,所幸Ceph提供了很多的配置参数来允许用户订制自己的分布式存储系统,这意味着在赋予用户这个便利性的同时,用户可以自行调优。

我们对ceph物理机的配置建议大致如下:

1). 200G+内存(保证良好的系统运行状态)

2). 32核Intel Xeon处理器(保证良好的系统运行状态)

3). 1:5的SSD和SATA配比,SSD分区做Journal,SATA盘做OSD(实践产生的最高性价比)

3). PCIE的存储卡提供超高性能存储Pool (性能更高)

4). 万兆网卡提供Ceph的Cluster Network通信(满足分布式存储之间的通信需求)

5). 千兆网卡提供Ceph的Public Network通信(保证性能同时降低成本)

并且结合我们的研发测试与实践,形成了适合品高云的ceph调优经验,基本有以下几个方面:

1). BIOS设置

2). Linux及磁盘参数调优

3). XFS相关参数调优

4). filestore调整

5). journal性能优化

6). osd相关参数调优

7). crushmap优化,给osd划分合理的pools,故障域切分,降低数据丢失概率

8). RADOSGW的接口功能增加,适应云平台需求

ceph监控

ceph是一个具备自我修复功能的高稳定平台,但这不能降低其作为一个完善的存储系统监控的必要性,因为我们不能长期依靠人工来发现问题,所以针对ceph品高云也有一套完善的监控系统。

首页有针对存储状态、容量、版本信息、同步状况、存储读写的监控信息;

并且可以针对Monitor、osd、MDS、POOL以及PG等进程组件进行监控,一旦发现问题,可以及时排查处理。

总而言之,ceph是一个大型分布式存储系统,品高云对其的研究优化将是一个持续的过程,借助在众多客户中的部署实践和需求改善,ceph在品高云的运行状态将会越来越完善。

ceph在品高云中的实践的更多相关文章

  1. Mysql事务探索及其在Django中的实践(二)

    继上一篇<Mysql事务探索及其在Django中的实践(一)>交代完问题的背景和Mysql事务基础后,这一篇主要想介绍一下事务在Django中的使用以及实际应用给我们带来的效率提升. 首先 ...

  2. 05-雷海林-mysql备份原理与在TDSQL中的实践

    05-雷海林-mysql备份原理与在TDSQL中的实践 下载地址: http://files.cnblogs.com/files/MYSQLZOUQI/05-%E9%9B%B7%E6%B5%B7%E6 ...

  3. 关于Jaccard相似度在竞品分析中的一点思考

    上个月对一个小项目的效果进行改进,时间紧,只有不到一周的时间,所以思考了一下就用了最简单的方法来做,跟大家分享一下(项目场景用的类似的场景) 项目场景:分析一个产品的竞品,譬如app的竞品.网站的竞品 ...

  4. 一致性Hash算法在数据库分表中的实践

    最近有一个项目,其中某个功能单表数据在可预估的未来达到了亿级,初步估算在90亿左右.与同事详细讨论后,决定采用一致性Hash算法来完成数据库的自动扩容和数据迁移.整个程序细节由我同事完成,我只是将其理 ...

  5. Jaccard相似度在竞品分析中的应用

    上个月对一个小项目的效果进行改进,时间紧,只有不到一周的时间,所以思考了一下就用了最简单的方法来做,效果针对上一版提升了5%左右,跟大家分享一下(项目场景用的类似的场景) 项目场景:分析一个产品的竞品 ...

  6. 华为云对Kubernetes在Serverless Container产品落地中的实践经验

    华为云容器实例服务,它基于 Kubernetes 打造,对最终用户直接提供 K8S 的 API.正如前面所说,它最大的优点是用户可以围绕 K8S 直接定义运行应用. 这里值得一提是,我们采用了全物理机 ...

  7. React 与 Redux 在生产环境中的实践总结

    React 与 Redux 在生产环境中的实践总结 前段时间使用 React 与 Redux 重构了我们360netlab 的 开放数据平台.现将其中一些技术实践经验总结如下: Universal 渲 ...

  8. immutable.js 在React、Redux中的实践以及常用API简介

    immutable.js 在React.Redux中的实践以及常用API简介 学习下 这个immutable Data 是什么鬼,有什么优点,好处等等 mark :  https://yq.aliyu ...

  9. Immutable.js 以及在 react+redux 项目中的实践

    来自一位美团大牛的分享,相信可以帮助到你. 原文链接:https://juejin.im/post/5948985ea0bb9f006bed7472?utm_source=tuicool&ut ...

随机推荐

  1. 201521123083《Java程序设计》第二周学习总结

    [TOC] 1. 本周学习总结 这周我花在java里面的时间就是在做pta和看课本继承,接口和多态这几章的内容. 在pta上的总结: 详细的具体在后面pta实验中总结再说,这里先说几点. 借着List ...

  2. Swing-JList选择事件监听器ListSelectionListener-入门

    当JList中的元素被选中时,选择事件将被触发.对于JTable也是一样,你可以把它看做是多个并列的JList.那么,如果程序需要对该事件做出响应,需要以下步骤: (1)创建一个实现了 ListSel ...

  3. 201521123014 《Java程序设计》第6周学习总结

    1. 本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图,对面向对象思想进行一个总结. 1.2 可选:使用常规方法总结其他上课内容. GUI与Sw ...

  4. 201521123070 《JAVA程序设计》第14周学习总结

    1. 本章学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多数据库相关内容. 2. 书面作业 Q1. MySQL数据库基本操作 建立数据库,将自己的姓名.学号作为一条记录插入.(截图,需出现 ...

  5. SpringMVC第四篇【参数绑定详讲、默认支持参数类型、自定义参数绑定、RequestParam注解】

    参数绑定 我们在Controller使用方法参数接收值,就是把web端的值给接收到Controller中处理,这个过程就叫做参数绑定- 默认支持的参数类型 从上面的用法我们可以发现,我们可以使用req ...

  6. [5] 微信公众号开发 - 微信支付功能开发(网页JSAPI调用)

    1.微信支付的流程 如下三张手机截图,我们在微信网页端看到的支付,表面上看到的是 "点击支付按钮 - 弹出支付框 - 支付成功后出现提示页面",实际上的核心处理过程是: 点击支付按 ...

  7. gephi安装后无法打开

    具体解决的方法是找到gephi.conf文件(在“gephi安装目录\etc”中)文件,添加下面的一行,指定jdkhome的路径. jdkhome="C:\Program Files (x8 ...

  8. 中文转unicode,中文转bytes,unicode转bytes java实现

    utf-8 utf-8格式的中文由三位字节组成. UTF-8的编码规则很简单,只有二条: 1)对于单字节的符号,字节的第一位设为0,后面7位为这个符号的unicode码.因此对于英语字母,UTF-8编 ...

  9. ngRepeat track by

    刚刚看见一篇文章讲述track by的功能的,大致记录如下: 1. ng-repeat="friend in friends" 一般不使用track by的情况下,每次刷新DOM, ...

  10. 使用.net 自建短链接(短网址)

    短连接大家都不陌生,例如新浪的 t.cn .京东的 3.cn .淘宝的 tb.cn 等等.都已经是家喻户晓的短连接域名.不知道有多少人像我一样,对短连接原理好奇而且尝试自建了呢? 今天发布这个文章的目 ...