如何将Ceph与OpenStack集成

总揽

咱们还将展现如何将三个重要的OpenStack用例:Cinder(块存储)、Glance(镜像)和Nova(虚拟机虚拟磁盘)与Ceph集成。python

Ceph提供统一的横向扩展存储,使用带有自我修复和智能预测故障功能的商用x86硬件。它已经成为软件定义存储的事实上的标准。由于Ceph是开源的,它使许多供应商可以提供基于Ceph的软件定义存储系统。 Ceph不只限于Red Hat、Suse、Mirantis、Ubuntu等公司。 SanDisk、富士通、惠普、戴尔、三星等公司如今也提供集成解决方案。甚至还有大规模的社区建造的环境(如CERN),为10000个虚拟机提供存储服务。后端

Ceph毫不局限于OpenStack,可是这是Ceph开始得到牵引力的地方。看看最新的OpenStack用户调查,Ceph是OpenStack存储的显著领导者。2016年4月OpenStack用户调查报告的第42页显示,Ceph占OpenStack存储的57%,下一个是LVM(本地存储)占28%,NetApp占9%。若是咱们不看LVM,Ceph领先其余存储公司48%,使人难以置信。这是为何?api

有好几个缘由,我认为如下是最重要的三个:缓存

  • Ceph是一个横向扩展的统一存储平台。OpenStack最须要的存储能力的两个方面:可以与OpenStack自己一块儿扩展,而且扩展时不须要考虑是块(Cinder)、文件(Manila)仍是对象(Swift)。传统存储供应商须要提供两个或三个不一样的存储系统来实现这一点。它们不一样样扩展,而且在大多数状况下仅在永无止境的迁移周期中纵向扩展。它们的管理功能历来没有真正实现跨不一样的存储用例集成。网络

  • Ceph具备成本效益。 Ceph利用Linux做为操做系统,而不是专有的系统。你不只能够选择找谁购买Ceph,还能够选择从哪里购买硬件。能够是同一供应商也能够是不一样的。你能够购买硬件,甚至从单一供应商购买Ceph +硬件的集成解决方案。已经有针对Ceph的超融合方案出现(在计算节点上运行Ceph服务)。架构

  • 和OpenStack同样,Ceph是开源项目。这容许更紧密的集成和跨项目开发。专有供应商老是在努力追赶,由于他们有秘密要保护,他们的影响力一般限于开源社区。app

这里是一个架构图,显示了全部须要存储的不一样OpenStack组件。它显示了这些组件如何与Ceph集成,以及Ceph如何提供一个统一的存储系统,扩展以知足全部这些用例。ssh

peanut-butter-and-jelly-mapping-the-deep-integration-between-ceph-and-openstack

若是你对与Ceph和OpenStack相关的更多主题感兴趣,推荐这个网址:http://ceph.com/category/ceph-and-openstack/。性能

说够了为何Ceph和OpenStack如此伟大,该说说如何链接它们了。若是你没有Ceph环境,能够按照这篇文章快速设置。ui

Glance集成

Glance是OpenStack中的映像服务。默认状况下,映像存储在本地控制器,而后在被请求时复制到计算主机。计算主机缓存镜像,但每次更新镜像时,都须要再次复制。

Ceph为Glance提供了后端,容许镜像存储在Ceph中,而不是本地存储在控制器和计算节点上。这大大减小了抓取镜像的网络流量,提升了性能,由于Ceph能够克隆镜像而不是复制镜像。此外,它使得在OpenStack部署或诸如多站点OpenStack之类的概念的迁移变得更简单。

安装Glance使用的Ceph客户端。

[root@osp9 ~]# yum install -y python-rbd

建立Ceph用户并将主目录设置为/etc/ceph。

[root@osp9 ~]# mkdir /etc/ceph
[root@osp9 ~]# useradd ceph
[root@osp9 ~]# passwd ceph

将Ceph用户添加到sudoers。

cat << EOF >/etc/sudoers.d/ceph
ceph ALL = (root) NOPASSWD:ALL
Defaults:ceph !requiretty
EOF

在Ceph管理节点。为Glance镜像建立Ceph RBD池。

[ceph@ceph1 ~]$ sudo ceph osd pool create images 128

