0。背景

OpenStack 中的实例是不能持久化的,cinder服务重启,实例消失。如果需要挂载 volume,需要在 volume 中实现持久化。Cinder提供持久的块存储,目前仅供给虚拟机挂载使用。它并没有实现对块设备的管理和实际服务,而是为后端不同的存储结构提供了统一的接口,不同的块设备服务厂商在 Cinder 中实现其驱动支持以与 OpenStack 进行整合。它通过整合后端多种存储,用API接口为外界提供存储服务。主要核心是对卷的管理,允许都卷、类型和快照进行处理。

Cinder存储分为本地块存储、分布式块存储和SAN存储等多种后端存储类型:
1. 本地存储: 默认通过LVM支持Linux。cinder volume 将该服务所在的节点变为存储节点,将上面的 volume group 作为共享存储池暴露给计算节点。
2. SAN存储:
    (1)通过NFS协议支持NAS存储,比如Netapp
    (2)通过添加不同厂商的制定driver来为了支持不同类型和型号的商业存储设备,比如EMC,IBM的存储。 在 https://wiki.openstack.org/wiki/CinderSupportMatrix可以看到所支持的厂商存储列表。
3. 分布式系统:支持sheepdog,ceph,和IBM的GPFS等

对于本地存储,cinder-volume 默认使用 LVM 驱动,该驱动当前的实现需要在主机上事先用 LVM 命令创建一个的卷组 , 当该主机接受到创建卷请求的时候,cinder-volume 在该卷组 上创建一个逻辑卷, 并且用 openiscsi 将这个卷当作一个 iscsi tgt 给输出.还可以将若干主机的本地存储用 sheepdog 虚拟成一个共享存储,然后使用 sheepdog 驱动。

1. Cinder LVM配置
在cinder配置文件中,默认的backend lvmdriver是通过LVM来使用某个cinder volume服务所在的服务器的本地存储:

  1. [lvmdriver-]
  2. volume_group = stack-volumes-lvmdriver-
  3. volume_driver = cinder.volume.drivers.lvm.LVMISCSIDriver
  4. volume_backend_name = lvmdriver-
  • volume_group 指定Cinder使用的 volume group。在devstack默认安装时其名称是stack-volumes-lvmdriver-1;在实际部署cinder的时候其默认名称是cinder-volumes。
  • volume_driver 指定driver类型. Cinder目前支持两种传输协议, iSCSI and iSER。
    • iSCSI的话,将其值设为 cinder.volume.drivers.lvm.LVMISCSIDriver;
    • iSER的话,将其值设为 cinder.volume.drivers.lvm.LVMISERDriver。 

      LVM是cinder.volume.drivers.lvm.LVMISCSIDriver

  • volume_backend_name 指定backend name。当有多个 volume backend 时,需要创建 volume type,它会绑定一个或者多个backend。用户在创建 volume 时需要选择某个 volume type,相当于选择了某个 volume backend。要这个参数的原因是因为一个openstack环境中可能有多个 cinder-volume 存储节点,此时就有多个 volume backend,此时就需要给每个backend 一个 name 来区分。

如果名字为stack-volumes-lvmdriver-1的volume group不存在,创建volume后其状态将为error,在cinder c-vol日志中可看到如下错误:

  1. Exception during message handling: Unexpected error while running command.
  2. Command: None
  3. Exit code: -
  4. Stdout: u'Unexpected error while running command.\nCommand: sudo cinder-rootwrap /etc/cinder/rootwrap.conf lvcreate -n volume-f3aef3b9-1a71-41d4-956e-a00044544b74 stack-volumes-lvmdriver-1 -L 1g\nExit code: 5\nStdout: u\'\'\nStderr: u\' Volume group "stack-volumes-lvmdriver-1" not found\\n\''
  5. Stderr: None

可参考我的博文http://www.cnblogs.com/sammyliu/p/4157491.html来配置LVM。

3. Cinder使用LVM

