前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >玩转企业云计算平台系列(八):Openstack 块存储服务 Cinder

玩转企业云计算平台系列(八):Openstack 块存储服务 Cinder

作者头像
民工哥
发布2024-01-05 13:44:18
3280
发布2024-01-05 13:44:18
举报

基本概念

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

Cinder是一个可扩展、可靠和可用的块存储服务,它的主要功能包括:

  • 1.卷管理:Cinder可以创建、删除、扩容和缩小卷。管理员可以通过API或者命令行接口创建卷,指定卷的大小、类型、名称和描述等信息。当需要扩容或缩小卷时,管理员可以通过API或命令行接口进行操作。
  • 2.卷快照:Cinder支持卷的快照,即对现有卷的某个时刻的状态进行备份,可以用于数据的保护和还原。管理员可以通过API或命令行接口创建、删除和还原卷快照。
  • 3.卷的迁移和复制:Cinder支持卷的迁移和复制,可以将卷从一个存储后端迁移到另一个存储后端,或者在同一个存储后端中复制卷。管理员可以通过API或命令行接口进行操作。
  • 4.备份和还原:Cinder支持卷的备份和还原,可以将卷的数据备份到其他地方进行保护。管理员可以通过API或命令行接口创建、删除和还原卷的备份。
  • 5.存储后端支持:Cinder支持多种存储后端,包括本地存储、iSCSI、NFS、Ceph、GlusterFS等,管理员可以根据需求选择和配置不同的存储后端。
  • 6.多租户支持:Cinder支持多租户,可以为不同的租户提供独立的块存储服务,并且可以限制不同租户的配额和权限。
  • 7.高可用性和容错性:Cinder具有高可用性和容错性,可以保证存储服务的可用性和数据的安全性。Cinder支持多副本和数据冗余,同时还支持故障转移和自动恢复。
  • 8.网络互通性:Cinder可以与其他OpenStack组件进行交互,如Nova、Glance等,同时还支持API和命令行接口,可以方便地与其他系统进行集成。

总的来说,Cinder是OpenStack平台中一个重要的组件,为云计算环境中虚拟机提供持久化的块存储服务,支持多种存储后端和多租户,并具有高可用性和容错性。Cinder的主要优势在于其可扩展性和灵活性,可以根据需要选择不同的存储后端,并且可以通过API和命令行接口进行操作和管理。更多关于云计算服务 Openstack 系列的学习文章,请参阅:企业云计算平台 Openstack ,本系列持续更新中。

存储相关的概念
文件存储

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

块存储

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

对象存储

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

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

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

Cinder 组件架构

在块存储中,裸硬盘通常被称为卷,Cinder的任务就是管理卷,包括卷的创建,删除等操作。

Cinder的主要模块和功能如下。

Cinder-api

接收 API 请求, 调用 cinder-volume 。是整个 Cinder 组件的门户,所有 cinder 的请求都首先由 cinder-api 处理。cinder-api 向外界暴露若干 HTTP REST API 接口。在 keystone 中我们可以查询 cinder-api 的 endponits。

客户端可以将请求发送到 endponits 指定的地址,向 cinder-api 请求操作。 当然,作为最终用户的我们不会直接发送 Rest API 请求。OpenStack CLI,Dashboard 和其他需要跟 Cinder 交换的组件会使用这些 API。

cinder-api 对接收到的 HTTP API 请求会做如下处理:

  • 检查客户端传人的参数是否合法有效;
  • 调用 cinder 其他子服务的处理客户端请求;
  • 将 cinder 其他子服务返回的结果序列号并返回给客户端。

cinder-api 接受哪些请求呢?简单的说,只要是 Volume 生命周期相关的操作,cinder-api 都可以响应。大部分操作都可以在 Dashboard 上看到。

Cinder-volume

管理 volume 的服务,与 volume provider 协调工作,管理 volume 的生命周期。运行 cinder-volume 服务的节点被称作为存储节点。

cinder-volume 在存储节点上运行,OpenStack 对 Volume 的操作,最后都是交给 cinder-volume 来完成的。cinder-volume 自身并不管理真正的存储设备,存储设备是由 volume provider 管理的。cinder-volume 与 volume provider 一起实现 volume 生命周期的管理。

通过 Driver 架构支持多种 Volume Provider

接着的问题是:现在市面上有这么多块存储产品和方案(volume provider),cinder-volume 如何与它们配合呢?

通过的 Driver 架构。 cinder-volume 为这些 volume provider 定义了统一的接口,volume provider 只需要实现这些接口,就可以 Driver 的形式即插即用到 OpenStack 系统中。、

