Openstack 之使用外部ceph存储

 

上面左边是我的个人微信,如需进一步沟通,请加微信。  右边是我的公众号“Openstack私有云”,如有兴趣,请关注。

继上篇《Ceph 之 块设备、文件系统、对象存储的使用》,可以独立于openstack单独部署一套ceph集群,给openstack使用,这样openstack本身部署的时候不要启用ceph,在使用块设备的相关组建上配置使用外部ceph集群,可以有更灵活的架构选择,比如虚拟机nova块设备使用一个快速固态硬盘存储池,cinder-backup卷备份使用慢速硬盘存储池,这样对隔离故障域也很有好处。本次实验使用如下环境:

ceph集群环境:

系统centos7.4

ceph版本 ceph version 10.2.10

测试服务器为kvm虚拟机(openstack虚拟机)

ceph集群服务器分配如下:


节点 服务 cluster network
ceph-1(admin-node) osd.{1,2,},mon.ceph-1 eth0:192.168.1.161/24
ceph-2 osd.{3,4},mon.ceph-2 eth0:192.168.1.162/24
ceph-3 osd.{5,6},mon.ceph-3 eth0:192.168.1.163/24


ceph每个节点在原来系统盘的基础上增加2块osd盘/dev/vdb 、/dev/vdc,集群共有6个osd进程,3个monitor进程。管理节点用作执行ceph-deploy命令,使用ceph-1节点充当。

Openstack集群环境:

系统centos7.3

Openstack版本 Ocata 4.0.2.1

Openstack集群服务器分配如下:

节点 服务 IP
control01 control+compute+network 192.168.1.121
control02 control+compute+network 192.168.1.122
control03 control+compute+network 192.168.1.123

节点control01-control03作为ceph集群的使用者(client),同一个局域网。

操作思路:

首先找到Opesntack官网中关于使用Kolla部署外部ceph的操作方法:

https://docs.openstack.org/kolla-ansible/latest/reference/external-ceph-guide.html#requirements

主要的思路是:

1、在ceph集群中创建相应的pool:

a、创建rbd块设备的pool池“vms”作为nova虚拟机使用的存储池;

b、创建rbd块设备的pool池“images” 作为glance镜像的存储池;

c、创建rbd块设备的pool池“volumes” 作为cinder的存储池;

d、创建rbd块设备的pool池“backups” 作为cinder卷备份的存储池;

2、修改kolla全局配置文件globals.yml,关闭openstack自身的ceph存储,打开nova、glance、cinder、cinder-backup等组件使用ceph的开关;

3、配置外部ceph,使用kolla的合并配置特性,对相应的组件的ceph存储pool池进行配置;

4、使用kolla-ansible deploy 重新部署;

操作步骤:

    1、在ceph集群中创建相应的pool:

    ceph osd pool create images 128
    ceph osd pool create volumes 128
    ceph osd pool create backups 128
    ceph osd pool create vms 128

2、在ceph集群中创建nova、glance、cinder、cinder-backup等组件使用ceph的用户并生产keyring文件,在ceph-1服务器中执行:

cd /etc/ceph/
ceph auth get-or-create client.cinder mon 'allow r' osd 'allow object_prefix rbd_children, allow rwx pool=volumes, allow rwx pool=vms, allow rx pool=images' -o ceph.client.cinder.keyring
ceph auth get-or-create client.glance mon 'allow r' osd 'allow object_prefix rbd_children, allow rwx pool=images'  -o ceph.client.glance.keyring
ceph auth get-or-create client.cinder-backup mon 'allow r' osd 'allow object_prefix rbd_children, allow rwx pool=backups, allow rwx pool=volumes'  -o ceph.client.cinder-backup.keyring
ceph auth get-or-create client.nova mon 'allow r' osd 'allow object_prefix rbd_children, allow rwx pool=vms, allow rwx pool=volumes, allow rx pool=images'  -o ceph.client.nova.keyring
//小提示:如果有参考系统,比如其他正常运行的平台,可以使用ceph auth get <ceph用户名> 进行查询,可以比较确切的指导具体的参数。另外,如果上面的参数需要修改,只需要修改相关参数之后重新执行即可。

拷贝ceph-1上/etc/ceph 目录下的文件ceph.conf 和 ceph.client.glance.keyring 文件到/etc/kolla/config/glance/目录下,kolla在部署的时候会将这个目录下ceph.*拷贝到对应容器的/etc/ceph/目录下。

scp /etc/ceph/{ceph.conf,ceph.client.glance.keyring} control01://etc/kolla/config/glance/

拷贝ceph-1上/etc/ceph 目录下的文件ceph.conf 和 ceph.client.cinder.keyring 文件到/etc/kolla/config/cinder/cinder-volume/以及/etc/kolla/config/cinder/cinder-backup/目录下,kolla在部署的时候会将这个目录下ceph.*拷贝到对应容器的/etc/ceph/目录下。

