Cinder是OpenStack中提供块存储服务的组件,主要功能是为虚拟机实例提供虚拟磁盘管理服务。Cinder的前身是Nova中的“nova-volume”组件,OpenStack F 版以后就将其从Nova中被剥离出来作为一个独立的OpenStack组件。
文件存储依靠文件系统来存储文件。文件直接存储在文件系统上,通过FTP、网络文件系统等服务进行访问。特点是使用简单、兼容性好,但响应速度和存储容量一般。
块存储中的“块”是指存储系统采用的一整块的存储设备,如同一块硬盘。块存储技术通常是指将裸磁盘空间整个映射给主机时使用的技术。因此,块存储可以虚拟出整块硬盘给云主机使用,对云主机的操作系统来说这就是挂载的物理硬盘。它的特点是响应速度极快,同时具有高稳定性和可靠性,但受硬件容量限制,其容量不大。
对象存储以对象(封装)的形式管理数据。对象和文件最大的不同就是对象在文件基础之上增加了元数据。
对象数据可以分为两部分:
数据通常都是无结构的书,如图片、视频等。元数据值得是对数据的相关描述,例如图片的大小,数据存储的位置信息等。当需要访问某个对象时,先查询元数据服务器获得具体位置信息,再从对象存储服务器中获得具体数据。
对象存储主要用于分布式存储,其存储容量巨大,但速度较慢。
在块存储中,裸硬盘通常被称为卷,Cinder的任务就是管理卷,包括卷的创建,删除等操作。
Cinder的主要模块和功能如下表:
模块 | 功能说明 |
---|---|
cinder-api | 该模块用于接收和响应外部请求,也是外部可用于管理Cinder的唯一入口 |
cinder-volume | 该模块是Cinder项目中对卷进行管理的模块 |
cinder-scheduler | 该模块负责通过调度算法从多个存储节点服务器中选择最合适的节点来创建卷 |
volume-provider | 该模块负责通过驱动调用具体的卷管理系统实现对卷的具体操作。它支持多种卷管理系统,包括LVM、NFS、Ceph等 |
volume-backup | 该模块为卷提供备份服务 |
Cinder组件的主要功能就是对卷进行创建与管理。
流程如下:
以下操作均在controller节点上运行
yum -y install openstack-cinder
安装的“openstack-cinder”软件包中包括“cinder-api”和“cinder-scheduler”模块。
查看用户信息:
cat /etc/passwd | grep cinder
cat /etc/group | grep cinder
支持Cinder组件的数据库只有一个,一般将其命名为“cinder”。
第一步,进入数据库
mysql -u root -p 000000
第二步,新建“cinder”数据库
create database cinder;
第三步,为数据库授权
grant all pribileges on cinder.* to 'cinder'@'localhost' identified by '000000';
grant all pribileges on cinder.* to 'cinder'@'%' identified by '000000';
其中,@代表着任意远程主机,localhost代表着本地主机。
第四步,推出数据库
quit#记得按回车
Cinder的配置文件是”/etc/cinder/cinder.conf"。通过修改它便可以实现Cinder与数据库及Keystone的连接。由于配置文件有着太多注释,所以为了方便起见,我们可以先将其注释与空行去掉。
(1)将配置文件中的注释和空行去掉
cp /etc/cinder/cinder.conf /etc/cinder/cinder.bak #备份配置文件
grep -Ev '^$|#' /etc/cinder/cinder.bak > /etc/cinder/cinder.conf #去掉配置文件中的注释和空行,生成新的配置文件
(2)编辑新的配置文件
#打开配置文件
vi /etc/cinder/cinder.conf
#修改[database]部分,实现与数据库“cinder”的连接
[database]
connection = mysql+pymysql://cinder:airen070321@controller/cinder
#修改[DEFAULT][keystone_authtoken]部分,实现与Keystone的交互
[DEFAULT]
auth_strategy = keystone
[keystone_authtoken]
auth_url = http://controller:5000
memcached_servers = controller:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = project
username = cinder
password = 000000
#修改[oslo_concurrency]部分,配置锁路径
[oslo_concurrency]
lock_path = /var/lib/cinder/tmp#这里的路径是在安装软件时“cinder”用户创建的,不要随意更改该路径
#修改[DEFAULT]部分,实现与消息队列的连接
[DEFAULT]
transport_url=rabbit://rabbitmq:airen070321@controller:5672
#打开配置文件
vi /etc/nova/nova.conf
#修改[cinder]部分,增加以下内容
[cinder]
os_region_name=RegionOne
su cinder -s /bin/bash -c "cinder-manage db sync"
同步结束后,我们可以进入数据库中查看数据库中表的信息,若有以下的信息,则数据库同步成功。
以下操作均在controller节点上
(1)为Openstack云计算平台创建“cinder”用户
#导入环境变量模拟登录
source admin-login
#在Openstack云计算平台中创建用户“cinder”
openstack user create --domain default --password 000000 cinder
#这里的用户名与密码一定要与cinder.conf中的[keystone_authtoken]中的用户名和密码一致
(2)为用户“cinder“分配admin角色
openstack role add --project project --user cinder admin
(1)创建服务
#OpenStack(Train版本) Cinder支持的卷是第三个版本
openstack service create --name cinder3 volume3
(2)创建服务端点
openstack组件的服务端点有三个,分别对应公众用户,内部组件,admin用户服务的地址
#创建公共用户访问的端点
openstack endpoint create --region RegionOne volumev3 public http://controller:8776/v3/%\(project_id\)s
#创建内部组件访问的端点
openstack endpoint create --region RegionOne volumev3 internal http://controller:8776/v3/%\(project_id\)s
#创建Admin用户访问的端点
openstack endpoint create --region RegionOne volumev3 admin http://controller:8776/v3/%\(project_id\)s
#重启Nova服务
systemctl restart openstack-nova-api
#设置“cinder-api”和“cinder-scheduler”模块开机启动
systemctl enable openstack-cinder-api openstack-cinder-scheduler
#立即启动Cinder服务
systemctl start openstack-cinder-api openstack-cinder-scheduler
这里介绍两种方式
netstat -nutpl|grep 8776
openstack volume service list
"cinder-scheduler"在控制节点上的模块显示在UP也就是开启状态就表示服务正常
在计算节点上新增一块硬盘为存储节点服务。
第一步,进入计算节点的虚拟机设置对话框,然后选择计算节点的设置
第二步,为其增加相应的存储硬盘,如下
设置完成后重启计算节点就可
2.创建卷组
逻辑卷管理是Linux环境下对磁盘分区进行管理的一种机制,它可以将几块磁盘组合起来形成一个存储池或者卷组。LVM可以每次从卷组中划分出不同大小的逻辑卷创建新的逻辑设备。Cinder可以使用Lvm来实现块设备的管理。
lsblk#查看挂载信息
卷组是若干个物理卷组成的一个整体,对于用户来说,卷组就是一个大的磁盘,便于重新划分和使用。
第一步,将硬盘初始化为物理卷
pvcreate /dev/sdb
第二步,将物理卷归并为卷组
LVM卷组的创建命令为“vgcreate",如下
vgcreate <卷组名><物理卷1><物理卷1>
我们将卷组命取为”“cinder-volumes”
vgcreate cinder-volumes /dev/sdb
第三步,配置LVM卷组扫描的设备
#打开LVM的配置文件
vi /etc/lvm/lvm.conf
#修改配置文件的“devices”部分,添加一个接受“/dev/sdb”磁盘并拒绝其他设备的过滤器
devices {
filter = ["a/sdb/","r/.*/"]
.......
}
#以上代码中a表示接受,r表示拒绝
LVM在做磁盘扫描时将查找所有相关物理卷,并读取卷组元数据,这个过程非常耗时,如果将卷组元数据一次性读入缓存,则不用每次都做这个耗时的扫描。lvmetad就是LVM中用于处理元数据缓存的服务。
#设置开机启动该服务
systemctl enable lvm2-lvmetad
#立即启动服务
systemctl start lvm2-lvmetad
yum -y install openstack-cinder targetcli python-keystone
Cinder的配置文件是“/etc/cinder/cinder.conf”
#将配置文件中的注释和空行去掉
cp /etc/cinder/cinder.conf /etc/cinder/cinder.bak
#去掉配置文件中的所有注释和空行,生成新的配置文件
grep -Ev '^$|#' /etc/cinder/cinder.bak > /etc/cinder/cinder.conf
#打开配置文件
vi /etc/cinder/cinder.conf
#修改[database]部分,实现与数据库“cinder”的连接
[database]
connection = mysql+pymysql://cinder:airen070321@controller/cinder
#修改[DEFAULT][keystone_authtoken]部分,实现与keystone的交互
[DEFAULT]
auth_strategy = keystone
[keystone_authtoken]
auth_url = http://controller:5000
memcached_servers = controller:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = project
username = cinder
password = 000000
#修改[oslo——concurrency]部分,配置锁路径
[oslo_concurrency]
lock_path = /var/lib/cinder/tmp
#这里的路径不可随意修改
#修改[DEFAULT],实现与消息队列和Glance的连接
[DEFAULT]
transport_url = rabbit://rabbitmq:000000@controller:5672
glance_api_servers = http://controller:9292
#修改[DEFALUT],并增加[lvm]部分以设置LVM
[DEFAULT]
enabled_backends = lvm
[lvm]
volume_driver = cinder.volume.drivers.lvm.LVMVolumeDriver
volume_group = cinder-volumes
target_protocol = iscsi
target_helper = lioadm
#设置开机启动服务
systemctl enable openstack-cinder-volume target
#立即启动服务
systemctl start openstack-cinder-volume target
这里介绍两种检测方法
openstack volume service list
可以看见cinder-scheduler,cinder-volume两个模块是up(启动)状态就好
使用Dashboard登录OpenStack后,如果Cinder服务正常,则在左侧导航栏上会出现【卷】选项,且在【概况】界面中可以看到“卷”“卷快照”“卷存储”这三个饼图,如下
这里介绍两种方式来创建卷
第一步,在控制节点发起命令,创建一个8GB的卷,将其命名为”volume1“
openstack volume create --size 8 volume1
第二步,查看卷列表
openstack volume list
第一步,进入卷列表,登录Dashboard以后,在菜单栏【卷】——>【卷】选项,进入以下界面
我们可以看见volume1,,也就是我们命令创建的卷
第二步,创建卷,我们可以点击【创建卷】按钮,如下
注意,所有卷的容量总和不要超过卷组的容量。
在完成创建后,我们就可以在【卷】界面中看到刚创建的卷的信息。