Ceph对接Openstack

原创 2018年01月05日 17:02:16

技术堆栈

  • Ceph的一个使用场景是结合Openstack来提供云存储服务,Openstack到Ceph之间的调用堆栈就是下面这个结构:

  

三大模块

Openstack对接Ceph,有3大模块可以使用Ceph:

  • 镜像
    Openstack的Glance组件提供镜像服务,可以将Image直接存储在Ceph中。

  • 操作系统盘
    Openstack的Nova组件提供计算服务,一个虚机的创建必然需要操作系统,也就少不了系统盘,系统盘可以使用Ceph来提供。

  • 非操作系统盘
    Openstack的Cinder组件提供块存储服务,也就是我们物理机中的普通磁盘,也可以通过Ceph来提供。

  • 以上3个组件从Openstack角度来说,是不同的3个模块,提供的服务也不同,但对于Ceph来说,都是一个Rbd Image,也就是一个块存储。
    走的是同样的API,但是在一些属性和参数间存在一些差异。

具体操作

  • 创建存储池
    针对Openstack的3个不同服务,需要把存储资源池隔离开,也就是每个服务一个Pool:

    // 创建volumes池,对应Cinder服务
    ceph osd pool create volumes 128
    
    // 创建images池,对应Glance服务
    ceph osd pool create images 128
    
    // 创建vms池,对应Nova服务
    ceph osd pool create vms 128
    
    // 创建backups池,对应Cinder-backup服务。但这个backup在同一Ceph集群中,意义不大,既然是做备份的话,就应该跨集群或者跨机房、跨区域来达到备份容灾的目的。
    ceph osd pool create backups 128


  • 安装Ceph相关包
    • 在glance-api的主机上安装python-rbd包

      yum install python-rbd


    • 在nova-compute、cinder-volume、cinder-backup节点上安装ceph-common包

      yum install ceph-common

      安装完ceph包之后,需要将ceph集群的ceph.conf copy到所有client端。

    • 如果在Ceph的配置中打开了auth认证,就需要做如下的操作;如果Ceph中的auth都是设置的none,也就是关闭的话,可以不做如下操作。


      • 在ceph中创建了cinder、glance等用户,并做了权限控制

        ceph auth get-or-create client.cinder mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=volumes, allow rwx pool=vms, allow rx pool=images'
        ceph auth get-or-create client.glance mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=images'
        ceph auth get-or-create client.cinder-backup mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=backups'


      • 将上面生成的keyring文件,保存在相应的节点上,并修改为相应的权限

        // 注意替换所有的server为相应的主机名
        ceph auth get-or-create client.glance | ssh {glance-api-server} sudo tee /etc/ceph/ceph.client.glance.keyring
        ssh {glance-api-server} sudo chown glance:glance /etc/ceph/ceph.client.glance.keyring
        ceph auth get-or-create client.cinder | ssh {cinder-volume-server} sudo tee /etc/ceph/ceph.client.cinder.keyring
        ssh {cinder-volume-server} sudo chown cinder:cinder /etc/ceph/ceph.client.cinder.keyring
        ceph auth get-or-create client.cinder-backup | ssh {cinder-backup-server} sudo tee /etc/ceph/ceph.client.cinder-backup.keyring
        ssh {cinder-backup-server} sudo chown cinder:cinder /etc/ceph/ceph.client.cinder-backup.keyring


      • 在nova-compute节点上保存和cinder-volume相同的keyring

        ceph auth get-or-create client.cinder | ssh {nova-compute-server} sudo tee /etc/ceph/ceph.client.cinder.keyring


      • 在libvirt上添加secret key

        // 获取cinder keyring,并保存到一个临时文件中
        ceph auth get-key client.cinder | ssh {nova-compute-node} tee client.cinder.key
        
        // 生成一个UUID
        uuidgen
        457eb676-33da-42ec-9a8c-9293d545c337
        
        // 修改secret.xml文件,注意替换下面的uuid
        cat > secret.xml <<EOF
        <secret ephemeral='no' private='no'>
          <uuid>457eb676-33da-42ec-9a8c-9293d545c337</uuid>
          <usage type='ceph'>
            <name>client.cinder secret</name>
          </usage>
        </secret>
        EOF
        
        sudo virsh secret-define --file secret.xml
        Secret 457eb676-33da-42ec-9a8c-9293d545c337 created
        
        // 设置libvirt的secret key,并删除之前的key临时文件
        sudo virsh secret-set-value --secret 457eb676-33da-42ec-9a8c-9293d545c337 --base64 $(cat client.cinder.key) && rm client.cinder.key secret.xml


    • 在三大模块中增加ceph相关配置
      • Glance配置

        // 在/etc/glance/glance-api.conf中添加如下:
        
        // 在DEFAULT域中增加:
        [DEFAULT]
        default_store = rbd
        
        // 在glance_store域中增加如下,如果没有glance_store域,直接创建:
        [glance_store]
        stores = rbd
        rbd_store_pool = images
        rbd_store_user = glance
        rbd_store_ceph_conf = /etc/ceph/ceph.conf
        rbd_store_chunk_size = 8


      • Cinder配置

        // 在/etc/cinder/cinder.conf中添加如下:
        
        // 在DEFAULT域中增加:
        [DEFAULT]
        enabled_backends = ceph
        
        // 在ceph域中增加如下,如果没有ceph域,直接创建:
        [ceph]
        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
        
        // 如果使用了ceph auth,还需增加:
        rbd_user = cinder
        rbd_secret_uuid = 457eb676-33da-42ec-9a8c-9293d545c337


      • Cinder-backup配置

        // 在/etc/ceph/ceph.conf中添加如下:
        backup_driver = cinder.backup.drivers.ceph
        backup_ceph_conf = /etc/ceph/ceph.conf
        backup_ceph_user = cinder-backup
        backup_ceph_chunk_size = 134217728
        backup_ceph_pool = backups
        backup_ceph_stripe_unit = 0
        backup_ceph_stripe_count = 0
        restore_discard_excess_bytes = true


      • Nova配置

        // 在/etc/nova/nova.conf中添加如下:
        [libvirt]
        images_type = rbd
        images_rbd_pool = vms
        images_rbd_ceph_conf = /etc/ceph/ceph.conf
        rbd_user = cinder
        rbd_secret_uuid = 457eb676-33da-42ec-9a8c-9293d545c337
        disk_cachemodes="network=writeback"


      • 重启glance-api、nova-compute、cinder-volume、cinder-backup服务