成功创建一个Cinder volume后,可以在VG中看到新创建的logical volume:

  1. root@dev:/home/s1# lvdisplay /dev/stack-volumes-lvmdriver-/volume-02f986b0-418f-4f84-a5ec-7af61f5d5293
  2. --- Logical volume ---
  3. LV Name /dev/stack-volumes-lvmdriver-/volume-02f986b0-418f-4f84-a5ec-7af61f5d5293
  4. VG Name stack-volumes-lvmdriver-
  5. LV UUID 9oESr2-4V7f-qp22-F5te-hF2v-DWoy-EshtnN
  6. LV Write Access read/write
  7. LV Status available
  8. # open
  9. LV Size 1.00 GiB
  10. Current LE
  11. Segments
  12. Allocation inherit
  13. Read ahead sectors auto
  14. - currently set to
  15. Block device :

4. 使用多个backend/添加新的LVM backend

(1)创建新的volume group vg3

(1)修改cinder.conf,添加下面行:

  1. enabled_backends=lvmdriver-,lvmdriver-
  2.  
  3. [lvmdriver-]
  4. volume_group = vg3
  5. volume_driver = cinder.volume.drivers.lvm.LVMISCSIDriver
  6. volume_backend_name = lvmdriver4vg3

注意: cinder-volume服务不监控该配置文件,除了在启动的时候读取该文件以外。因为在修改该文件后你需要重启该服务:`service cinder-volume restart`.

(3)创建新的的volume type type-test

  1. s1@dev:~/devstack$ cinder type-create type-test
  2. +--------------------------------------+---------------+
  3. | ID | Name |
  4. +--------------------------------------+---------------+
  5. | 764480d1--4a63-ba33-924d65765534 | type-test|
  6. +--------------------------------------+---------------+

(4) 设置volume type的backend name

  1. cinder type-key type-test set volume_backend_name=lvmdriver4vg3

注意:

  • 只有一个backend的时候,除了配置volume group外,不需要添加别的配置信息,创建volume的时候也不需要选择volume type。
  • 当有多个backend的时候,你需要使用volume-type来将volume创建到指定的backend中。一个volume-type可以有几个backend,这时候 the capacity scheduler 会自动选择合适的backend来创建volume。
  • 如果定义了volume type,但是cinder.conf中没有定义volume backend,那么cinder scheduler将找不到有效的host来创建volume了。

(5)可以在Horizen中选择新的type  type-test来创建volume了

 5. 遇到的问题:

(1) 在选择一个volume type创建volume时失败,

症状:日志中有 No valid host was found. No weighed hosts available 错误

分析:查看volume host:

  1. s1@dev:~/devstack$ cinder-manage service list
  2. STRICT_TRANS_TABLES,STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,TRADITIONAL,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION from (pid=) _check_effective_sql_mode /usr/local/lib/python2./dist-packages/oslo/db/sqlalchemy/session.py:
  3. Binary Host Zone Status State Updated At
  4. cinder-scheduler dev nova enabled :-) -- ::
  5. cinder-volume dev@lvmdriver- nova enabled :-) -- ::
原因:cinder-volume的host少了一个对应第二个vg的一个。应该是添加第二个backend后配置没生效。
解决:按照先后顺序重启 cinder-scheduler 和 cinder-volume 服务。创建volume错误消失。
(2) Volume一直处于creating状态。cinder-volume log中有如下错误:
  1. Returning exception create_volume() got an unexpected keyword argument 'source_replicaid' to caller

原因:controller上和storage node上cinder版本不一致。

解决:在两个node上首先卸载cinder,然后执行命令 echo "deb http://ubuntu-cloud.archive.canonical.com/ubuntu"  "trusty-updates/juno main" > /etc/apt/sources.list.d/cloudarchive-juno.list,再安装cinder。确认cinder的版本一致。

  1. apt-get install package=version 命令。