定期向 OpenStack报告计算节点的状态:cinder-volume 会定期向 Cinder 报告存储节点的空闲容量来做筛选启动volume

实现 volume 生命周期管理:Cinder 对 volume 的生命周期的管理最终都是通过 cinder-volume 完成的,包括 volume 的 create、extend、attach、snapshot、delete 等。

volume provider

数据的存储设备,为 volume 提供物理存储空间。 cinder-volume 支持多种 volume provider,每种 volume provider 通过自己的 driver 与cinder-volume 协调工作。

更多关于云计算服务 Openstack 系列的学习文章,请参阅:企业云计算平台 Openstack ,本系列持续更新中。

cinder-scheduler

scheduler 通过调度算法选择最合适的存储节点创建 volume。 创建 Volume 时,cinder-scheduler 会基于容量、Volume Type 等条件选择出最合适的存储节点,然后让其创建 Volume。

Message Queue

Cinder 各个子服务通过消息队列实现进程间通信和相互协作。因为有了消息队列,子服务之间实现了解耦,这种松散的结构也是分布式系统的重要特征。

Database Cinder

有一些数据需要存放到数据库中,一般使用 MySQL。数据库是安装在控制节点上的,比如在我们的实验环境中,可以访问名称为“cinder”的数据库。

cinder-backup

cinder-backup用于将volume备份到其他存储系统上,目前支持的备份存储系统有swift、ceph、IBM Tivoli storage manager(TSM)、glusterFS等,默认是swift。

基本工作流程

Cinder组件的主要功能就是对卷进行创建与管理。

流程如下:

  • “cinder-api”接收到用户通过管理界面或命令行发起的卷创建请求后,完成必要处理后将其发送到消息队列中。
  • “cinder-scheduler”从消息队列中获得请求和数据后,从若干存储节点选出一个能存放改卷的节点,并将消息发送到消息队列。
  • “cinder-volume”从消息队列中获取请求后,通过“volume-provider”调用具体的卷管理系统在存储设备上创建卷。
  • 更多关于云计算服务 Openstack 系列的学习文章,请参阅:企业云计算平台 Openstack ,本系列持续更新中。

Ciner 安装与配置

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

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

安装Cinder软件包
代码语言:javascript
复制
yum -y install openstack-cinder

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

代码语言:javascript
复制
cat /etc/passwd | grep cinder

查看用户组信息:

代码语言:javascript
复制
cat /etc/group | grep cinder
创建Cinder的数据库并授权

支持Cinder组件的数据库只有一个,一般将其命名为“cinder”。

代码语言:javascript
复制
#第一步,进入数据库
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代表着本地主机。

第四步,退出数据库。

代码语言:javascript
复制
quit#记得按回车
修改Cinder配置文件

Cinder的配置文件是”/etc/cinder/cinder.conf"。通过修改它便可以实现Cinder与数据库及Keystone的连接。由于配置文件有着太多注释,所以为了方便起见,我们可以先将其注释与空行去掉。

(1)将配置文件中的注释和空行去掉

代码语言:javascript
复制
cp /etc/cinder/cinder.conf /etc/cinder/cinder.bak #备份配置文件
grep -Ev '^$|#' /etc/cinder/cinder.bak > /etc/cinder/cinder.conf #去掉配置文件中的注释和空行,生成新的配置文件

(2)编辑新的配置文件

代码语言:javascript
复制
#打开配置文件
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
修改Nova配置文件
代码语言:javascript
复制
#打开配置文件
vi /etc/nova/nova.conf

#修改[cinder]部分,增加以下内容
[cinder]
os_region_name=RegionOne
初始化数据库
代码语言:javascript
复制
su cinder -s /bin/bash -c "cinder-manage db sync"

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

Cinder组件初始化

以下操作均在controller节点上

创建Cinder用户并分配角色

(1)为Openstack云计算平台创建“cinder”用户

代码语言:javascript
复制
#导入环境变量模拟登录
source admin-login

#在Openstack云计算平台中创建用户“cinder”
openstack user create --domain default --password 000000 cinder
#这里的用户名与密码一定要与cinder.conf中的[keystone_authtoken]中的用户名和密码一致

(2)为用户“cinder“分配admin角色

代码语言:javascript
复制
openstack role add --project project --user cinder admin
创建Cinder服务及服务端点

(1)创建服务

代码语言:javascript
复制
#OpenStack(Train版本) Cinder支持的卷是第三个版本
openstack service create --name cinder3 volume3