参考

http://docs.ceph.com/docs/jewel/rbd/rbd-openstack/



版权声明:本文为博主原创文章,未经博主允许不得转载。

openstack连接ceph不成功解决

现象openstack集成ceph过程中出现rbd和rados连接ceph成功,但是openstack连接不成功。原因我配置的ceph使用了admin用户进行连接ceph没有建立用户,可能是权限限制。...
  • cnsword
  • cnsword
  • 2016年06月24日 17:24
  • 6291

配置Ceph为openstack后端

给nova,cinder-volume/cinder-backup,glance配置Ceph作为后端。
  • youyume20
  • youyume20
  • 2016年01月24日 17:32
  • 3000

使用Ceph作为OpenStack的后端存储

概述         libvirt配置了librbd的QEMU接口,通过它可以在OpenStack中使用Ceph块存储。Ceph块存储是集群对象,这意味着它比独立的服务器有更好的性能。      ...
  • ztsinghua
  • ztsinghua
  • 2016年06月24日 16:28
  • 1871

如何安装Ceph并对接OpenStack

如何安装Ceph并对接OpenStack安装Ceph准备工作: 关闭SELinux sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selin...
  • Tomstrong_369
  • Tomstrong_369
  • 2016年11月25日 09:22
  • 3190

Rancher如何对接Ceph-RBD块存储

在Ceph支持的三种接口中,块存储(Librdb)是目前最稳定且达到生产环境要求的接口。本文将step by step向你演示如何将Rancher与Ceph-RBD块存储对接。...
  • RancherLabs
  • RancherLabs
  • 2017年08月04日 10:24
  • 292

OpenStack Days China 2016 UMCloud朱荣泽 &amp; 任家英:深入理解Ceph RGW对象存储

  • 2016年07月18日 17:25
  • 1.67MB
  • 下载

问题:H版Cinder对接Ceph,把备份卷恢复到源卷报错

一、问题现象 Cinder是H版代码,对接的存储是Ceph。 使用cinder命令可以成功创建数据卷并备份数据卷。 但是,使用cinder backup-restore命令恢复数据卷时,如果指定...
  • i_chips
  • i_chips
  • 2014年06月27日 16:23
  • 1951

OpenStack Ceph and Containers

  • 2015年05月26日 21:01
  • 706KB
  • 下载

OpenStack与Ceph的整合

  • 2014年05月29日 14:08
  • 4.12MB
  • 下载

Ceph 整合OpenStack

  • 2017年11月19日 16:50
  • 514KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Ceph对接Openstack
举报原因:
原因补充:

(最多只允许输入30个字)