云计算存储虚拟化技术-openstack-cinder

简介: 云计算存储虚拟化技术-openstack-cinder

简介

存储虚拟化技术 是一种 在 物理 存储 介质 上 , 二次进行 存储 分配的 技术.

比如 lvm 以及 常见的 分区 也是 一种 简单 的 存储 虚拟化.

一块 物理磁盘 分成了 两块 进行使用, 或者 10 块 磁盘 聚合成 1 块 存储磁盘.

用来 满足 不同用户的 不同需求.


特点

区别于 cpu 以及 内存 , 由于 当前(2021年) 网卡 速度 在 100m-1000g/s 之间, 所以 cpu 与 内存 是 无法 进行 跨节点的 虚拟化的, 即便 强行实现 ,性能 也 十分低下,

但是 普通 磁盘 速度 远小于 网卡 速度, 以 较新的 nvme 为例, 2-4g/s. 并且 同一个 主机 可能 插有 数十块 存储磁盘. 所以 存储 介质的 虚拟化 , 可以 通过 网络 进行 聚合. 结合上 元数据的 查找 优化, 以及 利用 内存 缓存 热点数据. 都 十分 具有前景.


cinder 是什么

openstack 的 存储 插件, cinder 并没有 自己实现 所有的 存储 能力, 而是 借用 不同的 接口 实现了 自身的 存储 能力.

比如 调用 lvm 进行 本地的 虚拟机 磁盘存储,直接 利用 本地的 磁盘 存储能力.

或者 调用 rbd 依托于 ceph 进行 存储。


cinder 服务 构成

api, scheduler, volume, backup,服务 构成。

可以通过 systemctl status 查看 相应 服务 状态,

配置 文件 /etc/cinder

数据 目录 /var/lib/cinder

日志 目录 /var/log/cinder

可以 通过 8776 请求 方式 调用,

也可以 通过 cinderclient 项目 提供的 cinder 命令行 cli 工具 调用。


以创建 volume 为例 分析 cinder 代码

命令行 -> api -> api-server

可以直接 命令行 也可以 api

创建 大概 过程

  1. v2/volume/api create
  2. cinder/volume/api create
  3. scheduler_rpcapi


函数调用顺序

  1. web 或者 cinderclint 提交 volume_create 请求
  2. 请求 会被 url 到 api 映射到以下函数

/root/cinder/cinder/volume/api.py:218 def create

def create(self, context, size, name, description, snapshot=None,

image_id=None, volume_type=None, metadata=None,

availability_zone=None, source_volume=None,

scheduler_hints=None,

source_replica=None, consistencygroup=None,

cgsnapshot=None, multiattach=False, source_cg=None):


3.参数检查
其中检查参数的 格式合法性, 也会检查 资源存量 是否足够。

# 参数检查内容很多,列举一个
if size and (not strutils.is_int_like(size) or int(size) <= 0):
    msg = _('Invalid volume size provided for create request: %s '
            '(size argument must be an integer (or string '
            'representation of an integer) and greater '
            'than zero).') % size
    raise exception.InvalidInput(reason=msg)
  1. 通过之后,创建 sched_rpcapi volume_rpcapi flow_engine

其中 /root/cinder/cinder/volume/rpcapi.py:35 volume_rpcapi 中有更加详细的创建过程

sched_rpcapi = (self.scheduler_rpcapi if (not cgsnapshot and
                not source_cg) else None)
volume_rpcapi = (self.volume_rpcapi if (not cgsnapshot and
                  not source_cg) else None)
flow_engine = create_volume.get_flow(self.db,
                                      self.image_service,
                                      availability_zones,
                                      create_what,
                                      sched_rpcapi,
                                      volume_rpcapi)
  1. 执行 flow_engine 创建 volume
# Attaching this listener will capture all of the notifications that
# taskflow sends out and redirect them to a more useful log for
# cinders debugging (or error reporting) usage.
with flow_utils.DynamicLogListener(flow_engine, logger=LOG):
    flow_engine.run()
    vref = flow_engine.storage.fetch('volume')
    LOG.info(_LI("Volume created successfully."), resource=vref)
    return vref
  1. 返回 vref ,volume 对象的ref(引用对象)

volume_rpc_api 创建 volume 过程

def create_volume(self, ctxt, volume, host, request_spec,
                  filter_properties, allow_reschedule=True):
    request_spec_p = jsonutils.to_primitive(request_spec)
    msg_args = {'volume_id': volume.id, 'request_spec': request_spec_p,
                'filter_properties': filter_properties,
                'allow_reschedule': allow_reschedule}
    if self.client.can_send_version('2.0'):
        version = '2.0'
        msg_args['volume'] = volume
    elif self.client.can_send_version('1.32'):
        version = '1.32'
        msg_args['volume'] = volume
    else:
        version = '1.24'
    cctxt = self._get_cctxt(host, version)
    request_spec_p = jsonutils.to_primitive(request_spec)
    """Invoke a method and return immediately. See RPCClient.cast()."""
    cctxt.cast(ctxt, 'create_volume', **msg_args)
# 实际上 到此为止 创建服务就是 cctxt 向消息队列提供了一个任务
-->
self.transport._send(self.target, ctxt, msg, retry=self.retry)

