OpenStack 存储管理

第六章 存储管理

1. OpenStack 存储服务概述

OpenStack 存储类型

​ 从数据保存时间的角度分为两类:临时存储(非持久存储)和持久存储

临时磁盘来源:

  • 计算节点的本地磁盘。

  • 通过NFS挂载的外部存储(使用此方式创建临时磁盘时,可以在多个计算节点之间迁移虚拟机,因为虚拟机实例的根磁盘位于可被多个物理主机访问的共享存储上)。

临时存储和持久存储

OpenStack 存储类型对比

OpenStack 持久存储简介

2. Cinder 块存储服务

2.1 简介

块存储服务Cinder

  • Cinder是OpenStack 块存储服务,为Nova虚拟机、Ironic裸机、容器提供卷

  • Cinder为后端不同的存储设备提供了统一的接口,不同的块设备服务厂商在Cinder中实现其驱动,使其可以被OpenStack整合管理

在OpenStack中的定位

Cinder 作用

​ Cinder在虚拟机与具体存储设备之间引入了一层“逻辑存储卷”的抽象,Cinder本身不是一种存储技术,并没有实现对块设备的实际管理和服务

​ Cinder只是提供了一个中间的抽象层,为后端不同的存储技术,提供了统一的接口

Cinder与其他服务的交互关系

2.2 架构

Cinder架构

  • Cinder Client封装Cinder提供的rest接口,以CLI形式供用户使用。

  • Cinder API对外提供rest API,对操作需求进行解析,对API进行路由寻找相应的处理方法。包含卷的增删改查(包括从源卷、镜像、快照创建)、快照增删改查、备份、volume type管理、挂载/卸载(Nova调用)等。

  • Cinder Scheduler负责收集backend上报的容量、能力信息,根据设定的算法完成卷到指定cinder-volume的调度。

  • Cinder Volume多节点部署,使用不同的配置文件、接入不同的backend设备,由各存储厂商插入driver代码与设备交互完成设备容量和能力信息收集、卷操作。

  • Cinder Backup实现将卷的数据备份到其他存储介质(目前SWIFT/Ceph/TSM提供了驱动)。

  • SQL DB提供存储卷、快照、备份、service等数据,支持MySQL、PG、MSSQL等SQL数据库。

架构说明

Cinder架构说明

Cinder架构部署

SAN存储

  • Cinder-api,Cinder-Scheduler,Cinder-Volume可以选择部署到一个节点上,也可以分别部署

  • API采用AA模式,HAproxy作为LB,分发请求到多个Cinder API

  • Scheduler也采用AA模式,有rabbitmq以负载均衡模式向3个节点分发任务,并同时从rabbitmq收取Cinder volume上报的能力信息,调度时,scheduler通过在DB中预留资源从而保证数据一致性

  • Cinder Volume也采用AA模式,同时上报同一个backend容量和能力信息,并同时接受请求进行处理

  • RabbitMQ,支持主备或集群

  • MySQL,支持主备或集群

Cinder组件-API

  • Cinder API对外提供REST API,对操作需求进行解析,并调用处理方法:
    • 卷create/delete/list/show
    • 快照create/delete/list/show
    • 卷attach/detach (Nova调用)
    • 其他:
      • Volume types
      • Quotas
      • Backups

Cinder组件-Scheduler

  • Cinder scheduler负责收集后端上报的容量、能力信息,根据设定的算法完成卷到指定cinder-volume的调度

  • Cinder scheduler通过过滤和权重,筛选出合适的后端:

    1. 列出所有后端
    2. 根据后端的能力进行筛选
    3. 根据权重给后端排序
    4. 返回最合适的后端

Cinder组件-Volume

Cinder volume多节点部署,使用不同的配置文件、接入不同的后端设备,由各存储厂商插入Driver代码与设备交互,完成设备容量和能力信息收集、卷操作等

2.3 工作原理 - 创建和挂载流程

Cinder创建卷流程

Cinder创建卷流程-Cinder API

Cinder API

  • 检查参数合法性(用户输入,权限,资源是否存在等)

  • 准备创建的参数字典,预留和提交配额

  • 在数据库中创建对应的数据记录

  • 通过消息队列将请求和参数发送到Scheduler

Cinder创建卷流程-Cinder Scheduler

Cinder Scheduler服务

  • 提取接收到的请求参数

  • 通过配置的filter和输入参数对后端进行过滤

    • Availability_zone_filter
    • Capacity_filter
    • Capabilities_filter
    • Affinity_filter(SameBackendFilter/DifferentBackendFilter)
    • ……
  • Weigher计算后端进行权重

    • CapacityWeigher/AllocatedCapacityWeigher
    • ChanceWeigher
    • GoodnessWeigher
    • ……
  • 选取最优的Backend并通过消息队列将请求发送到指定的后端

Cinder创建卷流程-Cinder Volume

Cinder Volume服务

  • 提取接收到的请求参数

  • 调用对应的Driver在后端创建实际的卷

  • 使用Driver返回的模型更新数据库中的记录

Cinder挂载卷流程

挂卷流程: 挂卷是通过Nova和Cinder的配合最终将远端的卷连接到虚拟机所在的Host节点上,并最终通过虚拟机管理程序映射到内部的虚拟机中

  • Nova调用Cinder API创建卷,传递主机的信息,如hostname,iSCSI initiator name,FC WWPNs。

  • Cinder API将该信息传递给Cinder Volume。

  • Cinder Volume通过创建卷时保存的host信息找到对应的Cinder Driver。

  • Cinder Driver通知存储允许该主机访问该卷,并返回该存储的连接信息(如iSCSI iqn,portal,FC Target WWPN,NFS path等)。

  • Nova调用针对于不同存储类型进行主机识别磁盘的代码( Cinder 提供了brick模块用于参考)实现识别磁盘或者文件设备。

  • Nova通知Cinder已经进行了挂载。

  • Nova将主机的设备信息传递给hypervisor来实现虚拟机挂载磁盘。

