在OpenStack标准架构中,Ceph为作为统一存储,Nova、Cinder和Glance同时对接Ceph的统一存储。在企业客户里面,他们会有商业存储需求,通常可以通过Cinder的驱动可以实现对Ceph和商业存储的支持,这样就可以实现虚拟机同时使用Ceph和商业存储的卷服务。但是客户可能更进一步,希望Nova虚拟机也能在商业存储上使用,这就带来一个问题,Glance一直存储在Ceph上,而不能在商业存储上。我们希望更进一步,让Glance也能支持多后端。但是在实际部署中,在一个OpenStack架构中,因为冲突的问题无法部署两个Glance服务。如果把商业存储换成Ceph,这个问题同样存在。UnitedStack有云大数据&容器组PTL陈迪豪在Austin OpenStack Summit上的演讲就解答了该问题,现场演讲PPT下载。
图:Austin OpenStack Summit陈迪豪topic演讲现场
为什么Glance多后端会出现这样的多问题?
正是因为这些问题的存在,所以需要来讨论如何解决?分享主要分为四个方面:介绍multi-location特性和限制、multi-location的最新策略、对Nova和Cinder的改进、对连接多Ceph集群的改进。
Glance支持multi-location功能,也就是同一个Image可以有多个location地址,Nova会按顺序读取这些location直到找到可用的镜像。例如一个Glance镜像可以写一个RBD的location,写一个File的location。但是这项特性不能解决一个Glance对接多个Ceph的问题,因为Glance同时只能连一个Ceph,不能“直接”添加另一个的Ceph的location到镜像中。
目前multi-location的缺陷
社区目前提供了两种调度策略,Store Type Strategy和Location Order Strategy,但是都不能满足我们的需求。UnitedStack有云实现了一个第三种调度策略,名字是“specified type strategy”,即就“指定类型策略”,根据指定的存储类型,返回指定的location地址。
此外,在对于Nova和Cinder的进行了改进,方法相似。通过对客户端和Server端的改写,当用户使用Nova去基于image启动一个虚拟机的时候,不仅可以指定Images Storage,还可以指定Images Store的相应的类型,这样就可以达到动态选择Glance镜像的存储路径。
最重要的问题是对连接多个Cpeh集群的修改,一般的Glance连接Ceph,只能配置一个Ceph集群。通过对配置文件的改写,可以把配置的集群变成多个。
以两个后端作为例子,多个数量类似,步骤如下:
首先,添加Ceph后端,然后编辑 Glance 配置文件。
为 Ceph1和 Ceph2添加新的sections,这看起来非常像Cinder的配置。之后需要将 ceph.conf 改为Ceph2,这就有了两个后端。保持和使用devstack session,然后进入 glance-api的重启进程。
下一步是上传 images到Ceph中。
用glance image-create来上传 images到Ceph1类型,完成之后,用第一个类似命令,上传到Ceph2类型,而这些 image 具有不同的Ceph 集群ID,也就是说,他们存储在不同的集群当中。