判断 list 或者 map 中是否 有哪些键名

# Check that the required keys are present, return an error if they
# are not.
required_keys = set(['ref', 'host'])
missing_keys = list(required_keys - set(volume.keys()))
if missing_keys:
    # 代表 这些 键名 不全部存在
    msg = _("The following elements are required: %s") % \
        ', '.join(missing_keys)
    raise exc.HTTPBadRequest(explanation=msg)
相关文章
|
12天前
|
存储 安全 网络安全
云计算与网络安全:技术融合的未来之路
【10月更文挑战第30天】在数字化浪潮的推动下,云计算已成为企业信息技术架构的核心。然而,随之而来的网络安全问题也日益凸显。本文将探讨云计算与网络安全的关系,分析云服务中的安全挑战,并提出相应的解决方案。我们将通过实例展示如何在云计算环境中实现网络安全的最佳实践,以期为读者提供一条技术融合的未来之路。
|
3天前
|
云安全 安全 网络安全
云计算与网络安全:技术挑战与解决策略
【10月更文挑战第39天】随着云计算技术的飞速发展,网络安全问题也日益凸显。本文将探讨云计算环境下的网络安全挑战,并提出相应的解决策略。通过分析云服务模型、网络安全威胁以及信息安全技术的应用,我们将揭示如何构建一个安全的云计算环境。
|
4天前
|
云安全 安全 网络安全
云计算与网络安全:技术融合的未来之路
【10月更文挑战第38天】 在数字化浪潮中,云计算和网络安全成为支撑现代企业和个人数据安全的两大基石。本文将深入探讨云计算服务如何与网络安全技术相结合,保障信息安全,并分析面临的挑战及未来发展趋势。我们将通过实际案例,揭示云安全的最佳实践,为读者提供一条清晰的技术融合路径。
|
5天前
|
安全 网络安全 数据库
云计算与网络安全:技术融合的未来之路
【10月更文挑战第37天】本文将探讨云计算与网络安全的交汇点,揭示它们如何共同塑造信息安全的未来。我们将深入了解云服务的核心组件、网络安全的关键策略以及两者如何相互增强。通过分析当前的挑战和未来的趋势,本文旨在为读者提供一条清晰的路径,以理解并应对这一不断发展的技术领域。
|
3天前
|
安全 持续交付 云计算
揭秘云计算中的容器化技术及其优势
揭秘云计算中的容器化技术及其优势
9 1
|
7天前
|
存储 安全 网络安全
云计算与网络安全:技术融合与挑战
【10月更文挑战第35天】本文将探讨云计算与网络安全的交叉点,包括云服务、网络安全和信息安全等技术领域。我们将深入了解云计算的基本概念,以及如何通过云服务实现网络安全和信息安全。同时,我们还将讨论云计算面临的安全挑战,并提出相应的解决方案。最后,我们将通过代码示例展示如何在云计算环境中实现网络安全和信息安全。
22 3
|
8天前
|
存储 安全 网络安全
云计算与网络安全:云服务、网络安全、信息安全等技术领域的深度剖析
【10月更文挑战第34天】本文将深入探讨云计算与网络安全的关系,包括云服务、网络安全、信息安全等技术领域。我们将通过实例和代码示例,解析云计算如何改变网络安全的格局,以及如何在云计算环境下保护信息安全。我们将从云计算的基本概念开始,然后深入到网络安全和信息安全的主题,最后通过代码示例来展示如何在云计算环境下实现网络安全和信息安全。
|
14天前
|
存储 安全 网络安全
云计算与网络安全:技术融合的双刃剑
【10月更文挑战第28天】本文旨在探索云计算在提供便利和效率的同时,如何成为网络安全领域的一大挑战。我们将从云服务的基本架构出发,分析其在信息安全中的关键作用,进而讨论当前网络安全面临的主要威胁及防御策略。文章还将探讨云计算环境中的数据保护、身份验证和访问控制机制,以及如何通过加密技术和安全协议来增强安全性。最后,我们将展望未来云计算与网络安全的发展趋势,并思考如何平衡技术创新与安全需求。
|
11天前
|
存储 安全 网络安全
云计算与网络安全:技术融合的新篇章
【10月更文挑战第31天】本文将深入探讨云计算与网络安全之间的紧密联系,揭示云服务在信息安全领域的关键作用。文章将通过分析网络安全的挑战、云服务的机遇以及信息安全的未来趋势,为读者提供一个全面的视角。同时,文章还将展示如何通过实际的技术手段和策略来增强云计算环境下的安全性。
21 1
|
13天前
|
存储 安全 网络安全
云计算与网络安全:探索云服务中的信息安全技术
【10月更文挑战第29天】在数字化时代的浪潮中,云计算作为一种革命性的技术,正日益成为企业和个人数据存储与处理的首选方案。然而,随之而来的网络安全问题也愈发复杂和严峻。本文将深入探讨云计算服务中的网络安全挑战,并分析如何通过先进的信息安全技术来加强保护措施。我们将从云服务的基础知识出发,逐步深入到网络安全的各个方面,包括数据加密、身份验证、访问控制等关键技术的应用。通过理论与实践的结合,旨在为读者提供一套全面而实用的云计算安全指南。