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. 团队项目汇总beta

    一.Daily Scrum Meeting[Alpha] 4.23-第一天 4.24-第二天 4.25-第三天 4.26-第四天 4.27-第五天 4.28-第六天 4.29-第七天 二.Daily ...

  2. 201521123054《Java程序设计》第4周总结

    1. 本周学习总结 2. 书面作业 注释的应用 使用类的注释与方法的注释为前面编写的类与方法进行注释,并在Eclipse中查看.(截图) 面向对象设计(大作业1,非常重要) **2.1 将在网上商城购 ...

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

    1. 本周学习总结 2. 书面作业 1.代码阅读 public class Test1 { private int i = 1;//这行不能修改 private static int j = 2; p ...

  4. 201521123015《Java程序设计》第1周学习总结

    1.本周学习总结 知道了JAVA语言的发展历史和目前使用的版本,还有什么是JDK(Java Development Kit).JRE (Java Runtime Environment).JVM(Ja ...

  5. 201521123047《Java程序设计》第1周学习总结

    1. 本章学习总结 学习到了jdk,jvm,jre之间的关系,下载并安装了jdk,学会设置path变量,初步学会建立简单的java程序,并执行成功.初步学会notepad++,eclipse的操作.学 ...

  6. 201521123005《Java程序设计》第十三周学习总结

    1. 本周学习总结 1.网络基本概念 2.网络常用命令 ipconfig 查看网络配置信息,如ip地址 ping 测试网络是否连通 telnet 远程登录 ftp 登陆ftp Fport (xp下)查 ...

  7. 201521123048 《Java程序设计》第13周学习总结

    1. 本周学习总结 以你喜欢的方式(思维导图.OneNote或其他)归纳总结多网络相关内容. 2. 书面作业 1. 网络基础 1.1 比较ping www.baidu.com与ping cec.jmu ...

  8. 201521123099 《Java程序设计》 第10周学习总结

    1. 本周学习总结 2. 书面作业 本次PTA作业题集异常.多线程 finally 题目4-2 1.1 截图你的提交结果(出现学号) 1.2 4-2中finally中捕获异常需要注意什么? final ...

  9. json:JSONObject与JSONArray的使用

    1.JAR包简介 要使程序可以运行必须引入JSON-lib包,JSON-lib包同时依赖于以下的JAR包: commons-lang.jar commons-beanutils.jar commons ...

  10. Servlet第二篇【Servlet调用图、Servlet细节、ServletConfig、ServletContext】

    Servlet的调用图 前面我们已经学过了Servlet的生命周期了,我们根据Servlet的生命周期画出Servlet的调用图加深理解 Servlet的细节 一个已经注册的Servlet可以被多次映 ...