zoukankan      html  css  js  c++  java
  • 如何将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与这些用例集成的步骤。

  • 相关阅读:
    C语言二维数组
    Foxyproxy 火狐代理插件
    Midas Civil的钢束生成器
    foobar2000 – ELPlaylist
    Foobar2000-CUI 小结
    Foobar2000–panel stack splitter
    Foobar2000 使用说明
    foobar2000-new
    书匠
    图片转文字 ocr 汉王
  • 原文地址:https://www.cnblogs.com/fungitive/p/9136183.html
Copyright © 2011-2022 走看看