转自:https://www.ustack.com/blog/openstack_and_ceph/

目前,OpenStack Havana版即将发布,将不会有额外的feature进入。在这一版本中,UnitedStack参与并推动了Ceph与OpenStack部分核心项目的整合,整合的好处在于提高性能,降低管理成本和维护成本。但这条路却不并是那么一帆风顺,让我们一起来回顾H版OpenStack各项目与Ceph整合的故事和目前进展。

Ceph与Nova整合

在OpenStack Nova项目中存在两种类型的存储,一类是本地易失性存储,另一类是持久块设备。两者最明显的特征就是持久块设备由Cinder项目管理,并且具备大量API进行管理,如Snapshot,Backup等等。而相对的本地易失性存储由Nova的hypervisor实现,如在libvirt中目前支持Qcow,LVM镜像类型。这类存储只具备简单的创建和删除设备能力,主要用作创建Root,Swap,Empheremal磁盘分区的后备。

Cinder项目很早就已经支持Ceph,并且一直是最完备的后端之一,而在H版的Nova易失性存储中同样迎来了Ceph的支持(只支持libvirt)[Add RBD supporting to libvirt for creating local volume](https://review.openstack.org/#/c/36042/)。在Nova中,目前可以通过指定”libvirt_images_type=rbd”来选择Ceph作为易失性后端。这就意味着如果采用Ceph作为块设备支持,那么在OpenStack的VM可以只采用Ceph的存储池。

Ceph与Cinder整合

在H版的Cinder项目中增加了块设备备份到Ceph的能力,这个功能意味着如果在集群中存在其他块设备如SAN等,可以将其备份到Ceph集群中,与之前只能备份到Swift中相比大大增强了Ceph集群的使用范围。

随着Cinder支持extend volume的能力,Ceph后端同样增加了对Ceph Volume进行扩展的能力[Implement extend volume functionality in Rbd](https://review.openstack.org/#/c/36415/)。

另外,另一个关键性的实现是Ceph块设备的auto flatten能力。在Ceph RBD实现中,如果用户在对一个RBD Volume不断Snapshot,Clone的话会导致一个很长的镜像依赖链,这个会大大影响到Volume的性能。这个[Added copy-on-write support for all RBD cloning](https://review.openstack.org/#/c/41469/)实现了通过指定最长镜像链来实现自动将镜像解耦。对用户透明化复杂的镜像关系非常有用。

整合综述

在Ceph与OpenStack完全整合的路径上现在只存在一个障碍: Nova镜像启动需要从Glance中下载到本地再转移到Ceph中启动,而Glance早已支持Ceph后端存储。这意味着镜像需要经历一次下载和一次上次才能被Nova使用,而这两次镜像传输完全是可以避免的,遗憾的是这个[Make rbd usable for ephemeral storage](https://review.openstack.org/#/c/46879/)由于提交太迟错过了窗口期导致被拒。

当然,大部分工作都已经到位,欠缺的Patch可以很容易backport回来,通过这些努力,我们得到一个清晰的整合蓝图。

从上图中我们可以发现,当OpenStack存储池中只存在Ceph以后,所有的存储资源可以被有效的利用起来,一些苦恼的存储区域分配和中间传输流程都会随之消失。所有的镜像存储由Glance存储在Ceph中,所有的持久块设备由Cinder在Ceph中管理。当一个虚拟机启动时,Nova可以直接从Ceph中取得镜像然后启动,中间除了VM需要从Ceph中获得启动镜像内容以外不会有多余的传输消耗。

从这里可以延伸出的结果是:OpenStack对块设备所需支持由Ceph可以完全实现并且统一好管理。

相关Patch

1. Implement extend volume functionality in Rbd(UnitedStack)

https://review.openstack.org/#/c/36415/ 给Cinder项目的Ceph RBD后备提供扩展块设备的能力

2. Add RBD supporting to libvirt for creating local volume(UnitedStack)

https://review.openstack.org/#/c/36042/ Nova的Root,Swap,Emphemeral分区增加使用Ceph RBD的选项和能力

3. Make rbd usable for ephemeral storage(Inktank)

https://review.openstack.org/#/c/46879/当使用RBD作为Nova的libvirt后备时,Nova会通过Http从Glance下载镜像到本地再上传到Ceph中,对于大镜像(Windows)来说非常浪费带宽和存储空间。这个补丁实现了当Glance与Nova使用Ceph RBD存储在同一个Ceph Pool中时,Nova会从Glance处创建一个copy-on-write镜像。这使得启动VM的时间会大大减小,不再受限于镜像的大小。

4. Added copy-on-write support for all RBD cloning(Canonical)

https://review.openstack.org/#/c/41469/主要为Cinder的Ceph RBD后备提供copy-on-write的克隆块设备能力,会大大减小克隆块设备的时间。同时,为了避免过长的镜像依赖链,这里实现了自动折叠镜像的能力。也就是当镜像链长度超过指定大小时,父子镜像之间会进行数据复制来避免依赖。

OpenStack H版与 Ceph 整合的现状的更多相关文章

  1. OpenStack Kilo版加CEPH部署手册

    OpenStack Kilo版加CEPH部署手册 作者: yz联系方式: QQ: 949587200日期: 2015-7-13版本: Kilo 转载地址: http://mp.weixin.qq.co ...

  2. 在Openstack H版部署Nova Cell 时 ,终端输入nova service-list 和 nova host-list 命令将报错

    关于Cell的基本介绍,可以参考贤哥的一篇文章: [OpenStack]G版中关于Nova的Cell  http://blog.csdn.net/lynn_kong/article/details/8 ...

  3. CentOS7.4安装部署openstack [Liberty版] (二)

    继上一篇博客CentOS7.4安装部署openstack [Liberty版] (一),本篇继续讲述后续部分的内容 一.添加块设备存储服务 1.服务简述: OpenStack块存储服务为实例提供块存储 ...

  4. OpenStack G版以后的Availability Zone与Aggregate Hosts

    关于Availability Zone与Aggregate Hosts的概念解析,可以参考这篇文章:http://blog.chinaunix.net/uid-20940095-id-3875022. ...

  5. 【openstack N版】——认证服务keystone

    一. 基础环境 1.1环境介绍 linux-node1(控制节点) #系统版本 [root@linux-node1 ~]# cat /etc/redhat-release CentOS Linux r ...

  6. CentOS7.2非HA分布式部署Openstack Pike版 (实验)

    部署环境 一.组网拓扑 二.设备配置 笔记本:联想L440处理器:i3-4000M 2.40GHz内存:12G虚拟机软件:VMware® Workstation 12 Pro(12.5.2 build ...

  7. CentOS7.4安装部署openstack [Liberty版] (一)

    一.OpenStack简介 OpenStack是一个由NASA(美国国家航空航天局)和Rackspace合作研发并发起的,以Apache许可证授权的自由软件和开放源代码项目. OpenStack是一个 ...

  8. OpenStack IceHouse版cinder模块新添加功能

    感谢朋友支持本博客.欢迎共同探讨交流.因为能力和时间有限.错误之处在所难免,欢迎指正! 假设转载,请保留作者信息. 博客地址:http://blog.csdn.net/gaoxingnengjisua ...

  9. openstack Train版 “nova-status upgrade check”报错:Forbidden: Forbidden (HTTP 403)

    部署openstack train版,在部署完nova项目时,进行检查,执行 nova-status upgrade check 返回报错信息如下: [root@controller ~]# nova ...

随机推荐

  1. python 元类metaclass

    文章转自:http://www.cnblogs.com/linhaifeng/articles/8029564.html 一 知识储备 exec:三个参数 参数一:字符串形式的命令 参数二:全局作用域 ...

  2. ActiveMQ 核心概念

    1.Failover 当A无法为客户服务时,系统能够自动地切换,使B能够及时地顶上继续为客户提供服务,且客户感觉不到这个为他提供服务的对象已经更换. 如数据库.应用服务.硬件设备等的失效转移. 2.S ...

  3. 022-Spring Boot 构建微服务实战

    一.概述 二. 2.1.微服务 将原来一个大的系统,拆分成小系统 每个小系统分别开发,测试,维护 2.2.调用方 服务提供方式:rest(http)[restTemplate,httpclient]. ...

  4. 20170411 debug窗口执行文件

    [FUNCTION] Command=/H Title=Debugger Type=SystemCommand

  5. 曾经遇到的坑------href="#"和href="javascript:void(0);"、href="javascript:;"

    这个是为了 在点击此链接后回到页首,如果你写href="#"那么点击后会回到页首,这样影响操作. <a href="javascript:void 0" ...

  6. 从yum源下载软件包

    以下是从163源下载openstack-ocata版软件包的脚本: from html.parser import HTMLParser from urllib import request impo ...

  7. Capslock and Esc

    将Caps Lock转换成Esc(windows and linux) 1. linux 下将Caps Lock 转换成Esc 作为一个vimer,Caps Lock对我(还有其他很多人)来说根本就是 ...

  8. java 图片Base64字符串转图片二进制数组

    public static byte[] base64ToImgByteArray(String base64) throws IOException{ sun.misc.BASE64Decoder ...

  9. php获取MAC地址

    /** *获取mac地址 **/ class GetMacAddr{ var $return_array = array(); // 返回带有MAC地址的字串数组 var $mac_addr; fun ...

  10. springboot中Controller没有被扫描

    今天给客户开发登陆的密码加密需求,研究一下想,需要在本地搭一套环境,前台用js实现RAS加密,后台使用java解密.本是一套非常简单的环境,看最近springboot比较常用,所以想要搭一下sprin ...