易陆发现互联网技术论坛

 找回密码
 开始注册
查看: 5033|回复: 0
收起左侧

学习OpenStack之 (2):Cinder LVM 配置

[复制链接]
发表于 2016-12-20 20:37:55 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?开始注册

x
0。背景
openstack 中的实例是不能持久化的,cinder服务重启,实例消失。如果需要挂载 volume,需要在 volume 中实现持久化。Cinder提供持久的块存储,目前仅供给虚拟机挂载使用。它并没有实现对块设备的管理和实际服务,而是为后端不同的存储结构提供了统一的接口,不同的块设备服务厂商在 Cinder 中实现其驱动支持以与 OpenStack 进行整合。它通过整合后端多种存储,用API接口为外界提供存储服务。主要核心是对卷的管理,允许都卷、类型和快照进行处理。
Cinder存储分为本地块存储、分布式块存储和SAN存储等多种后端存储类型:! Z3 k% }: G' y/ m
1. 本地存储: 默认通过LVM支持Linux$ {, L; R  B* A0 U- _/ c/ Z9 {
2. SAN存储:. s' s. W9 T, s0 o# V! {3 H
    (1)通过NFS协议支持NAS存储,比如Netapp
' _2 H3 @/ c& g. e/ u/ u    (2)通过添加不同厂商的制定driver来为了支持不同类型和型号的商业存储设备,比如EMC,IBM的存储。 在https://wiki.openstack.org/wiki/CinderSupportMatrix可以看到所支持的厂商存储列表。
0 s$ `4 C: R6 D: u) o+ _3. 分布式系统:支持sheepdog,ceph,和IBM的GPFS等
对于本地存储,cinder-volume 默认使用 LVM 驱动,该驱动当前的实现需要在主机上事先用 LVM 命令创建一个的卷组 , 当该主机接受到创建卷请求的时候,cinder-volume 在该卷组 上创建一个逻辑卷, 并且用 openiscsi 将这个卷当作一个 iscsi tgt 给输出.还可以将若干主机的本地存储用 sheepdog 虚拟成一个共享存储,然后使用 sheepdog 驱动。
1. Cinder LVM配置
: g: ^$ R( ]( C; T6 q/ q* H, N在cinder配置文件中,默认的backend lvmdriver是通过LVM来使用本地存储:
[lvmdriver-1]
* h1 K0 C1 V( ]: B( O" Q+ bvolume_group = stack-volumes-lvmdriver-1( H+ k0 \* S' h! h. K# @
volume_driver = cinder.volume.drivers.lvm.LVMISCSIDriver/ q; `9 c! ^: p0 |' l( q
volume_backend_name = lvmdriver-1
  • volume_group 指定Cinder使用的 volume group。在devstack默认安装时其名称是stack-volumes-lvmdriver-1;在实际部署cinder的时候其默认名称是cinder-volumes。
  • volume_driver 指定driver类型. Cinder目前支持两种传输协议, iSCSI and iSER。/ f$ V, y4 f, ]! D) f7 L4 ?& n# _
    • iSCSI的话,将其值设为 cinder.volume.drivers.lvm.LVMISCSIDriver;
    • iSER的话,将其值设为 cinder.volume.drivers.lvm.LVMISERDriver。
      8 u+ I0 N' v) ~
      3 l# r2 a6 w# n  }" T; _- A4 A9 NLVM是cinder.volume.drivers.lvm.LVMISCSIDriver
      % r; @( _, h+ L/ C7 h* E% L/ n
  • volume_backend_name 是backend name,在创建volume的时候可选择。
    2 r% s2 h( d+ b- Z0 P5 N; M! ]

3 B3 {4 j2 E- K( ~7 u4 ?/ C1 a                               
登录/注册后可看大图
如果名字为stack-volumes-lvmdriver-1的volume group不存在,创建volume后其状态将为error,在cinder c-vol日志中可看到如下错误:
Exception during message handling: Unexpected error while running command.- }; s9 ~1 M1 l' s
Command: None, P. ^: c$ {4 R8 B% L0 _& l  [: ~
Exit code: -
3 a9 z2 u8 k3 y. w' t: oStdout: 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\''  H3 ?3 H( \1 D! Z* i, _
Stderr: None
可参考我的博文http://www.cnblogs.com/sammyliu/p/4157491.html来配置LVM。
3. Cinder使用LVM
成功创建一个Cinder volume后,可以在VG中看到新创建的logical volume:

% m; Y4 z& f7 L& W& v2 {                               
登录/注册后可看大图
root@dev:/home/s1# lvdisplay /dev/stack-volumes-lvmdriver-1/volume-02f986b0-418f-4f84-a5ec-7af61f5d5293: [: C, S$ p" [9 |
--- Logical volume ---* f! u& R) V: |/ G4 A" t
LV Name /dev/stack-volumes-lvmdriver-1/volume-02f986b0-418f-4f84-a5ec-7af61f5d5293
8 K  C: z$ q2 d! g1 @VG Name stack-volumes-lvmdriver-1! |- i2 l4 x% n2 F  b. l  E5 J
LV UUID 9oESr2-4V7f-qp22-F5te-hF2v-DWoy-EshtnN+ _; h; m0 U: o8 U4 |* E
LV Write Access read/write
1 l: T: g9 k+ X2 j1 |4 X6 {LV Status available7 ~& G! [1 m0 f' K' W
# open 0
7 |5 }  ^5 Y2 x6 y: H4 h) ^LV Size 1.00 GiB2 B  @* R7 A9 s5 ~/ b
Current LE 256
& [: F! _! d9 J1 BSegments 1: m1 a1 I* d3 M! S% A: J) O# Z
Allocation inherit
& H) a' Z" ]! ?" \2 n- _Read ahead sectors auto
9 n3 I3 v8 N9 f+ k- currently set to 2563 |/ |1 z: p4 H1 }4 O
Block device 252:0
4. 使用多个backend/添加新的LVM backend
(1)创建新的volume group vg3
(1)修改cinder.conf,添加下面行:

7 e" U8 W+ H/ ~: M  G
enabled_backends=lvmdriver-1,lvmdriver-2

) W* C# ?3 _% m4 \3 |. Z" q% r$ U
[lvmdriver-2]7 l' Y3 k0 p" \6 |# o
volume_group = vg3: r" i" t3 a7 x1 a/ n
volume_driver = cinder.volume.drivers.lvm.LVMISCSIDriver
% R* N! F" S( J9 m2 Y9 U4 kvolume_backend_name = lvmdriver4vg3
注意: cinder-volume服务不监控该配置文件,除了在启动的时候读取该文件以外。因为在修改该文件后你需要重启该服务:`service cinder-volume restart`.
(3)创建新的的volume type type-test
s1@dev:~/devstack$ cinder type-create type-test
) ]% ]9 d3 Z0 C: i/ [* K2 q+--------------------------------------+---------------+
0 d: Q$ O. M0 |/ V7 G| ID | Name |7 A2 o! h% z4 k7 H2 d. K* F
+--------------------------------------+---------------+, F3 ~" \/ i# w6 @! T" d
| 764480d1-7614-4a63-ba33-924d65765534 | type-test|
: s3 s( b0 k( Z2 I/ f1 \! g+--------------------------------------+---------------+
(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了。
    8 F4 p# J: Z" K7 ^
(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
. D  `( r$ y( c. Q$ {% v6 m( @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, F/ Q. o6 b9 ~8 ]" |- X; k0 h
Binary           Host                                 Zone             Status     State Updated At/ t8 |0 G7 S& f* m' ^9 L6 S# C
cinder-scheduler dev                                  nova             enabled    :-)   2014-12-12 16:11:54
: \. Z3 N/ e6 ^( Ncinder-volume    dev@lvmdriver-1                      nova             enabled    :-)   2014-12-12 16:11:56
$ F3 W% s8 E1 m5 k
原因:cinder-volume的host少了一个对应第二个vg的一个。应该是添加第二个backend后配置没生效。6 K- T8 _' o) c; n1 J1 k, K% c" j
解决:按照先后顺序重启 cinder-scheduler 和 cinder-volume 服务。创建volume错误消失。
# d' J, x" i, n(2) Volume一直处于creating状态。cinder-volume log中有如下错误:
8 j6 E( [3 A" [5 d2 e4 ^1 Q: i
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的版本一致。
[size=1em]
1
: E! S& o& Q; J, H+ J: R2 i& v
apt-get install package=version 命令。
! g- [" _4 d: N' o, o$ _( _  K' I! D/ _$ w5 m
# a  D, _5 K4 B5 c% L: g
5 y3 b! c9 Y6 Q- L2 [  ^. j

3 w9 z9 p# b# ~. l& {9 B; K; J: c; B- _
您需要登录后才可以回帖 登录 | 开始注册

本版积分规则

关闭

站长推荐上一条 /4 下一条

北京云银创陇科技有限公司以云计算运维,代码开发

QQ|返回首页|Archiver|小黑屋|易陆发现技术论坛 ( 蜀ICP备2026014127号-1 )点击这里给我发消息

GMT+8, 2026-4-9 01:43 , Processed in 0.058731 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

© 2012-2025 Discuz! Team.

快速回复 返回顶部 返回列表