nghjan'gshjaCalamari项目开始于2013年夏天,创立它的初衷是开发一个Ceph管理平台, Calamari对外提供了十分漂亮的web管理和监控界面,以及一套改进的REST API接口(不同于Ceph自身的REST API),在一定程度上简化了Ceph的管理。最初Calamari是作为Inktank公司的Ceph企业级商业产品来销售,红帽今年5月30日收购Inktank后为了更好地推动Ceph的发展,对外宣布Calamari开源,秉承开源开放精神的红帽着实又做了一件非常有意义的事情。本文将简单剖析Calamari的架构和功能。

安装

Calamari推荐使用vagrant + virtualbox的方式来build安装包,然后在对应的操作系统中进行安装,具体的安装过程请参照Ceph Calamari : step-by-step(http://ceph.com/category/ceph-gui/)里边有很详细的安装步骤。我使用的是Ubuntu13.10来创建Calamari的安装包,build后的安装包列表是:

  1. calamari-clients_1.2.1.1-29-g3790c24_all.deb (calamar客户端,WEB UI代码)

  2. calamari-clients-build-output.tar(同calamari-clients_1.2.1.1-29-g3790c24_all.deb内容一样,只是它解压后可以在任何平台上使用)

  3. calamari-repo-precise.tar.gz(安装源,安装calamari过程中依赖的包)

  4. calamari-server_1.2.1-56-gc09e8ed_amd64.deb(calamari服务端,它提供了calamari REST API,calamari 通过salt管理Ceph服务的cthulhu,以及一个calamari web的一个基本框架)

  5. diamond_3.4.67_all.deb(calamari监控客户端)

架构

下面Calamari的架构图能帮助更好的理解它的组件,其中红框部分为Calamari代码实现的部分,非红框部分为非Calamari实现的开源框架。

  1. 在Ceph server node安装的组件有Diamond和Salt-minion。Diamond负责收集监控数据,它支持非常多的数据类型和metrics,通过查看源代码,它支持90多种类型的数据;每一个类型的数据都是上图中的一个collector,它除了收集Ceph本身的状态信息,它还可以收集关键的资源使用情况和性能数据,包括CPU,内存,网络,I / O负载和磁盘指标,而且还能收集很多流行软件的性能指标,包括 Hadoop, Mongo, Kafka, MySQL, NetApp, RabbitMQ, Redis, and AWS S3等。Collector都是使用本地的命令行来收集数据,然后报告给Graphite。

  2. Graphite不仅是一个企业级的监控工具, 还可以实时绘图。carbon-cache是Python实现的高度可扩展的事件驱动的I/O架构的后端进程,它可以有效地跟大量的客户端通信并且以较低的开销处理大量的业务量。

  3. Whisper跟RRDtool类似,提供数据库开发库给应用程序来操纵和检索存储在特殊格式的文件数据(时间数据点数据),Whisper最基本的操作是创建作出新的Whisper文件,更新写入新的数据点到一个文件中,并获取检索的数据点

  4. Graphite_web是用户接口,用来生成图片,用户可以直接通过URL的方式访问这些生成的图片。

  5. Calamari 使用了Saltstack让Calamari Server和Ceph server node通信。Saltstack是一个开源的自动化运维管理工具,与Chef和Puppet功能类似。Salt-master发送指令给指定的Salt-minion来完成对Cpeh Cluster的管理工作;Salt-minion 在Ceph server node安装后都会从master同步并安装一个ceph.py文件,里面包含Ceph操作的API,它会调用librados或命令行来最终和Ceph Cluster通信。

  6. calamari_rest提供Calamari REST API,详细的接口请大家参照官方文档。Ceph的REST API是一种低层次的接口,其中每个URL直接映射到等效的CEPH CLI;Calamari REST API提供了一个更高层次的接口,API的使用者可以习惯的使用GET/POST/PATCH方法来操作对象,而无需知道底层的Ceph的命令;它们之间的主要区别在于,Ceph的REST API的使用者需要非常了解Ceph本身,而Calamari 的REST API更贴近对Ceph资源的描述,所以更加适合给上层的应用程序调用。

  7. cthulhu可以理解是Calamari Server的Service层,对上为API提供接口,对下调用Salt-master。但是代码美中不足的是calamari_rest有些功能直接调用了Salt-master而没有调用cthulhu。

  8. calamari_clients是一套用户界面,Calamari Server在安装的过程中会首先创建opt/calamari/webapp目录,并且把webapp/calamari下的manager.py(django 配置)文件考进去, calamari_web的所有内容到要放到opt/calamari/webapp下面来提供UI的访问页面。

  9. calamari-web包下面的文件提供所有web相关的配置,calamari_rest和calamari_clients都要用到。

功能

Calamari的最强的就是监控功能,在页面上可以浏览整个Ceph Cluster的使用状况,OSD状态,磁盘的IOPS,Ceph Server的系统资源使用情况等。

监控概要

OSD状态

Calamari 提供的管理功能非常的有限,用户只可以配置cluster的一些基本参数和添加修改pool
Cluster 配置

添加修改pool

总结:

Calamari为Ceph的运维和管理提供了一个统一的平台,而且用户还可以基于这个平台扩展自己的存储管理产品,但同时也存在着不足和需要改进的地方。

  1. 首先,Calamari还不能完成Ceph deploy所实现的部署功能,这是它最大一个不足;Fuel可以完成部署功能,并且可以选择Ceph server的数据盘和日志盘以及定制默认的备份数等,所以Calamari + Fuel可以来实现一个完成的基于Ceph的部署和管理工具。

  2. 其次,Calamari提供的管理功能太少,用户无法只使用它来运维一个Ceph环境。

  3. 最后,用户可以基于Calamari开发自己的Ceph管理软件,UI部分可以修改calamari_clients的页面,也可也单独实现一套自己的UI基于calamari_rest和Graphite_web,后端的功能的监控部分可以扩展diamond的collector实现,管理Ceph的功能可以扩展rest api,cthulhu,salt等来实现。

部分参考http://www.openstack.cn/?p=2708。