ceph在品高云中的实践
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在品高云中的实践的更多相关文章
- Mysql事务探索及其在Django中的实践(二)
继上一篇<Mysql事务探索及其在Django中的实践(一)>交代完问题的背景和Mysql事务基础后,这一篇主要想介绍一下事务在Django中的使用以及实际应用给我们带来的效率提升. 首先 ...
- 05-雷海林-mysql备份原理与在TDSQL中的实践
05-雷海林-mysql备份原理与在TDSQL中的实践 下载地址: http://files.cnblogs.com/files/MYSQLZOUQI/05-%E9%9B%B7%E6%B5%B7%E6 ...
- 关于Jaccard相似度在竞品分析中的一点思考
上个月对一个小项目的效果进行改进,时间紧,只有不到一周的时间,所以思考了一下就用了最简单的方法来做,跟大家分享一下(项目场景用的类似的场景) 项目场景:分析一个产品的竞品,譬如app的竞品.网站的竞品 ...
- 一致性Hash算法在数据库分表中的实践
最近有一个项目,其中某个功能单表数据在可预估的未来达到了亿级,初步估算在90亿左右.与同事详细讨论后,决定采用一致性Hash算法来完成数据库的自动扩容和数据迁移.整个程序细节由我同事完成,我只是将其理 ...
- Jaccard相似度在竞品分析中的应用
上个月对一个小项目的效果进行改进,时间紧,只有不到一周的时间,所以思考了一下就用了最简单的方法来做,效果针对上一版提升了5%左右,跟大家分享一下(项目场景用的类似的场景) 项目场景:分析一个产品的竞品 ...
- 华为云对Kubernetes在Serverless Container产品落地中的实践经验
华为云容器实例服务,它基于 Kubernetes 打造,对最终用户直接提供 K8S 的 API.正如前面所说,它最大的优点是用户可以围绕 K8S 直接定义运行应用. 这里值得一提是,我们采用了全物理机 ...
- React 与 Redux 在生产环境中的实践总结
React 与 Redux 在生产环境中的实践总结 前段时间使用 React 与 Redux 重构了我们360netlab 的 开放数据平台.现将其中一些技术实践经验总结如下: Universal 渲 ...
- immutable.js 在React、Redux中的实践以及常用API简介
immutable.js 在React.Redux中的实践以及常用API简介 学习下 这个immutable Data 是什么鬼,有什么优点,好处等等 mark : https://yq.aliyu ...
- Immutable.js 以及在 react+redux 项目中的实践
来自一位美团大牛的分享,相信可以帮助到你. 原文链接:https://juejin.im/post/5948985ea0bb9f006bed7472?utm_source=tuicool&ut ...
随机推荐
- Domain Driven Design
在Spring官网的第一个tutorial中看到了这种 设计模式 Domain Driven Design 找到了篇介绍这个得文章: What is Domain Driven Design? &qu ...
- HTML解析原理概括(转载)
HTML解析原理 标准的web前端工程师需要知道 ◎浏览器(或者相应播放器)的渲染/重绘原理 这我得加把劲了.我还真的说的不是很清楚,我就G下,结果不是很多,找到了有一个,就记下来了... 以下部分 ...
- 201521123023《Java程序设计》第6周学习总结
1. 本周学习总结 2. 书面作业 1.clone方法 1.1 Object对象中的clone方法是被protected修饰,在自定义的类中覆盖clone方法时需要注意什么? 实现克隆必须实现Clon ...
- 201521123054《java程序设计》第12周学习总结
1. 本周学习总结 2. 书面作业 1. 字符流与文本文件:使用 PrintWriter(写),BufferedReader(读) 1.1 生成的三个学生对象,使用PrintWriter的printl ...
- 201521123109《java程序设计》第九周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 2. 书面作业 本次PTA作业题集异常 1. 常用异常 题目5-1 1.1 截图你的提交结果(出现学号) 1.2 自 ...
- 201521044091 《Java程序设计》第11周学习总结
1. 本章学习总结 2. 书面作业 Q1.1.互斥访问与同步访问完成题集4-4(互斥访问)与4-5(同步访问) 1.1 除了使用synchronized修饰方法实现互斥同步访问,还有什么办法实现互斥同 ...
- Linux系统下用户与组的管理
Linux系统下用户与组的管理 一.用户及组基本概述 Linux 系统上,用户管理是基于用户名和密码的方式进行资源的分配. 1.uid(用户身份标识) (1)root用户 uid为0 (2)普通用户: ...
- Python学习笔记011_模块_标准库_第三方库的安装
容器 -> 数据的封装 函数 -> 语句的封装 类 -> 方法和属性的封装 模块 -> 模块就是程序 , 保存每个.py文件 # 创建了一个hello.py的文件,它的内容如下 ...
- Spring03-jdbc
1,Spring集成Jdbc,需要导入spring包和数据库驱动包,这里我们使用的是mysql驱动包 2,选择一个数据源(DBCP,C3P0),这里我们使用DBCP,需要导入DBCP驱动包 3,创建j ...
- python写的一段分页的代码
代码: from django.utils.safestring import mark_safe class Paginator(object): def __init__(self,current ...