学习OpenStack之 (2):Cinder LVM 配置
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服务所在的服务器的本地存储:
[lvmdriver-]
volume_group = stack-volumes-lvmdriver-
volume_driver = cinder.volume.drivers.lvm.LVMISCSIDriver
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日志中可看到如下错误:
Exception during message handling: Unexpected error while running command.
Command: None
Exit code: -
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\''
Stderr: None
可参考我的博文http://www.cnblogs.com/sammyliu/p/4157491.html来配置LVM。
3. Cinder使用LVM
成功创建一个Cinder volume后,可以在VG中看到新创建的logical volume:

root@dev:/home/s1# lvdisplay /dev/stack-volumes-lvmdriver-/volume-02f986b0-418f-4f84-a5ec-7af61f5d5293
--- Logical volume ---
LV Name /dev/stack-volumes-lvmdriver-/volume-02f986b0-418f-4f84-a5ec-7af61f5d5293
VG Name stack-volumes-lvmdriver-
LV UUID 9oESr2-4V7f-qp22-F5te-hF2v-DWoy-EshtnN
LV Write Access read/write
LV Status available
# open
LV Size 1.00 GiB
Current LE
Segments
Allocation inherit
Read ahead sectors auto
- currently set to
Block device :
4. 使用多个backend/添加新的LVM backend
(1)创建新的volume group vg3
(1)修改cinder.conf,添加下面行:
enabled_backends=lvmdriver-,lvmdriver- [lvmdriver-]
volume_group = vg3
volume_driver = cinder.volume.drivers.lvm.LVMISCSIDriver
volume_backend_name = lvmdriver4vg3
注意: cinder-volume服务不监控该配置文件,除了在启动的时候读取该文件以外。因为在修改该文件后你需要重启该服务:`service cinder-volume restart`.
(3)创建新的的volume type type-test
s1@dev:~/devstack$ cinder type-create type-test
+--------------------------------------+---------------+
| ID | Name |
+--------------------------------------+---------------+
| 764480d1--4a63-ba33-924d65765534 | type-test|
+--------------------------------------+---------------+
(4) 设置volume type的backend name
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:
s1@dev:~/devstack$ cinder-manage service list
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:
Binary Host Zone Status State Updated At
cinder-scheduler dev nova enabled :-) -- ::
cinder-volume dev@lvmdriver- nova enabled :-) -- ::
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的版本一致。
apt-get install package=version 命令。
学习OpenStack之 (2):Cinder LVM 配置的更多相关文章
- Openstack块存储cinder安装配置
openstack service create --name cinderv2 \ --description "OpenStack Block Storage" volumev ...
- openstack搭建之-cinder配置(12)
一. base节点配置 mysql -u root -proot CREATE DATABASE cinder; GRANT ALL PRIVILEGES ON cinder.* TO 'cinder ...
- 零基础学习openstack【完整中级篇】及openstack资源汇总
1.你是如何学习openstack的?2.你对openstack的组件了解多少?3.你认为openstack该如何学习? 一直想写关于openstack的方面的内容,今天终于整理完成.算是完成一桩心事 ...
- 学习openstack(八)
一.OpenStack初探 1.1 OpenStack简介 OpenStack是一整套开源软件项目的综合,它允许企业或服务提供者建立.运行自己的云计算和存储设施.Rackspace与NASA是最初 ...
- 学习openstack(三)
一.OpenStack初探 1.1 OpenStack简介 OpenStack是一整套开源软件项目的综合,它允许企业或服务提供者建立.运行自己的云计算和存储设施.Rackspace与NASA是最初 ...
- 学习openstack(二)
OpenStack企业私有云实践 1. 实验架构 OpenStack我们把它当作是一个全新的"Linux"系统来学习,有的时候我们也把OpenStack称之为一个新的Lin ...
- 学习OpenStack之(5):在Mac上部署Juno版本OpenStack 四节点环境
0. 前沿 经过一段时间的折腾,终于在自己的Mac上装好了Juno版本的四节点环境.这过程中,花了大量的时间,碰到了许多问题,学到不少知识,折腾过不少其实不需要折腾的东西,本文试着来对这过程做个总结. ...
- OpenStack 存储服务 Cinder存储节点部署NFS(十七)
Cinder存储节点部署 1.安装软件包 yum install -y nfs-utils rpcbind 提示:早期版本安装portmap nfs-utils :包括基本的NFS命令与监控程序 rp ...
- 学习openstack(五)
OpenStackOpenStack介绍OpenStack是一种免费的开源平台,帮助服务提供商实现类似于亚马逊EC2和S3的基础设施服务.OpenStack当前有三个核心项目:计算(Nova),对象存 ...
随机推荐
- fakeLoader页面加载前loading演示8种效果
提高用户体验的插件fakeLoader页面加载前loading演示8种效果 在线预览 下载地址 示例代码 <div id="main"> <div class=& ...
- 免费 PSD 下载: 20个精美的登录和注册表单
注册表单有许多不同的形状和尺寸,有的只是单个的输入框,有的则需要多个步骤.登录表单的设计将定义网站的性质,因此它应进行针对性的设计.下面的列表提供了20个醒目的登录和注册表单设计为您提供灵感. 您可能 ...
- 【NodeJS 学习笔记02】入门资源很重要
前言 在我映像中,异步最早出现与ajax,当时我还在搞.net,然后.net居然出了一个异步的控件...... 虽然我最后知道了他不是异步的......然后,前端异步用得特别多,如果不是异步的程序,你 ...
- go语言 类型:数组切片
初看起来,数组切片就像一个指向数组的指针,实际上它拥有自己的数据结构,而不仅仅是个指针.数组切片的数据结构可以抽象为以下3个变量: 1.一个指向原生数组的指针: 2.数组切片中的元素个数: 3.数组切 ...
- 关于EJB的理解
这一段时间一直在北京面试,很多都有关EJB的相关问题,于是上网查了各种资料.所以,EJB到底是什么? 简而言之:EJB就是将已编写的软件中的业务类.不放到客户端软件中,而将其打包放入服务器中.以C/S ...
- [javascript svg fill stroke stroke-width x1 y1 x2 y2 line stroke-opacity fill-opacity 属性讲解] svg fill stroke stroke-width stroke-opacity fill-opacity line绘制线条属性讲解
<!DOCTYPE html> <html lang='zh-cn'> <head> <title>Insert you title</title ...
- 关于内存泄露分析插件 MAT 的用法
关于内存泄露分析插件 MAT 的用法,建议大家有时间看一下,下面的文章 http://www.blogjava.net/rosen/archive/2010/05/21/321575.html htt ...
- KVO的底层实现
1.KVO是基于Runtime机制实现的: 2.当某个类的对象的某个属性第一次被观察时,系统会在运行期间动态地创建该类的一个派生类,在这个派生类中重写基类的任何被观察属性的setter方法,派生类在被 ...
- iOS: setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key name.
这里指抛出一个假设: 如 果你在 storyboard中, 通过 Ctrl - Drag 方式声明了一个 @property , 但你又觉得 在 Ctrl - Drag 时 ,命名的proper ...
- clang -rewrite-objc的使用点滴
➠更多技术干货请戳:听云博客 clang -rewrite-objc的作用是把oc代码转写成c/c++代码,我们常用它来窥探OC的一些秘密. 1.最简单的例子 main.m的代码如下: int mai ...