建立将容许Glance访问池的密钥环。


[ceph@ceph1 ~]$ sudo ceph auth get-or-create client.images mon 'allow r' osd 'allow class-read object_prefix rdb_children, allow rwx pool=images' -o /etc/ceph/ceph.client.images.keyring

将密钥环复制到OpenStack控制器上的/etc/ceph。

[ceph@ceph1 ~]$ scp /etc/ceph/ceph.conf root@osp9.lab:/etc/ceph

设置权限,让 Glance能够访问Ceph密钥环。

[root@osp9 ~(keystone_admin)]# chgrp glance /etc/ceph/ceph.client.images.keyring
[root@osp9 ~(keystone_admin)]#chmod 0640 /etc/ceph/ceph.client.images.keyring

将密钥环文件添加到Ceph配置。

[root@osp9 ~(keystone_admin)]# vi /etc/ceph/ceph.conf
[client.images]
keyring = /etc/ceph/ceph.client.images.keyring

建立原始Glance配置的备份。

[root@osp9 ~(keystone_admin)]# cp /etc/glance/glance-api.conf /etc/glance/glance-api.conf.orig

更新Glance配置。

[root@osp9 ~]# vi /etc/glance/glance-api.conf
[glance_store]
stores = glance.store.rbd.Store
default_store = rbd
rbd_store_pool = images
rbd_store_user = images
rbd_store_ceph_conf = /etc/ceph/ceph.conf

从新启动Glance。

[root@osp9 ~(keystone_admin)]# systemctl restart openstack-glance-api

下载Cirros镜像并将其添加到Glance。

[root@osp9 ~(keystone_admin)]# wget http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img

将QCOW2转换为RAW。 建议Ceph始终使用RAW格式。

[root@osp9 ~(keystone_admin)]#qemu-img convert cirros-0.3.4-x86_64-disk.img cirros-0.3.4-x86_64-disk.raw

将镜像添加到Glance。

[root@osp9 ~(keystone_admin)]#glance image-create --name "Cirros 0.3.4" --disk-format raw --container-format bare --visibility public --file cirros-0.3.4-x86_64-disk.raw

+------------------+--------------------------------------+
| Property | Value |
+------------------+--------------------------------------+
| checksum | ee1eca47dc88f4879d8a229cc70a07c6 |
| container_format | bare |
| created_at | 2016-09-07T12:29:23Z |
| disk_format | qcow2 |
| id | a55e9417-67af-43c5-a342-85d2c4c483f7 |
| min_disk | 0 |
| min_ram | 0 |
| name | Cirros 0.3.4 |
| owner | dd6a4ed994d04255a451da66b68a8057 |
| protected | False |
| size | 13287936 |
| status | active |
| tags | [] |
| updated_at | 2016-09-07T12:29:27Z |
| virtual_size | None |
| visibility | public |
+------------------+--------------------------------------+

检查Ceph中是否存在Glance图像。

[ceph@ceph1 ceph-config]$ sudo rbd ls images
a55e9417-67af-43c5-a342-85d2c4c483f7

Cinder集成

Cinder是OpenStack中的块存储服务。 Cinder提供了关于块存储的抽象,并容许供应商经过提供驱动程序进行集成。在Ceph中,每一个存储池能够映射到不一样的Cinder后端。这容许建立诸如金、银或铜的存储服务。你能够决定例如金应该是复制三次的快速SSD磁盘,银应该是复制两次,铜应该是使用较慢的擦除编码的磁盘。

为Cinder卷建立一个Ceph池。

[ceph@ceph1 ~]$ sudo ceph osd pool create  128

建立一个密钥环以授予Cinder访问权限。

[ceph@ceph1 ~]$ sudo ceph auth get-or-create client.volumes mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=volumes, allow rx pool=images' -o /etc/ceph/ceph.client.volumes.keyring

将密钥环复制到OpenStack控制器。

[ceph@ceph1 ~]$ scp /etc/ceph/ceph.client.volumes.keyring root@osp9.lab:/etc/ceph

建立一个只包含OpenStack控制器上的身份验证密钥的文件。

[ceph@ceph1 ~]$ sudo ceph auth get-key client.volumes |ssh osp9.lab tee client.volumes.key

