存储侧:
块存储
文件存储
对象存储
存储简介
特点:
1、OS盘只能使用块存储
2、不能实现共享【不能解决两个主机同时去读写同一个block的问题】
3、性能最优
filesystem------文件存储
VIMS:高可用文件系统
------提供了锁机制
对象存储
------解锁key的方式【键用于标识存储在系统中的数据,而值则存储了实际的数据】
1.OpenStack 存储类型
从数据保存时间的角度分为临时存储(非持久存储)和持久存储
ephemeral storge临时 存储:是指数据被虚拟机实例使用,虚拟机实例被关机、重启或删除,该实例中的所有数据信息都回丢失;
Persistent storage持久 化存储:维护数据持续可用,保护数据安全性,持久化存储设备的周期独立于任何其他系统设备或资源,无论虚拟机实例是否终止
OpenStack持久化存储
1、块存储Cinder
2、对象存储Swift
3、文件存储Manila
块存储服务
1.Cinder简介
Cinder是OpenStack 块存储服务,为Nova虚拟机、Ironic裸机、容器提供卷
Cinder为后端不同的存储设备提供了统一的接口,不同的块设备服务厂商在Cinder中实现其驱动,使其可以被OpenStack整合管理
Cinder在虚拟机与具体存储设备之间引入了一层"逻辑存储卷"的抽象,Cinder本身不是一种存储技术,并没有实现对块设备的实际管理和服务
Cinder只是提供了一个中间的抽象层,为后端不同的存储技术,提供了统一的接口
不同的块设备服务厂商在Cinder中以驱动的形式实现上述接口与OpenStack进行整合
2.Cinder架构
3.Cinder架构说明
4.Cinder创建卷流程
5.Cinder挂载卷流程
块存储
对象存储
key-value
对象存储服务Swift
1.简介
简介:
• 提供高度可用、分布式、最终一致的对象存储服务
• 可以高效、安全且廉价地存储大量数据
• 非常适合存储需要弹性扩展的非结构化数据
定位:
• Swift是OpenStack对象存储服务,可以存储 虚拟机实例创建所需的镜像
• Swift 作为 OpenStack 持久存储之一,比较适合存放静态数据
2.Swift数据模型
• Container 不能嵌套,不能包含下级的 Container ;对象由元数据和内容两部分组成, Swift 要求一个对象必须存储在某个 Container 中,因此一个 Account 应该至少由一个 Container 来提供对象的存储。
数据下发
DHT环 2^32次方个点
key---block-----2^32次
优化:
partition分区(分成8片):
key-hash--partition-8(3600-华为)次===partition id
开源OpenStack 的partition=2^存储节点数
二次优化:
列表--存储设备列表关系【partition--device(disk)】一个partition只能来自一个device
key--hash-partition-disk(partition数量)
下盘:
disk--磁盘读写---iops
副本机制:
N--3副本机制---33%资源利用率
R--读副本数
W--写副本数
最终一致性原则:
在周期内是可以不同步的
R+W≤N:有可能读出来最新的数据---弱一致性原则
R+W>N:一定可以读出来最新的数据--强一致性原则
副本级别:
- disk级别
- 服务器级别
- 机柜级别:不同的副本放在不同的数据中心
- DC级别
3.swift组件
- Proxy Server代理服务,对外提供对象服务 API,由于采用无状态的 REST 请求协议,可以进行横向扩展来均衡负载
Authentication Server认证服务,验证访问用户的身份信息,并获得一个对象访问令牌(Token),在一定的时间内会一直有效,验证访问令牌的有效性并缓存下来直至过期时间
Cache Server缓存服务,缓存的内容包括对象服务令牌,账户和容器的存在信息,但不会缓存对象本身的数据;缓存服务采用Memcached集群,Swift会使用一致性散列算法来分配缓存地
Auditor审计服务,检查对象,容器和帐户的完整性,如果发现比特级的错误,文件将被隔离,并复制其他的副本以覆盖本地损坏的副本;其他类型的错误会被记录到日志中
Replicator复制服务,检测本地分区副本和远程副本是否一致,发现不一致时会采用推式(Push)更新远程副本,并且确保被标记删除的对象从文件系统中移除
Updater更新服务,当对象由于高负载的原因而无法立即更新时,任务将会被序列化到在本地文件系统中进行排队,以便服务恢复后进行异步更新
Proxy Server可以说是Swift的核心,运行着swift-proxy-server进程。它提供Swift API服务,负责Swift其余组件间的通信。对于每个客户端的请求,它在Ring中查询相应的Account、Container以及Object的位置,并且转发这些请求。
- Account Server
帐户服务,提供帐户元数据和统计信息,并维护所含容器列表的服务,每个帐户的信息被存储在一个 SQLite 数据库中
- Container Server
容器服务,提供容器元数据和统计信息,并维护所含对象列表的服务,每个容器的信息也存储在一个 SQLite 数据库中
- Object Server
对象服务,提供对象元数据和内容服务,每个对象的内容会以文件的形式存储在文件系统中,元数据会作为文件属性来存储,建议采用支持扩展属性的XFS文件系统
4.swift架构
• Swift 从架构上可以划分为两个层次: 访问层 ( Access Tier )与 存储层 ( Storage Nodes )。
• 访问层 主要包括两部分,即 Proxy Node (代理服务节点)与 Authentication (认证),分别负责 RESTful 请求与用户身份的认证。
▫ 在 Proxy Node 节点上运行着 Proxy Server ,负责处理用户的 RESTful 请求,在接收到用户请求时,需要对用户的身份进行认证,此时用户所提供的身份资料会被转发给认证服务进行处理。
▫ Proxy Server 可以使用 Memcached (高性能的分布式内存对象缓存系统)进行数据和对象的缓存,减少数据库读取的次数,提高用户的访问速度。
▫ Proxy Node 在收到用户的访问请求时,会将其转发到相应的存储节点上。
• 存储层由一系列的物理存储节点组成,负责对象数据的存储。
• 存储层在物理上分为以下 5 个层次:
▫ Region :地理上隔绝的区域,每个 Swift 系统默认至少有 1 个 Region 。
▫ Zone :在每个 Region 的内部又划分了不同的 Zone 来实现硬件上的隔绝。可以简单地将其理解为一个 Zone 代表了一组独立的存储节点。
▫ Storage Node :存储对象数据的物理节点。
▫ Device :可以简单地理解为磁盘。
▫ Partition :仅仅指在 Device 上的文件系统的目录,和我们通常所理解的硬盘分区是完全不同的概念。
Swift工作原理概述
lProxy Server负责处理用户的对象存取请求,Authentication(认证服务)负责对用户的身份进行认证,Proxy Server在接收到用户请求后,会把请求转发给存储节点上的Account Server、Container Server与Object Server进行具体的对象操作,而对象与其各个副本之间的数据一致性则由Auditor、Updater和Replicator来负责