如何将Ceph与OpenStack集成

发布时间: 更新时间: 总字数:3266 阅读时间:7m 作者: IP上海 分享 网址

Rackspace 解决方案架构师 Keith Tenzer 讨论了为什么 OpenStack 和 Ceph 是一个了不起的组合。在本文中,我们将讨论为什么 Ceph 非常适合 OpenStack。

总揽

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

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%,令人难以置信。这是为什么?

有好几个原因,我认为以下是最重要的三个:

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

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

  • 和 OpenStack 一样,Ceph 是开源项目。这允许更紧密的集成和跨项目开发。专有供应商总是在努力追赶,因为他们有秘密要保护,他们的影响力通常限于开源社区。

这里是一个架构图,显示了所有需要存储的不同 OpenStack 组件。它显示了这些组件如何与 Ceph 集成,以及 Ceph 如何提供一个统一的存储系统,扩展以满足所有这些用例。

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

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

说够了为什么 Ceph 和 OpenStack 如此伟大,该说说如何连接它们了。如果你没有 Ceph 环境,可以按照这篇文章快速设置。

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 与这些用例集成的步骤。

参考

  1. http://superuser.openstack.org/articles/ceph-as-storage-for-openstack/
  2. ceph学习
  3. Ceph源码解析:网络模块
  4. Ceph代码分析-OSD篇
Home Archives Categories Tags Statistics
本文总阅读量 次 本站总访问量 次 本站总访客数