0。背景html
OpenStack 中的实例是不能持久化的,cinder服务重启,实例消失。若是须要挂载 volume,须要在 volume 中实现持久化。Cinder提供持久的块存储,目前仅供给虚拟机挂载使用。它并无实现对块设备的管理和实际服务,而是为后端不一样的存储结构提供了统一的接口,不一样的块设备服务厂商在 Cinder 中实现其驱动支持以与 OpenStack 进行整合。它经过整合后端多种存储,用API接口为外界提供存储服务。主要核心是对卷的管理,容许都卷、类型和快照进行处理。node
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等python
对于本地存储,cinder-volume 默认使用 LVM 驱动,该驱动当前的实现须要在主机上事先用 LVM 命令建立一个的卷组 , 当该主机接受到建立卷请求的时候,cinder-volume 在该卷组 上建立一个逻辑卷, 而且用 openiscsi 将这个卷看成一个 iscsi tgt 给输出.还能够将若干主机的本地存储用 sheepdog 虚拟成一个共享存储,而后使用 sheepdog 驱动。sql
1. Cinder LVM配置
在cinder配置文件中,默认的backend lvmdriver是经过LVM来使用某个cinder volume服务所在的服务器的本地存储:shell
[lvmdriver-1] volume_group = stack-volumes-lvmdriver-1 volume_driver = cinder.volume.drivers.lvm.LVMISCSIDriver volume_backend_name = lvmdriver-1
若是名字为stack-volumes-lvmdriver-1的volume group不存在,建立volume后其状态将为error,在cinder c-vol日志中可看到以下错误:ubuntu
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:session
root@dev:/home/s1# lvdisplay /dev/stack-volumes-lvmdriver-1/volume-02f986b0-418f-4f84-a5ec-7af61f5d5293 --- Logical volume --- LV Name /dev/stack-volumes-lvmdriver-1/volume-02f986b0-418f-4f84-a5ec-7af61f5d5293 VG Name stack-volumes-lvmdriver-1 LV UUID 9oESr2-4V7f-qp22-F5te-hF2v-DWoy-EshtnN LV Write Access read/write LV Status available # open 0 LV Size 1.00 GiB Current LE 256 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 252:0
4. 使用多个backend/添加新的LVM backendapp
(1)建立新的volume group vg3
(1)修改cinder.conf,添加下面行:
enabled_backends=lvmdriver-1,lvmdriver-2 [lvmdriver-2] 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-7614-4a63-ba33-924d65765534 | type-test| +--------------------------------------+---------------+
(4) 设置volume type的backend name
cinder type-key type-test set volume_backend_name=lvmdriver4vg3
注意:
(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=4488) _check_effective_sql_mode /usr/local/lib/python2.7/dist-packages/oslo/db/sqlalchemy/session.py:509 Binary Host Zone Status State Updated At cinder-scheduler dev nova enabled :-) 2014-12-12 16:11:54 cinder-volume dev@lvmdriver-1 nova enabled :-) 2014-12-12 16:11:56
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 命令。