设置密钥环文件的权限,以便Cinder能够访问。

[root@osp9 ~(keystone_admin)]# chgrp cinder /etc/ceph/ceph.client.volumes.keyring
[root@osp9 ~(keystone_admin)]# chmod 0640 /etc/ceph/ceph.client.volumes.keyring

将密钥环添加到OpenStack控制器上的Ceph配置文件中。

[root@osp9 ~(keystone_admin)]#vi /etc/ceph/ceph.conf

[client.volumes]
keyring = /etc/ceph/ceph.client.volumes.keyring

使KVM Hypervisor访问Ceph。

[root@osp9 ~(keystone_admin)]# uuidgen |tee /etc/ceph/cinder.uuid.txt

在virsh中建立一个密钥,所以KVM能够访问Ceph池的Cinder卷。

[root@osp9 ~(keystone_admin)]#vi /etc/ceph/cinder.xml
ce6d1549-4d63-476b-afb6-88f0b196414f
client.volumes secret

[root@osp9 ceph]# virsh secret-define --file /etc/ceph/cinder.xml

[root@osp9 ~(keystone_admin)]# virsh secret-set-value --secret ce6d1549-4d63-476b-afb6-88f0b196414f --base64 $(cat /etc/ceph/client.volumes.key)

为Cinder添加一个Ceph后端。

[root@osp9 ~(keystone_admin)]#vi /etc/cinder/cinder.conf

[rbd]
volume_driver = cinder.volume.drivers.rbd.RBDDriver
rbd_pool = volumes
rbd_ceph_conf = /etc/ceph/ceph.conf
rbd_flatten_volume_from_snapshot = false
rbd_max_clone_depth = 5
rbd_store_chunk_size = 4
rados_connect_timeout = -1
glance_api_version = 2
rbd_user = volumes
rbd_secret_uuid = ce6d1549-4d63-476b-afb6-88f0b196414f

在全部控制器上从新启动Cinder服务。

[root@osp9 ~(keystone_admin)]# openstack-service restart cinder

建立Cinder卷。

[root@osp9 ~(keystone_admin)]# cinder create --display-name="test" 1
+--------------------------------+--------------------------------------+
| Property | Value |
+--------------------------------+--------------------------------------+
| attachments | [] |
| availability_zone | nova |
| bootable | false |
| consistencygroup_id | None |
| created_at | 2016-09-08T10:58:17.000000 |
| description | None |
| encrypted | False |
| id | d251bb74-5c5c-4c40-a15b-2a4a17bbed8b |
| metadata | {} |
| migration_status | None |
| multiattach | False |
| name | test |
| os-vol-host-attr:host | None |
| os-vol-mig-status-attr:migstat | None |
| os-vol-mig-status-attr:name_id | None |
| os-vol-tenant-attr:tenant_id | dd6a4ed994d04255a451da66b68a8057 |
| replication_status | disabled |
| size | 1 |
| snapshot_id | None |
| source_volid | None |
| status | creating |
| updated_at | None |
| user_id | 783d6e51e611400c80458de5d735897e |
| volume_type | None |
+--------------------------------+--------------------------------------+


List new cinder volume

[root@osp9 ~(keystone_admin)]# cinder list
+--------------------------------------+-----------+------+------+-------------+----------+-------------+
| ID | Status | Name | Size | Volume Type | Bootable | Attached to |
+--------------------------------------+-----------+------+------+-------------+----------+-------------+
| d251bb74-5c5c-4c40-a15b-2a4a17bbed8b | available | test | 1 | - | false | |
+--------------------------------------+-----------+------+------+-------------+----------+-------------+

在Ceph中列出Cinder卷。

[ceph@ceph1 ~]$ sudo rbd ls volumes
volume-d251bb74-5c5c-4c40-a15b-2a4a17bbed8b

[ceph@ceph1 ~]$ sudo rbd info volumes/volume-d251bb74-5c5c-4c40-a15b-2a4a17bbed8b
rbd image 'volume-d251bb74-5c5c-4c40-a15b-2a4a17bbed8b':
size 1024 MB in 256 objects
order 22 (4096 kB objects)
block_name_prefix: rbd_data.2033b50c26d41
format: 2
features: layering, striping
flags:
stripe unit: 4096 kB
stripe count: 1