学习OpenStack之 (2):Cinder LVM 配置的更多相关文章

  1. Openstack块存储cinder安装配置

    openstack service create --name cinderv2 \ --description "OpenStack Block Storage" volumev ...

  2. openstack搭建之-cinder配置(12)

    一. base节点配置 mysql -u root -proot CREATE DATABASE cinder; GRANT ALL PRIVILEGES ON cinder.* TO 'cinder ...

  3. 零基础学习openstack【完整中级篇】及openstack资源汇总

    1.你是如何学习openstack的?2.你对openstack的组件了解多少?3.你认为openstack该如何学习? 一直想写关于openstack的方面的内容,今天终于整理完成.算是完成一桩心事 ...

  4. 学习openstack(八)

      一.OpenStack初探 1.1 OpenStack简介 OpenStack是一整套开源软件项目的综合,它允许企业或服务提供者建立.运行自己的云计算和存储设施.Rackspace与NASA是最初 ...

  5. 学习openstack(三)

      一.OpenStack初探 1.1 OpenStack简介 OpenStack是一整套开源软件项目的综合,它允许企业或服务提供者建立.运行自己的云计算和存储设施.Rackspace与NASA是最初 ...

  6. 学习openstack(二)

    OpenStack企业私有云实践 1.     实验架构 OpenStack我们把它当作是一个全新的"Linux"系统来学习,有的时候我们也把OpenStack称之为一个新的Lin ...

  7. 学习OpenStack之(5):在Mac上部署Juno版本OpenStack 四节点环境

    0. 前沿 经过一段时间的折腾,终于在自己的Mac上装好了Juno版本的四节点环境.这过程中,花了大量的时间,碰到了许多问题,学到不少知识,折腾过不少其实不需要折腾的东西,本文试着来对这过程做个总结. ...

  8. OpenStack 存储服务 Cinder存储节点部署NFS(十七)

    Cinder存储节点部署 1.安装软件包 yum install -y nfs-utils rpcbind 提示:早期版本安装portmap nfs-utils :包括基本的NFS命令与监控程序 rp ...

  9. 学习openstack(五)

    OpenStackOpenStack介绍OpenStack是一种免费的开源平台,帮助服务提供商实现类似于亚马逊EC2和S3的基础设施服务.OpenStack当前有三个核心项目:计算(Nova),对象存 ...

随机推荐

  1. 用事实说话,成熟的ORM性能不是瓶颈,灵活性不是问题:EF5.0、PDF.NET5.0、Dapper原理分析与测试手记

    [本文篇幅较长,可以通过目录查看您感兴趣的内容,或者下载格式良好的PDF版本文件查看] 目录 一.ORM的"三国志"    2 1,PDF.NET诞生历程    2 2,Linq2 ...

  2. C++之面向对象的三个基本特征

    三大特性是:封装,继承,多态 所谓封装 就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏.封装是面向对象的特征之一,是对象和类概念的主要特性. ...

  3. 一个ORM的实现(附源代码)

    1 前言 经过一段时间的编写,终于有出来一个稳定的版本,期间考虑了多种解决方案也偷偷学了下园子里面大神们的作品. 已经有很多的ORM框架,为什么要自己实现一个?我的原因是在遇到特殊需求时,可以在ORM ...

  4. WPF如何实现一款类似360安全卫士界面的程序?(共享源码!)

    以前学习Windows Form编程的时候,总感觉自己做的界面很丑,看到360安全卫士.迅雷等软件的UI设计都非常美观,心里总是憧憬着要是自己能实现这样的UI效果该多好!!!另一个困扰我的问题是,这个 ...

  5. 12款支持移动设备的响应式 WordPress 主题

    响应式和现代设计风格的多用途 WordPress 主题与能够非常灵活的适应所有设备.而高级主题能够更大可能性的轻松定制.所有的主题是完全响应式的,您可以从主题选项中启用响应模式. 今天,这个列表收集了 ...

  6. C++11新特性 lambda表达式

    C++11 添加了了一个名为lambda表达式的功能,可以用于添加匿名函数 语法: [capture_block](parameter) mutable exception_specification ...

  7. Windows服务器如何选 搭建WAMP环境

    Windows Server 2003 Windows Server 2008 如何选择服务器系统版本.原文地址:http://www.xwamp.com/learn/1. 系统版本: Windows ...

  8. vue单页面程序

    gitHub地址:https://github.com/lily1010/vue_singlePage 举个栗子: <!DOCTYPE html> <html> <hea ...

  9. Vault插件示例--Vault Explorer与Thin Client的集成。

    Autodesk Vault 2014的Subscription 包中有一个组件叫做Thin Client.这个瘦客户端有着全新的界面,又给了我们一个全新的选择.ThinClient实际是在Vault ...

  10. XMPP学习——3、XMPP协议学习补充

    流基础 两个基本概念,使得XMPP实体之间的小的结构化信息有效载荷能快速地进行异步交换:XML流和XML节.这些术语的定义如下. XML流的定义: XML流是一个容器,用于任何两个实体通过网络进行XM ...