OpenStack块存储服务(cinder)为虚拟机添加持久的存储,块存储提供一个基础设施为了管理卷,以及和OpenStack计算服务交互,为实例提供卷。此服务也会激活管理卷的快照和卷类型的功能。
我使用的是openstack的Newton版本,在配置块存储节点之前,已经在控制节点安装了块存储服务,参见 官网文档。
按照官网的教程,接下来需要安装配置一个块存储节点。在安装的过程中,遇到了一些问题,通过查找资料全部解决,配置成功。本文旨在把这些问题记录下来,并梳理一下解决问题的思路。
先看官网文档的介绍:
这个部分描述怎样为块存储服务安装并配置存储节点。为简单起见,这里配置一个有一个空的本地块存储设备的存储节点。这个向导用的是 /dev/sdb
,但是你可以为你特定的节点中替换成不同的值。
该服务在这个设备上使用: LVM 提供逻辑卷,并通过:iscsi 协议提供给实例使用。您可以根据这些小的修改指导,添加额外的存储节点来增加您的环境规模。
看到这里,我们得首先说一下LVM的概念,只有理解了LVM,才能方便我们理解之后的操作。
1.什么是LVM
以下概念引自百度百科:
LVM是逻辑盘卷管理(LogicalVolumeManager)的简称,它是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和 分区之上的一个逻辑层,来提高磁盘分区管理的灵活性。
通过LVM系统管理员可以轻松管理磁盘分区,如:将若干个磁盘分区连接为一个整块的卷组 (volumegroup),形成一个存储池。管理员可以在卷组上随意创建逻辑卷组(logicalvolumes),并进一步在逻辑卷组上创建文件系统。管理员通过LVM可以方便的调整存储卷组的大小,并且可以对磁盘存储按照组的方式进行命名、管理和分配,例如按照使用用途进行定义:“development”和“sales”,而不是使用物理磁盘名“sda”和“sdb”。而且当系统添加了新的磁盘,通过LVM管理员就不必将磁盘的文件移动到新的磁盘上以充分利用新的存储空间,而是直接扩展文件系统跨越磁盘即可。
三大概念:PV、VG、LV
- 物理卷(Physical Volume,PV)—— 指磁盘分区或从逻辑上与磁盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有与LVM相关的管理参数。
- 卷组(Volume Group,VG)—— 类似于非LVM系统中的物理磁盘,其由一个或多个物理卷PV组成。可以在卷组上创建一个或多个LV(逻辑卷)。
- 逻辑卷(Logical Volume,LV)—— 类似于非LVM系统中的磁盘分区,逻辑卷建立在卷组VG之上。在逻辑卷LV之上可以建立文件系统(比如/home或者/usr等)。
简单的说,LVM可以解决分区后无法扩容的问题,在分区之上提供了物理卷、卷组和逻辑卷的概念,来帮助你更灵活地管理和利用磁盘。
了解了LVM后,我们看安装文档:
-
安装支持的工具包:
# apt-get install lvm2
-
创建LVM 物理卷
/dev/sdb
:# pvcreate /dev/sdb Physical volume "/dev/sdb" successfully created
-
创建 LVM 卷组
cinder-volumes
:# vgcreate cinder-volumes /dev/sdb Volume group "cinder-volumes" successfully created
块存储服务会在这个卷组中创建逻辑卷。
2.pvcreate命令
安装了 lvm2
包后,就要创建 LVM
物理卷,让我们来了解下 pvcreate
命令。
pvcreate
命令用于将物理硬盘分区初始化为物理卷,以便LVM使用。
语法
pvcreate(选项)(参数)
选项
-f:强制创建物理卷,不需要用户确认;
-u:指定设备的UUID;
-y:所有的问题都回答“yes”;
-Z:是否利用前4个扇区。
参数
物理卷:指定要创建的物理卷对应的设备文件名。
实例
查看磁盘信息:
[root@localhost ~]# fdisk -l
Disk /dev/hda: 41.1 GB, 41174138880 bytes
255 heads, 63 sectors/track, 5005 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks id System
/dev/hda1 * 1 13 104391 83 Linux
/dev/hda2 14 1288 10241437+ 83 Linux
/dev/hda3 1289 1925 5116702+ 83 Linux
/dev/hda4 1926 5005 24740100 5 Extended
/dev/hda5 1926 2052 1020096 82 Linux swap / Solaris
/dev/hda6 2053 2235 1469916 8e Linux LVM
/dev/hda7 2236 2418 1469916 8e Linux LVM
/dev/hda8 2419 2601 1469916 8e Linux LVM
/dev/hda9 2602 2784 1469916 8e Linux LVM
检查有无 PV 在系统上,然后将 /dev/hda6
到 /dev/hda9
建立成为PV格式:
[root@localhost ~]# pvscan
No matching physical volumes found #找不到任何的 PV 存在!
将6-9分区转成pv,注意大括号的用途:
[root@localhost ~]# pvcreate /dev/hda{6,7,8,9}
Physical volume "/dev/hda6" successfully created
Physical volume "/dev/hda7" successfully created
Physical volume "/dev/hda8" successfully created
Physical volume "/dev/hda9" successfully created
[root@localhost ~]# pvscan
PV /dev/hda6 lvm2 [1.40 GB]
PV /dev/hda7 lvm2 [1.40 GB]
PV /dev/hda8 lvm2 [1.40 GB]
PV /dev/hda9 lvm2 [1.40 GB]
Total: 4 [5.61 GB] / in use: 0 [0 ] / in no VG: 4 [5.61 GB]
……
详细参见 http://man.linuxde.net/pvcreate
这里只是了解一下 pvcreate
命令的作用,在本次安装lvm2后,我先用 pvscan
查看一下有没有PV在系统上,运行后发现错误:
/run/lvm/lvmetad.socket: connect failed:No such file or directory
3.安装过程排错
3.1 /run/lvm/lvmetad.socket: connect failed:No such file or directory
刚运行 # pvscan
就遇到了错误:
/run/lvm/lvmetad.socket: connect failed:No such file or directory
WARNING: Failed to connect to lvmetad: No such file or directory.Falling back to internal scanning.
这是什么情况呢,赶紧谷歌一下,在 这里 找到了疑似解决办法,于是赶紧试一下。
运行:
# systemctl enable lvm2-lvmetad.service
# systemctl enable lvm2-lvmetad.socket
# systemctl start lvm2-lvmetad.service
# systemctl start lvm2-lvmetad.socket
再次运行 # pvscan
,显示:
No matching physical volumes found
果然成功。
3.2 Device /dev/sdb not found (or ignored by filtering)
于是按照官网的教程运行:
# pvcreate /dev/sdb
失败,提示:Device /dev/sdb not found (or ignored by filtering)
怎么会不成功呢?按照提示,我们应该查看 /dev/sdb
是否被过滤了。什么是过滤呢?在官网安装教程中,给出了解释。
这里贴一下官网教程的中文版:
只有实例可以访问块存储卷组。不过,底层的操作系统管理这些设备并将其与卷关联。默认情况下,LVM卷扫描工具会扫描 /dev
目录,查找包含卷的块存储设备。如果项目在他们的卷上使用LVM,扫描工具检测到这些卷时会尝试缓存它们,可能会在底层操作系统和项目卷上产生各种问题。您必须重新配置LVM,让它只扫描包含 cinder-volume
卷组的设备。编辑 /etc/lvm/lvm.conf
文件并完成下面的操作:
在 devices
部分,添加一个过滤器,只接受 /dev/sdb
设备,拒绝其他所有设备:
devices {
...
filter = [ "a/sdb/", "r/.*/"]
每个过滤器组中的元素都以 a
开头,即为 accept,或以 r
开头,即为reject,并且包括一个设备名称的正则表达式规则。过滤器组必须以 ``r/.*/[]结束,过滤所有保留设备。您可以使用 命令
vgs -vvvv` 来测试过滤器。
如果您的存储节点在操作系统磁盘上使用了 LVM,您还必需添加相关的设备到过滤器中。例如,如果 /dev/sda
设备包含操作系统:
filter = [ "a/sda/", "a/sdb/", "r/.*/"]
类似地,如果您的计算节点在操作系统磁盘上使用了 LVM,您也必需修改这些节点上 /etc/lvm/lvm.conf
文件中的过滤器,将操作系统磁盘包含到过滤器中。例如,如果 /dev/sda
设备包含操作系统:
filter = [ "a/sda/", "r/.*/"]
意思是说,我们要使用哪块磁盘,就把它加到 accept里面,把其他的磁盘都reject掉避免出现问题。
回顾上面的问题:
Device /dev/sdb not found (or ignored by filtering)
存在一种可能是 /dev/sdb
在 /etc/lvm/lvm.conf
中被过滤了,于是去配置文件中,搜索"filter",发现filter
相关的语句中并没有过滤 /dev/sdb
。于是开始思考,为什么 /deb/sdb
没有被发现。
运行 fdisk -l
查看磁盘情况,看到下图(暂时不方便截图,先拍下来):
看到最下面三行,恍然大悟,原来根本没有/dev/sdb
,真正存在的是 /dev/sdb1
,/deb/sdb2
,/deb/sdb3
这三个磁盘,而我们要使用的也将是这三个磁盘。图中显示了磁盘的情况,sdb2
空间最大,所以准备用它来创建物理卷。
运行 # pvcreate /dev/sdb2
又出问题了。
这次提示:
Can’t open /dev/sdb2 exclusively. Mounted filesystem?
3.3 Can’t open /dev/sdb2 exclusively. Mounted filesystem?
提示的意思问我们 sdb2
是否已经挂载了。那么挂载是什么意思呢?
简单的说,Linux下每个文件系统都有独立的inode,block,super block等信息,这个文件系统要挂载到目录树才可以使用,将文件系统与目录树结合的操作称为挂载,反之则为卸载。
所以猜测这条报错的原因就是 /dev/sdb2
已经挂载到系统上了,不能被LVM用来创建物理卷了,到底有没有挂载呢?运行 df -h
命令看下:
可以看到 /dev/sdb2
确实已经挂载到目录树了,而 /dev/sdb1
和 /dev/sdb2
都没有挂载。这意味着如果我运行 # pvcreate /dev/sdb1
或 # pvcreate /dev/sdb3
是会成功的。
所以现在我们要把 /dev/sdb2
从目录树卸载下来。
运行:
# umount /dev/sdb2
发现已经没有了。
于是愉快地运行:
# pvcreate /dev/sdb2
,提示:
Physical volume "/dev/sdb" successfully created
创建成功!至此之后,按照官网文档安装下去,就势如破竹了。
接下来创建 LVM 卷组 cinder-volumes
:
# vgcreate cinder-volumes /dev/sdb
Volume group "cinder-volumes" successfully created
在 devices
部分,添加一个过滤器,只接受 /dev/sdb2
设备,拒绝其他所有设备:
devices {
...
filter = [ "a/sdb2/", "r/.*/"]
之后安装软件包并配置组件,按照 官网文档 操作就可以。最后出现如下画面,安装成功:
$ openstack volume service list
+------------------+------------+------+---------+-------+----------------------------+
| Binary | Host | Zone | Status | State | Updated_at |
+------------------+------------+------+---------+-------+----------------------------+
| cinder-scheduler | controller | nova | enabled | up | 2016-09-30T02:27:41.000000 |
| cinder-volume | block@lvm | nova | enabled | up | 2016-09-30T02:27:46.000000 |
+------------------+------------+------+---------+-------+----------------------------+
参考链接:
http://man.linuxde.net/pvcreate
https://unix.stackexchange.com/questions/199164/error-run-lvm-lvmetad-socket-connect-failed-no-such-file-or-directory-but
http://www.linuxidc.com/Linux/2015-04/116685.htm