将Ceph与Nova计算集成

Nova是OpenStack中的计算服务。 Nova存储与默认的运行虚拟机相关联的虚拟磁盘镜像,在/ var / lib / nova / instances下的Hypervisor上。在虚拟磁盘映像的计算节点上使用本地存储有一些缺点:

  • 镜像存储在根文件系统下。大镜像可能致使文件系统被填满,从而致使计算节点崩溃。

  • 计算节点上的磁盘崩溃可能致使虚拟磁盘丢失,所以没法进行虚拟机恢复。

Ceph是能够直接与Nova集成的存储后端之一。在本节中,咱们将看到如何配置。

[ceph@ceph1 ~]$ sudo ceph osd pool create vms 128

为Nova建立验证密钥环。

[ceph@ceph1 ~]$ sudo ceph auth get-or-create client.nova mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=vms, allow rx pool=images' -o /etc/ceph/ceph.client.nova.keyring

将密钥环复制到OpenStack控制器。

[ceph@ceph1 ~]$ scp /etc/ceph/ceph.client.nova.keyring root@osp9.lab:/etc/ceph

在OpenStack控制器上建立密钥文件。

[ceph@ceph1 ~]$ sudo ceph auth get-key client.nova |ssh osp9.lab tee client.nova.key

设置密钥环文件的权限,以便Nova服务能够访问。

[root@osp9 ~(keystone_admin)]# chgrp nova /etc/ceph/ceph.client.nova.keyring
[root@osp9 ~(keystone_admin)]# chmod 0640 /etc/ceph/ceph.client.nova.keyring

确保安装所需的rpm软件包。

[root@osp9 ~(keystone_admin)]# yum list installed python-rbd ceph-common
Loaded plugins: product-id, search-disabled-repos, subscription-manager
Installed Packages
ceph-common.x86_64 1:0.94.5-15.el7cp @rhel-7-server-rhceph-1.3-mon-rpms
python-rbd.x86_64 1:0.94.5-15.el7cp @rhel-7-server-rhceph-1.3-mon-rpms

更新Ceph配置。

[root@osp9 ~(keystone_admin)]#vi /etc/ceph/ceph.conf

[client.nova]
keyring = /etc/ceph/ceph.client.nova.keyring

让KVM能够访问Ceph。

[root@osp9 ~(keystone_admin)]# uuidgen |tee /etc/ceph/nova.uuid.txt

在virsh中建立一个密钥,这样KVM能够访问Cinder卷的Ceph池。

[root@osp9 ~(keystone_admin)]#vi /etc/ceph/nova.xml
c89c0a90-9648-49eb-b443-c97adb538f23
client.volumes secret

[root@osp9 ~(keystone_admin)]# virsh secret-define --file /etc/ceph/nova.xml

[root@osp9 ~(keystone_admin)]# virsh secret-set-value --secret c89c0a90-9648-49eb-b443-c97adb538f23 --base64 $(cat /etc/ceph/client.nova.key)

备份Nova配置。

[root@osp9 ~(keystone_admin)]# cp /etc/nova/nova.conf /etc/nova/nova.conf.orig

更新Nova配置以使用Ceph后端。

[root@osp9 ~(keystone_admin)]#vi /etc/nova/nova.conf
force_raw_images = True
disk_cachemodes = writeback

[libvirt]
images_type = rbd
images_rbd_pool = vms
images_rbd_ceph_conf = /etc/ceph/ceph.conf
rbd_user = nova
rbd_secret_uuid = c89c0a90-9648-49eb-b443-c97adb538f23

从新启动Nova服务。

[root@osp9 ~(keystone_admin)]# systemctl restart openstack-nova-compute

列表Neutron网络。

[root@osp9 ~(keystone_admin)]# neutron net-list
+--------------------------------------+---------+-----------------------------------------------------+
| id | name | subnets |
+--------------------------------------+---------+-----------------------------------------------------+
| 4683d03d-30fc-4dd1-9b5f-eccd87340e70 | private | ef909061-34ee-4b67-80a9-829ea0a862d0 10.10.1.0/24 |
| 8d35a938-5e4f-46a2-8948-b8c4d752e81e | public | bb2b65e7-ab41-4792-8591-91507784b8d8 192.168.0.0/24 |
+--------------------------------------+---------+-----------------------------------------------------+

