openstack学习-理解存储管理

openstack存储类型

openstack中存储可以分为两类,如下图所示:

目前openstack支持三种类型的持久存储:块存储、对象存储和文件系统存储


因为目前Manila使用较少,重点为CInder和Swift

块存储Cinder

Cinder简介

Cinder在OpenStack中的位置和作用

Cinder的核心功能是对卷的管理,允许对卷、卷的类型、卷的快照、卷备份进行处理。它为后端不同的存储设备提供给了统一的接口,不同的块设备服务厂商在Cinder中实现其驱动,可以被Openstack整合管理

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 组件-API

Cinder API对外提供REST API,对操作需求进行解析,并调用处理方法:

  • 卷create/delete/list/show
  • 快照create/delete/list/show
  • 卷attach/detach(nova调用)
  • 其他:
    Volume types
    Qutotas
    Backups

    Cinder组件-Scheduler

    Cinder scheduler负责收集后端上报的容量,能力信息,根据设定的算法完成卷到指定cinder-volume的调度,它通过过滤和称权,筛选出合适的后端:

    根据后端的能力进行筛选

  • Drivers定期报告后端的能力和状态
  • 管理员创建的卷类型
  • 创建卷时,用户指定卷类型

Cinder组件-Volume

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

Cinder默认的后端驱动是LVM

典型工作流程


Cinder-volume会定期收集底层后端的容量信息,并通知Scheduler更新内存中的Backend信息

创建卷类型的目的是为了筛选不同的后端存储,例如SSD,STAT,高性能,低性能,通过创建不同的自定义卷类型,创建卷时自动给筛选出合适的后端存储

Cinder API

  • 检查卷参数合法性(用户输入,权限,资源是否存在等)
  • 准备创建参数字典,预留和提交配额
  • 在数据库中创建对应的数据记录
  • 通过消息列队将请求和参数发送到Scheduler

Cinder Scheduler


提取收到的请求参数
通过配置的filter和输入参数后端进行过滤

  • Avialability_zone_filter
  • Capactiy_filter
  • Capabilities_filter
  • Affinity_filter
  • Weigher计算后端进行权重
  • CapactiyWeigher/AllocatedCapacityWeigher
  • ChanceWeigher
  • GoodnessWeigher
  • 选取最优的Backend并通过消息列队将请求发送到指定的后端

和Nova Scheduler类似,Cinder Scheduler也是经过Filter删选合适条件的后端,然后使用Weigher计算后端进行权重排序,最终选择出最合适的后端存储

Cinder Volume

提供接收到的请求参数
调用对应的Driver在后端创建世纪的卷
使用Driver返回的模型更新数据库中的记录

Cinder挂载卷流程


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

  • Nova调用Cinder api创建卷,传递主机的信息,如hostname,ISCSI initiator name,FC WWWPNs
  • Cinder API将该信息传递给Cincer Volume
  • Cinder Volume通过创建卷时保存的host信息找到对应的Cinder Driver
  • Cinder Driver通知存储允许该主机访问该卷,并返回该存储的连接信息(如ISCSI iqn,portal,FC target WWPN,NFS path)
  • Nova调用针对不同存储类型进行主机识别磁盘的代码(Cinder提供了brick模块用于参考)实现识别磁盘或者文件设备
  • Nova通知Cinder已经进行了挂载
  • Nova将主机的设备信息传递给hypervisor来实现虚拟机挂载磁盘

    Cinder主要操作

对象存储Swift

Swift简介

Swift提供高度可用、分布式、最终一致的对象存储服务


Swift并不是文件系统或者试试的数据存储系统,它称为对象存储,用于永久类型的静态数据的长期存储,这些存储可以检索,调整,必要时进行更新
最蛇和存储的数据类型的例子是虚拟机镜像,图片存储,邮件存储和存档备份
因为没有中心的单元或主控节点,Swift提供了更强的扩展性,冗余和持久性
Swift经常用于存储镜像或者用于存储虚拟机实例卷的备份副本

Swift应用
镜像存储后端:在Openstack中与镜像服务Glance结合,为其存储镜像文件
静态数据存储:由于swift的扩展能力,适合存储日志文件和数据备份仓库

Swift架构


Swift中对象存储URL如下所示:
https://swift.example.com/va/account/container/object
URL有两个部分:集权位置和存储位置
集群位置:swift.example.com/v1/
存储位置(对象):/account/containr/oject
存储位置有如下三种:
/account
账户存储位置是唯一命名的存储区域,其中包含账户本身的元数据(描述性信息)以及账户中的容器列表
/account/container
容器存储位置是账号内的用户定义的存储区域,其中包含容器本身和容器中的对象列表的元数据
/account/container/object
对象存储位置存储了数据对象及元数据的位置。

Swift组件

