OpenStack之块存储服务(Cinder)

一)基本概念

Cinder是OpenStack中提供块存储服务的组件,主要功能是为虚拟机实例提供虚拟磁盘管理服务。Cinder的前身是Nova中的“nova-volume”组件,OpenStack F 版以后就将其从Nova中被剥离出来作为一个独立的OpenStack组件。

1.文件存储

文件存储依靠文件系统来存储文件。文件直接存储在文件系统上,通过FTP、网络文件系统等服务进行访问。特点是使用简单、兼容性好,但响应速度和存储容量一般。

2.块存储

块存储中的“块”是指存储系统采用的一整块的存储设备,如同一块硬盘。块存储技术通常是指将裸磁盘空间整个映射给主机时使用的技术。因此,块存储可以虚拟出整块硬盘给云主机使用,对云主机的操作系统来说这就是挂载的物理硬盘。它的特点是响应速度极快,同时具有高稳定性和可靠性,但受硬件容量限制,其容量不大。

3.对象存储

对象存储以对象(封装)的形式管理数据。对象和文件最大的不同就是对象在文件基础之上增加了元数据。
对象数据可以分为两部分:

  • 数据,存储于对象存储服务器中
  • 对应的元数据,存储于元数据服务器中

数据通常都是无结构的书,如图片、视频等。元数据值得是对数据的相关描述,例如图片的大小,数据存储的位置信息等。当需要访问某个对象时,先查询元数据服务器获得具体位置信息,再从对象存储服务器中获得具体数据。
对象存储主要用于分布式存储,其存储容量巨大,但速度较慢。

二)组件架构

在块存储中,裸硬盘通常被称为卷,Cinder的任务就是管理卷,包括卷的创建,删除等操作。
image.png
Cinder的主要模块和功能如下表:

模块 功能说明
cinder-api 该模块用于接收和响应外部请求,也是外部可用于管理Cinder的唯一入口
cinder-volume 该模块是Cinder项目中对卷进行管理的模块
cinder-scheduler 该模块负责通过调度算法从多个存储节点服务器中选择最合适的节点来创建卷
volume-provider 该模块负责通过驱动调用具体的卷管理系统实现对卷的具体操作。它支持多种卷管理系统,包括LVM、NFS、Ceph等
volume-backup 该模块为卷提供备份服务

三)基本工作流程

Cinder组件的主要功能就是对卷进行创建与管理。
image.png
流程如下:

  • “cinder-api”接收到用户通过管理界面或命令行发起的卷创建请求后,完成必要处理后将其发送到消息队列中。
  • “cinder-scheduler”从消息队列中获得请求和数据后,从若干存储节点选出一个能存放改卷的节点,并将消息发送到消息队列。
  • “cinder-volume”从消息队列中获取请求后,通过“volume-provider”调用具体的卷管理系统在存储设备上创建卷。

四)项目实施

1.安装与配置控制节点上的Ciner服务

以下操作均在controller节点上运行

a-安装Cinder软件包
yum -y install openstack-cinder

安装的“openstack-cinder”软件包中包括“cinder-api”和“cinder-scheduler”模块。
查看用户信息:

cat /etc/passwd | grep cinder

image.png
查看用户组信息:

cat /etc/group | grep cinder

image.png

b-创建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#记得按回车
c-修改Cinder配置文件

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
d-修改Nova配置文件
#打开配置文件
vi /etc/nova/nova.conf

#修改[cinder]部分,增加以下内容
[cinder]
os_region_name=RegionOne
e-初始化数据库
su cinder -s /bin/bash -c "cinder-manage db sync"

同步结束后,我们可以进入数据库中查看数据库中表的信息,若有以下的信息,则数据库同步成功。
image.png

2.Cinder组件初始化

以下操作均在controller节点上

a-创建Cinder用户并分配角色

(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
b-创建Cinder服务及服务端点

(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
c-启动控制节点上的Cinder服务
#重启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
3.检测控制节点上的Cinder服务

这里介绍两种方式

a-查看端口占用情况
 netstat -nutpl|grep 8776

image.png

b-查看存储服务列表
openstack volume service list

image.png
"cinder-scheduler"在控制节点上的模块显示在UP也就是开启状态就表示服务正常

4.搭建存储节点
a-为计算节点增加硬盘

在计算节点上新增一块硬盘为存储节点服务。
第一步,进入计算节点的虚拟机设置对话框,然后选择计算节点的设置
image.png
第二步,为其增加相应的存储硬盘,如下
image.png
image.png
image.png
image.png
image.png
设置完成后重启计算节点就可
2.创建卷组
逻辑卷管理是Linux环境下对磁盘分区进行管理的一种机制,它可以将几块磁盘组合起来形成一个存储池或者卷组。LVM可以每次从卷组中划分出不同大小的逻辑卷创建新的逻辑设备。Cinder可以使用Lvm来实现块设备的管理。

b-查看系统硬盘挂载情况
lsblk#查看挂载信息

image.png
我们可以在/dev/里查看到具体

c-创建LVM物理卷组

卷组是若干个物理卷组成的一个整体,对于用户来说,卷组就是一个大的磁盘,便于重新划分和使用。
第一步,将硬盘初始化为物理卷

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表示拒绝
d-启动LVM元数据服务

LVM在做磁盘扫描时将查找所有相关物理卷,并读取卷组元数据,这个过程非常耗时,如果将卷组元数据一次性读入缓存,则不用每次都做这个耗时的扫描。lvmetad就是LVM中用于处理元数据缓存的服务。

#设置开机启动该服务
systemctl enable lvm2-lvmetad
#立即启动服务
systemctl start lvm2-lvmetad
5.安装和配置存储节点
a-安装Cinder相关软件包
yum -y install openstack-cinder targetcli python-keystone
b-修改Cinder配置文件

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
6.启动计算节点上的Cinder服务
#设置开机启动服务
systemctl enable openstack-cinder-volume target
#立即启动服务
systemctl start openstack-cinder-volume target

五)项目检测

这里介绍两种检测方法

1.查看存储服务列表
openstack volume service list

image.png
可以看见cinder-scheduler,cinder-volume两个模块是up(启动)状态就好

2.通过Dashboard查看卷概况

使用Dashboard登录OpenStack后,如果Cinder服务正常,则在左侧导航栏上会出现【卷】选项,且在【概况】界面中可以看到“卷”“卷快照”“卷存储”这三个饼图,如下
image.png

六)用Cinder创建卷

这里介绍两种方式来创建卷

1.使用命令模式创建卷

第一步,在控制节点发起命令,创建一个8GB的卷,将其命名为”volume1“

openstack volume create --size 8 volume1

第二步,查看卷列表

openstack volume list

image.png

2.使用Dashboard创建卷

第一步,进入卷列表,登录Dashboard以后,在菜单栏【卷】——>【卷】选项,进入以下界面
image.png
我们可以看见volume1,,也就是我们命令创建的卷
第二步,创建卷,我们可以点击【创建卷】按钮,如下
image.png
注意,所有卷的容量总和不要超过卷组的容量。
在完成创建后,我们就可以在【卷】界面中看到刚创建的卷的信息。

猜你喜欢

转载自blog.csdn.net/xiaoyu070321/article/details/131538888
今日推荐