启动使用在Glance步骤中添加的Cirros镜像的临时VM实例。

[root@osp9 ~(keystone_admin)]# nova boot --flavor m1.small --nic net-id=4683d03d-30fc-4dd1-9b5f-eccd87340e70 --image='Cirros 0.3.4' cephvm
+--------------------------------------+-----------------------------------------------------+
| Property | Value |
+--------------------------------------+-----------------------------------------------------+
| OS-DCF:diskConfig | MANUAL |
| OS-EXT-AZ:availability_zone | |
| OS-EXT-SRV-ATTR:host | - |
| OS-EXT-SRV-ATTR:hypervisor_hostname | - |
| OS-EXT-SRV-ATTR:instance_name | instance-00000001 |
| OS-EXT-STS:power_state | 0 |
| OS-EXT-STS:task_state | scheduling |
| OS-EXT-STS:vm_state | building |
| OS-SRV-USG:launched_at | - |
| OS-SRV-USG:terminated_at | - |
| accessIPv4 | |
| accessIPv6 | |
| adminPass | wzKrvK3miVJ3 |
| config_drive | |
| created | 2016-09-08T11:41:29Z |
| flavor | m1.small (2) |
| hostId | |
| id | 85c66004-e8c6-497e-b5d3-b949a1666c90 |
| image | Cirros 0.3.4 (a55e9417-67af-43c5-a342-85d2c4c483f7) |
| key_name | - |
| metadata | {} |
| name | cephvm |
| os-extended-volumes:volumes_attached | [] |
| progress | 0 |
| security_groups | default |
| status | BUILD |
| tenant_id | dd6a4ed994d04255a451da66b68a8057 |
| updated | 2016-09-08T11:41:33Z |
| user_id | 783d6e51e611400c80458de5d735897e |
+--------------------------------------+-----------------------------------------------------+

等待直到VM处于活动状态。

[root@osp9 ceph(keystone_admin)]# nova list
+--------------------------------------+--------+--------+------------+-------------+---------------------+
| ID | Name | Status | Task State | Power State | Networks |
+--------------------------------------+--------+--------+------------+-------------+---------------------+
| 8ca3e74e-cd52-42a6-acec-13a5b8bda53c | cephvm | ACTIVE | - | Running | private=10.10.1.106 |
+--------------------------------------+--------+--------+------------+-------------+---------------------+

在Ceph虚拟机池中列出镜像。咱们如今应该看到镜像存储在Ceph中。

[ceph@ceph1 ~]$ sudo rbd -p vms ls
8ca3e74e-cd52-42a6-acec-13a5b8bda53c_disk

故障排除

没法删除存储在CEPH RBD中的Glance镜像。

[root@osp9 ceph(keystone_admin)]# nova image-list
+--------------------------------------+--------------+--------+--------+
| ID | Name | Status | Server |
+--------------------------------------+--------------+--------+--------+
| a55e9417-67af-43c5-a342-85d2c4c483f7 | Cirros 0.3.4 | ACTIVE | |
| 34510bb3-da95-4cb1-8a66-59f572ec0a5d | test123 | ACTIVE | |
| cf56345e-1454-4775-84f6-781912ce242b | test456 | ACTIVE | |
+--------------------------------------+--------------+--------+--------+

[root@osp9 ceph(keystone_admin)]# rbd -p images snap unprotect cf56345e-1454-4775-84f6-781912ce242b@snap
[root@osp9 ceph(keystone_admin)]# rbd -p images snap rm cf56345e-1454-4775-84f6-781912ce242b@snap
[root@osp9 ceph(keystone_admin)]# glance image-delete cf56345e-1454-4775-84f6-781912ce242b

概要

在本文中,咱们讨论了OpenStack和Ceph如何完美地结合在一块儿。咱们讨论了关于Glance、Cinder和Nova的一些用例。最后,咱们完成了将Ceph与这些用例集成的步骤。

相关文章
相关标签/搜索