scp /etc/ceph/{ceph.conf,ceph.client.cinder.keyring} control01://etc/kolla/config/cinder/cinder-volume/
scp /etc/ceph/{ceph.conf,ceph.client.cinder.keyring} control01://etc/kolla/config/cinder/cinder-backup/

拷贝ceph-1上/etc/ceph 目录下的文件 ceph.client.cinder-backup.keyring 文件到/etc/kolla/config/cinder/cinder-backup目录下,kolla在部署的时候会将这个目录下ceph.*拷贝到对应容器的/etc/ceph/目录下。

scp /etc/ceph/ceph.client.cinder-backup.keyring control01://etc/kolla/config/cinder/cinder-backup/

拷贝ceph-1上/etc/ceph 目录下的文件ceph.conf 和 ceph.client.nova.keyring文件以及ceph.client.cinder.keyring 到/etc/kolla/config/nova/目录下,kolla在部署的时候会将这个目录下ceph.*拷贝到对应容器的/etc/ceph/目录下。

scp /etc/ceph/{ceph.conf,ceph.client.nova.keyring,ceph.client.cinder.keyring} control01://etc/kolla/config/nova/
//注意,官网上没有要求拷贝ceph.client.cinder.keyring 这个文件,但是在部署的过程中要求这个文件。

3、修改kolla全局配置文件/etc/kolla/globals.yml,关闭openstack自身的ceph存储,打开nova、glance、cinder、cinder-backup等组件使用ceph的开关;

    enable_ceph: "no"    //关闭openstack自身的ceph存储
    glance_backend_ceph: "yes" 
    cinder_backend_ceph: "yes"
    nova_backend_ceph: "yes"

4、配置外部ceph,使用kolla的合并配置特性,对相应的组件的ceph存储pool池进行配置;

a、glance的配置,增加文件/etc/kolla/config/glance/glance-api.conf,内容如下:

[glance_store]
stores = rbd
default_store = rbd
rbd_store_pool = images
rbd_store_user = glance //这是第2步创建的用户glance 
rbd_store_ceph_conf = /etc/ceph/ceph.conf

b、cinder的配置,增加文件/etc/kolla/config/cinder/cinder-volume.conf,内容如下:

[DEFAULT]
enabled_backends=rbd-1
[rbd-1]
rbd_ceph_conf=/etc/ceph/ceph.conf
rbd_user=cinder  //这是第2步创建的cinder用户
backend_host=rbd:volumes
rbd_pool=volumes
volume_backend_name=rbd-1
volume_driver=cinder.volume.drivers.rbd.RBDDriver
rbd_secret_uuid=02d41563-5fe7-442a-ada5-3bf508e5e8b1  //注意:cinder_rbd_secret_uuid 可以在 /etc/kolla/passwords.yml 文件中找到。

c、cinder-backup的配置,增加文件/etc/kolla/config/cinder/cinder-backup.conf,内容如下:

[DEFAULT]
backup_ceph_conf=/etc/ceph/ceph.conf
backup_ceph_user=cinder-backup   //这是第2步创建的cinder-backup用户
backup_ceph_chunk_size = 134217728
backup_ceph_pool=backups
backup_driver = cinder.backup.drivers.ceph
backup_ceph_stripe_unit = 0
backup_ceph_stripe_count = 0
restore_discard_excess_bytes = true

d、nova的配置,增加文件/etc/kolla/config/nova/nova-compute.conf,内容如下:

[libvirt]
images_rbd_pool=vms
images_type=rbd
images_rbd_ceph_conf=/etc/ceph/ceph.conf
rbd_user=nova   //这是第2步创建的nova用户
disk_cachemodes = network=writeback   //官网上没有这个参数
hw_disk_discard = unmap  //官网上没有这个参数
rbd_secret_uuid = 02d41563-5fe7-442a-ada5-3bf508e5e8b1  //官网上没有这个参数

e、如果ceph集群部署的时候主机解析不是使用IP而是用主机名,需要修改openstack集群节点/etc/hosts文件,增加对ceph集群主机名的解析,例如:

control01、control02、control03节点上:
# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.121 control01
192.168.1.122 control02
192.168.1.123 control03
192.168.1.161 ceph-1
192.168.1.162 ceph-2
192.168.1.163 ceph-3

4、使用kolla-ansible deploy 重新部署;

    kolla-ansibel deploy -i <inventory file>  
    // 其中<inventory file> 用实际环境中的inventory文件替代,比如multiple或者all-in-one

总结及建议:

建议在设计之初就确定使用外部ceph存储,中途调整存储还是存在很大风险,并且还涉及到相关的镜像、虚拟机、卷的迁移。

根据官网进行操作会碰到一些坑,并且官网对于这一块描述的不是很详细,必须动手实验填坑。

对于openstack使用外部ceph对象存储这一块官网上没有介绍,直接使用内部ceph是可以很方便启用这个功能的。