Proxy Server:对外提供对象服务API,由于采用无状态的REST请求协议,可以进行横向扩展来负载均衡
Account Server:提供账户元数据和统计信息,并维护所含容器列表的服务,每个账号的信息被存储在一个SQLite数据库中
Container Server:提供容器元数据和统计信息,并维护所含对象列表的服务,每个容器的信息也存储在一个SQLite数据库中
Object Server:提供对象元数据和内容服务,每个对象的内容会以文件的形式存储在文件系统中,元数据会作为文件属性来存储
Replicator:检测本地分区副本和远程副本是否一致,发现不一致时会采用推式(Push)更新远程副本,并且确保被标记删除的对象从该文件系统中移除
Updater:当对象由于高负载的原因而无法立即更新时,任务将会被序列化在本地文件系统中进行排队,以便服务恢复后进行异步更新
Auditor:检查对象,容器和账户的完整性,如果发现比特级错误,文件将被隔离,并复制其他的副本以覆盖本地损坏的副本;其他类型错误会被记录到日志中
Account Reaper:移除标记为删除的账户,删除其所包含的所有容器和对象

Swift API

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

Swift数据模型

三层逻辑结构:Accout/Contianer/Object
每层节点数没有限制,可以任意扩展

原文地址:https://blog.51cto.com/11555417/2437914

时间: 2024-10-13 03:55:09

openstack学习-理解存储管理的相关文章

(转载)openstack学习指南

OpenStack Hacker养成指南 朱 荣泽     |     2013. 8. 8 [toc wrapping="right"] 0 阅读指南 希望本文能够解开你心中萦绕已久的心结,假如是死结,请移步到 https://wiki.openstack.org/wiki/Main_Page 学习OpenStack其实就是学习各种Python库的过程. 把OpenStack的设计原则贴在你的墙上. https://wiki.openstack.org/wiki/BasicDesig

学习理解shell的好办法--编写自己的shell 之二

shell脚本的最简单形式就是一串命令的罗列,shell充当解释器,一条条挨个执行,直到最后一个或遇到退出命令.但这只能做很简单的事情,只是省区了每次都要敲一边命令的时间,要想完成更负责的功能,还要加上这些东西: 1.控制 前面的条件满足了,然后干什么:不满足,干什么. 2.变量 c=a+b, 用一种形式代表另一种形式,就是变量.因为形式不同了,就能用一种不变的表示另一种变化的.比如"编程语言"就可以当一个变量,可以赋值为"C语言","Perl语言&quo

Android中的context的学习理解

Android中Context的学习理解Context是一个抽象基类,通过它getResuources.getAssets and start 其他组件(Activity,Service,broadCast,getSystemService),可以这样理解:Context提供了一个运行环境for App, then app 可以访问资源,才能完成与其他组件,服务的交互,Context定义了一套基本的功能接口or一套规范 //todo

OpenStack 学习笔记

1 安装 2 管理 3 监控 书籍推荐:OpenStack Cloud Computing Cookbook OpenStack 学习笔记

(四)Openstack学习之WSGI:自己动手写例子

WSGI 是Web Services Gateway Interface的缩写. 如果想深入了解,可以阅读 PEP 333 文档,包含有任何你想要的:)community errata, .这篇文章将手把手教你写一个简单的WSGI例子. 注意:我用的Python版本是.2.7.x. 最经典,最简答的WSGI样当属 Hello World app. 咱们将要用到 virtualenv 去创建一个封闭的Python项目环境: $ virtualenv wsgi-example $ cd wsgi-e

学习理解 makefile

学习理解 makefile 模拟个应用的例子: 有个工程包括头文件 001.h.002.h.003.h.004.h.005.h.006.h.007.h 共7个:程序文件 001.c.002.c.003.c.004.c.005.c.006.c.007.c.008.c.009.c.010.c 共10个文件.看着头大吧,先不关心具体内容. 现在来编译该工程.如下: # cd example/ # gcc 001.c 002.c 003.c 004.c 005.c 006.c 007.c 008.c 0

学习理解shell的好办法--编写自己的shell 之一

本文参考自<Unix/Linux编程实践教程>, 这是一本讲解unix系统编程的书,注重实践,理解难度不大,推荐大家阅读,敲完本书后,对于理解unix系统如何运作会有更深的视角,回过头再学习别的 Linux相关的东西时,感受非常不一样,这是一本可以提高"内功"的书.自己加了些很菜的解释,以便其他小白理解,大牛直接飘过吧,错误之处希望指正. shell是一个管理进程和运行程序的程序,用来人和机器交互 常用的shell如sh,bash,zsh,csh,ksh等都有三个主要功能:

1. OpenStack - 学习经验总结

经过一段时间OpenStack学习,

openstack学习-存储管理操作

实验流程 Dashboard操作 卷类型和QOS管理 使用admin用户登陆Dashboard界面,导航栏选择"管理员-卷-卷类型",点击"创建卷类型"输入类型名称"VolumeType_web",勾选"公有",进行创建单击"创建 QOS 规格"输入Qos规格名称"QoS_web","消费者(啥翻译?)"选择"后端",进行创建返回卷类型列表,查看已