2.4 实验

Cinder主要操作

Cinder主要操作三个资源:

Volume:

块设备卷,提供创建,删除,扩容,挂载/卸载等功能

Snapshot:

针对于块设备卷的快照创建、删除、回滚等功能

Backup:

提供对块设备卷的备份,恢复能力

3. Swift 对象存储服务

3.1 简介

对象存储服务Swift

对象存储是具有成本效益的横向扩展存储的理想选择。它提供了一个完全分布式的、API可访问的存储平台,可以直接集成到应用程序中或用于备份、归档和数据保留。

Swift在OpenStack中的定位

  • Swift是OpenStack对象存储服务,可以存储虚拟机实例创建所需的镜像

  • Swift作为OpenStack持久存储之一,比较适合存放静态数据

​ Swift是OpenStack最初两大项目之一,由Rackspace于2010年贡献给OpenStack,并与Nova一起开启了OpenStack元年。

​ 静态数据:是指长期不会更新或者一定时期内更新频率比较低的数据,如虚拟机的镜像、多媒体数据、备份文件等。

​ 如果需要实时地更新数据,Cinder更为合适。

Swift在OpenStack中的作用

​ Swift并不是文件系统或者实时的数据存储系统,它称为对象存储,用于永久类型的静态数据的长期存储,这些数据可以检索、调整,必要时进行更新

​ 最适合存储的数据类型的例子是虚拟机镜像、图片存储、邮件存储和存档备份

​ 因为没有中心单元或主控结点,Swift提供了更强的扩展性、冗余和持久性

​ Swift经常用于存储镜像或用于存储虚拟机实例卷的备份副本

Swift特点:

  1. 极高的数据持久性

    从理论上测算过,Swift在5个Zone、5×10个存储节点的环境下,数据复制份是为3,数据持久性的SLA能达到10个9。

  2. 完全对称的系统架构

    “对称”意味着Swift中各节点可以完全对等,能极大地降低系统维护成本。

  3. 无限的可扩展性

    这里的扩展性分两方面,一是数据存储容量无限可扩展;二是Swift性能(如QPS、吞吐量等)可线性提升。因为Swift是完全对称的架构,扩容只需简单地新增机器,系统会自动完成数据迁移等工作,使各存储节点重新达到平衡状态。

  4. 无单点故障

    Swift的元数据存储是完全均匀随机分布的,并且与对象文件存储一样,元数据也会存储多份。整个Swift集群中,也没有一个角色是单点的,并且在架构和设计上保证无单点业务是有效的。

Swift与其他服务的交互关系

3.2 架构

3.2.1 架构简介

如图所示,Swift从架构上可以划分为两个层次:访问层(Access Tier)与存储层(Storage Nodes)。

3.2.2 数据模型
  • Swift存储对象的逻辑结构:Account/Container/Object(即帐户/容器/对象)

  • 每层节点数均没有限制,可以任意扩展

3.2.3 Swift系统架构

存储位置有如下三种:

  • /account

    • 帐户存储位置是唯一命名的存储区域,其中包含帐户本身的元数据(描述性信息)以及帐户中的容器列表。
    • 请注意,在Swift中,帐户不是用户身份。当您听到帐户时,请考虑存储区域。
  • /account/container

    • 容器存储位置是帐户内的用户定义的存储区域,其中包含容器本身和容器中的对象列表的元数据。
  • /account/container/object

    • 对象存储位置存储了数据对象及其元数据的位置。
3.2.4 Swift 组件

3.2.5 Swift API
  • Swift通过Proxy Server向外提供基于HTTP的REST服务接口,对帐户、容器和对象进行CRUD等操作

  • Swift RESTful API总结

    Swift API主要提供了以下功能:

    • 存储对象,并没有限制对象的个数。单个对象的大小默认最大值为5 GB,这个最大值用户可以自行配置。

    • 对于超过最大值的对象,可以通过大对象中间件进行上传和存储。

    • 压缩对象。

    • 删除对象,支持批量删除。

3.3 工作原理

Swift工作原理概述

​ Proxy Server负责处理用户的对象存取请求,Authentication(认证服务)负责对用户的身份进行认证,Proxy Server在接收到用户请求后,会把请求转发给存储节点上的Account Server、Container Server与Object Server进行具体的对象操作,而对象与其各个副本之间的数据一致性则由Auditor、Updater和Replicator来负责

Swift工作原理概述

Swift 关键技术

  1. Ring
  2. 一致性 哈希
  3. 数据一致性模型
  • Swift是基于一致性哈希技术,通过计算将对象均匀分布到虚拟空间的虚拟节点上,在增加或删除节点时可大大减少需移动的数据量
  • Swift放弃严格一致性,而采用最终一致性模型(Eventual Consistency),来达到高可用和无限水平扩展能力;如果数据出现了不一致,后台服务进程会在一定的时间窗口内通过检测和复制协议来完成数据同步,从而保证达到最终一致性
  • Ring将虚拟节点(partition)均衡地映射到一组物理设备上,Swift中Ring使用zone来保证数据的物理隔离,每个partition的replica都确保放在不同的zone中
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值