上面验证完成之后,完全可以应用在生产环境上面,比如创建一个SSD固态硬盘存储池作为vms pool 给虚拟机的系统盘使用,创建一个普通SAS硬盘存储池作为volumes pool 给虚拟机的卷使用,images pool 给镜像使用,创建一个低成本慢速大容量SATA盘存储池作为backups pool 给cinder-backup备份卷使用。

对于在一台ceph集群物理服务器上同时有SSD固态硬盘、SAS盘、SATA盘,需要根据不同类型的盘划分pool的方法,可以在创建OSD的时候进行ruleset的归类,当创建pool的时候,指定ruleset参数就能够使用不同类型盘的目的了。

原文地址:http://blog.51cto.com/yuweibing/2125082

时间: 2024-07-31 14:28:06

Openstack 之使用外部ceph存储的相关文章

openstack 利用ceph存储之---备份还原虚拟机

本次环境为openstack K版本.ceph 版本为0.94.5 我们的虚拟机都是建立在ceph中的. 备份虚拟机: 打开openstack控制台,点击要备份的虚拟机: 获取虚拟机的id信息: 在控制节点获取,虚拟机对应的ceph中的volume id [[email protected] ceph]# nova show 1d77b49b-4263-477e-acc8-4242a3a998b3 [[email protected] ceph]# rbd ls volumes | grep 2

OpenStack Kilo版加CEPH部署手册

OpenStack Kilo版加CEPH部署手册 作者: yz联系方式: QQ: 949587200日期: 2015-7-13版本: Kilo 转载地址: http://mp.weixin.qq.com/s__biz=MzAxOTAzMDEwMA==&mid=209225237&idx=1&sn=357afdabafc03e8fb75eb4e1fb9d4bf9&scene=5&ptlang=2052&ADUIN=724042315&ADSESSION

Openstack对接两套Ceph

环境说明openpstack-Pike对接cephRBD单集群,配置简单,可参考openstack官网或者ceph官网:1.Openstack官网参考配置:https://docs.openstack.org/cinder/train/configuration/block-storage/drivers/ceph-rbd-volume-driver.html2.Ceph官网参考配置:https://docs.ceph.com/docs/master/install/install-ceph-d

数据存储——手机外部文件存储

一.特点 1.把文件存储在手机外部存储空间(SD卡)里 2.存储的是任意类型的文件 3.使用IO输入输出流操作文件 4.文件路径 1-SD卡根目录/Android/data/包名/files/[ 文件类型],应用卸载后,数据同时被删除: 2-SD卡根目录/,应用卸载之后,数据不会被同时删除. 5.需要声明权限 1-android.permission.WRITE_EXTERNAL_STORAGE,写入文件: 2-MOUNT_UNMOUNT_FILESYSTEMS,创建和删除文件. 二.API 1

External Configuration Store Pattern 外部配置存储模式

Move configuration information out of the application deployment package to a centralized location. This pattern can provide opportunities for easier management and control of configuration data, and for sharing configuration data across applications

手机外部文件存储(SD卡存储)

package com.atguigu.l04_datastorage; import java.io.ByteArrayOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException; import android.app.Activity;

解析CEPH: 存储引擎实现之一 filestore

Ceph作为一个高可用和强一致性的软件定义存储实现,去使用它非常重要的就是了解其内部的IO路径和存储实现.这篇文章主要介绍在IO路径中最底层的ObjectStore的实现之一FileStore. ObjectStore ObjectStore是Ceph OSD中最重要的概念之一,它封装了所有对底层存储的IO操作.从上图中可以看到所有IO请求在Clieng端发出,在Message层统一解析后会被OSD层分发到各个PG,每个PG都拥有一个队列,一个线程池会对每个队列进行处理. 当一个在PG队列里的I

ceph存储之ceph客户端

CEPH客户端: 大多数Ceph用户不会直接往Ceph存储集群里存储对象,他们通常会选择Ceph块设备.Ceph文件系统.Ceph对象存储之中的一个或多个: 块设备: 要实践本手册,你必须先完成存储集群入门 ,并确保 Ceph 存储集群处于 active + clean 状态,这样才能使用 Ceph 块设备. 1.在ceph-client安装ceph,在管理节点上,通过ceph-deploy把Ceph安装到ceph-client节点: ceph-deploy  install ceph-clie

云计算设计模式(八)——外部配置存储模式

云计算设计模式(八)--外部配置存储模式 移动配置信息从应用部署包到一个集中位置.这个模式可以提供机会,以便管理和配置数据的控制,以及用于跨应用程序和应用程序实例共享的配置数据. 背景和问题 大多数应用程序运行时环境包括位于应用程序文件夹内的在部署应用程序文件保持配置信息.在某些情况下也能够编辑这些文件来改变该应用程序的行为,它已经被部署之后.然而,在许多情况下,改变配置所需要的应用程序被重新部署,从而导致不可接受的停机时间和额外的管理开销. 本地配置文件还配置限制为单个应用程序,而在某些情况下