(2)创建服务端点

openstack 组件的服务端点有三个,分别对应公众用户,内部组件,admin用户服务的地址。

代码语言:javascript
复制
#创建公共用户访问的端点
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
启动控制节点上的Cinder服务
代码语言:javascript
复制
#重启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
检测控制节点上的Cinder服务

这里介绍两种方式

查看端口占用情况
代码语言:javascript
复制
 netstat -nutpl|grep 8776
查看存储服务列表
代码语言:javascript
复制
openstack volume service list

"cinder-scheduler"在控制节点上的模块显示在UP也就是开启状态就表示服务正常。更多关于云计算服务 Openstack 系列的学习文章,请参阅:企业云计算平台 Openstack ,本系列持续更新中。

搭建存储节点

为计算节点增加硬盘

在计算节点上新增一块硬盘为存储节点服务。

第一步,进入计算节点的虚拟机设置对话框,然后选择计算节点的设置。

第二步,为其增加相应的存储硬盘,如下。

设置完成后重启计算节点就可 。

创建卷组

逻辑卷管理是Linux环境下对磁盘分区进行管理的一种机制,它可以将几块磁盘组合起来形成一个存储池或者卷组。LVM可以每次从卷组中划分出不同大小的逻辑卷创建新的逻辑设备。Cinder可以使用Lvm来实现块设备的管理。

查看系统硬盘挂载情况
代码语言:javascript
复制
lsblk  #查看挂载信息

我们可以在/dev/里查看到具体。

创建LVM物理卷组

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

代码语言:javascript
复制
#第一步,将硬盘初始化为物理卷
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元数据服务

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

代码语言:javascript
复制
#设置开机启动该服务
systemctl enable lvm2-lvmetad
#立即启动服务
systemctl start lvm2-lvmetad

更多关于云计算服务 Openstack 系列的学习文章,请参阅:企业云计算平台 Openstack ,本系列持续更新中。

安装和配置存储节点

安装Cinder相关软件包
代码语言:javascript
复制
yum -y install openstack-cinder targetcli python-keystone
修改Cinder配置文件

Cinder的配置文件是“/etc/cinder/cinder.conf”

代码语言:javascript
复制
#将配置文件中的注释和空行去掉
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

启动计算节点上的Cinder服务

代码语言:javascript
复制
#设置开机启动服务
systemctl enable openstack-cinder-volume target
#立即启动服务
systemctl start openstack-cinder-volume target

检测

这里介绍两种检测方法

查看存储服务列表

代码语言:javascript
复制
openstack volume service list

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

通过Dashboard查看卷概况

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

用Cinder创建卷

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

使用命令模式创建卷

代码语言:javascript
复制
#第一步,在控制节点发起命令,创建一个8GB的卷,将其命名为”volume1“
openstack volume create --size 8 volume1

#第二步,查看卷列表
openstack volume list
使用Dashboard创建卷

第一步,进入卷列表,登录Dashboard以后,在菜单栏【卷】——>【卷】选项,进入以下界面。

我们可以看见volume1,也就是我们命令创建的卷。

第二步,创建卷,我们可以点击【创建卷】按钮,如下。

注意,所有卷的容量总和不要超过卷组的容量。

在完成创建后,我们就可以在【卷】界面中看到刚创建的卷的信息。更多关于云计算服务 Openstack 系列的学习文章,请参阅:企业云计算平台 Openstack ,本系列持续更新中。

参考来源:https://blog.csdn.net/xiaoyu070321/ article/details/131538888

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2024-01-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 民工哥技术之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 基本概念
    • 存储相关的概念
    • Cinder 组件架构
      • Cinder-api
        • Cinder-volume
          • cinder-scheduler
            • Message Queue
              • Database Cinder
                • cinder-backup
                  • 基本工作流程
                  • Ciner 安装与配置
                    • 安装与配置控制节点上的Ciner服务
                      • Cinder组件初始化
                        • 检测控制节点上的Cinder服务
                        • 搭建存储节点
                          • 为计算节点增加硬盘
                            • 创建卷组
                            • 安装和配置存储节点
                              • 安装Cinder相关软件包
                                • 修改Cinder配置文件
                                • 启动计算节点上的Cinder服务
                                • 检测
                                  • 查看存储服务列表
                                    • 通过Dashboard查看卷概况
                                    • 用Cinder创建卷
                                      • 使用命令模式创建卷
                                        • 使用Dashboard创建卷
                                    相关产品与服务
                                    对象存储
                                    对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
                                    领券
                                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档