云计算存储虚拟化技术-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)
相关文章
|
1月前
|
人工智能 安全 网络安全
云计算与网络安全:技术融合的未来
随着信息技术的不断发展,云计算和网络安全作为两大领域在当代社会中扮演着至关重要的角色。本文将探讨云计算与网络安全之间的紧密联系,以及它们在信息安全领域中的相互影响和未来发展趋势。
|
1月前
|
安全 网络安全 云计算
云计算与网络安全:技术融合下的信息保障
当今数字化时代,云计算与网络安全已经成为关乎国家和企业未来发展的重要议题。本文将深入探讨云服务、网络安全和信息安全等技术领域的最新发展,以及如何在技术融合的大背景下保障信息安全。
24 3
|
1月前
|
人工智能 运维 安全
拥抱变革:我的云计算技术感悟之旅
【2月更文挑战第17天】 在信息技术不断演进的今天,云计算已成为推动企业数字化转型的重要力量。本文以个人视角切入,分享了作者在探索和实践云计算过程中的技术感悟,包括对云服务模型的理解、面对技术挑战的策略以及对未来趋势的思考。文章旨在为同行提供经验参考,并激发更多对云计算深度应用的探讨。
18 0
|
1月前
|
存储 安全 网络安全
云计算与网络安全:新时代的技术挑战与应对策略
随着云计算技术的快速发展,网络安全问题变得愈发突出。本文探讨了云服务、网络安全以及信息安全在当今技术领域面临的挑战,并提出了相应的解决方案。通过分析现状和未来趋势,可以更好地了解云计算与网络安全的关系,为构建安全可靠的云服务提供参考。
|
1天前
|
存储 分布式计算 Cloud Native
云计算:技术革命与代码实践
云计算:技术革命与代码实践
16 1
|
3天前
|
机器学习/深度学习 安全 云计算
拥抱变革:我的云计算技术感悟之旅
【4月更文挑战第23天】 在信息技术不断演进的今天,云计算已成为推动企业数字化转型的重要力量。本文通过作者的个人视角,深入探讨了在学习和实践云计算过程中的技术感悟与成长。文章不仅涉及了云计算的基本概念、核心特性,还分享了作者在面对新技术挑战时的思考和应对策略,旨在为同行提供经验参考,共同促进技术进步与个人发展。
13 3
|
17天前
|
存储 安全 网络安全
未来云计算与网络安全:技术创新与挑战
随着数字化时代的来临,云计算与网络安全成为了当今科技领域的焦点。本文从技术创新和挑战两个方面探讨了未来云计算与网络安全的发展趋势。在技术创新方面,人工智能、区块链和量子计算等新兴技术将为云计算和网络安全带来前所未有的发展机遇;而在挑战方面,隐私保护、数据泄露和网络攻击等问题也将不断考验着技术研究者和行业从业者的智慧和勇气。未来,只有不断创新,同时加强安全防护,才能实现云计算与网络安全的良性发展。
16 1
|
25天前
|
机器学习/深度学习 边缘计算 人工智能
拥抱变革:我的云计算技术感悟之旅
【4月更文挑战第2天】 在信息技术不断演进的今天,云计算已成为推动企业数字化转型的重要力量。本文以个人视角切入,分享了我在学习和实践云计算过程中的技术感悟。文章不仅总结了云计算的核心优势和面临的挑战,还探讨了如何通过持续学习和实践来提升云技术水平,以及对未来云计算技术趋势的展望。
8 1
|
25天前
|
机器学习/深度学习 分布式计算 负载均衡
拥抱变革:我的云计算技术感悟之旅
【4月更文挑战第2天】在信息技术迅猛发展的今天,云计算已成为推动企业数字化转型的重要力量。本文以个人视角切入,分享在学习和实践云计算过程中的技术感悟。内容涵盖从对云计算概念的初步理解到深入应用的实践经历,再到对未来趋势的思考,旨在为同行提供参考并共同探讨云计算领域的新机遇与挑战。
20 3
|
29天前
|
边缘计算 人工智能 安全
当代云计算与网络安全技术探析
随着信息化时代的到来,云计算和网络安全技术日益成为人们关注的焦点。本文从云服务、网络安全和信息安全等多个角度展开探讨,旨在深入剖析当代云计算与网络安全技术的发展现状和前景,为读者提供全面的技术视角和思考。

相关实验场景

更多