Openstack存储管理
OpenStack块存储管理-cinder
cinder的配置文件位置:/etc/cinder
cinder的日志文件位置:/var/log/cidner
openstack存储类型

OpenStack持久化存储简介

Cinder作用
Cinder在虚拟机与具体存储设备之间引入了一层"逻辑存储卷"的抽象,Cinder本身不是一种存储技术,并
没有实现对块设备的实际管理和服务
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进程:
bash
[root@controller ~]# ps -e | grep cinder
1746 ?
00:00:03 cinder-schedule
1748 ?
1772 ?
1791 ?
2812 ?
2931 ?
2959 ?
2961 ?
2964 ?
00:00:04 cinder-api
00:00:03 cinder-backup
00:00:04 cinder-volume
00:00:00 cinder-backup
00:00:00 cinder-volume
00:00:00 cinder-api
00:00:00 cinder-api
00:00:00 cinder-api
2967 ?
00:00:00 cinder-api
查看cinder-volume默认支持的存储设备:
bash
[root@controller ~]# cd /usr/lib/python3.6/site-packages/cinder/volume/drivers/
[root@controller drivers]# ls
Cinder架构说明

•Cinder默认使用LVM(Logical Volume Manager)作为后端存储(Backend Storage),而LVM通过在
操作系统与物理存储资源之间引入逻辑卷(Logical Volume)的抽象来解决传统磁盘分区管理工具的问
题。
•LVM将众多不同的物理存储资源(物理卷、Physical Volume,如磁盘分区)组成卷组。LVM从卷组中
创建一个逻辑卷,然后将ext3、ReiserFS等文件系统安装在这个逻辑卷上。
•除了LVM,目前Cinder已经以驱动的形式支持众多存储技术或存储厂商的设备作为后端存储,如SAN
(Storage Area Network)、Ceph、Sheepdog,以及EMC、华为等厂商的设备

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

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

•和Nova Scheduler类似,Cinder Scheduler也是经过Filter筛选符合条件的后端,然后使用Weigher计算
后端进行权重排序,最终选择出最合适的后端存储。
Cinder Scheduler服务
提取接收到的请求参数
通过配置的filter和输入参数对后端进行过滤
Availability_zone_filter
Capacity_filter
Capabilities_filter
Affinity_filter(SameBackendFilter/DifferentBackendFilter)
......
Weigher计算后端进行权重
CapacityWeigher/AllocatedCapacityWeigher
ChanceWeigher
GoodnessWeigher
......
选取最优的Backend并通过消息队列将请求发送到指定的后端
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来实现虚拟机挂载磁盘。
OpenStack对象存储-Swift
swift在openstack中的作用

- Swift并不是文件系统或者实时的数据存储系统,它称为对象存储,用于永久类型的静态数据的长期 存储,这些数据可以检索、调整,必要时进行更新
- 最适合存储的数据类型的例子是虚拟机镜像、图片存储、邮件存储和存档备份
- 因为没有中心单元或主控结点,Swift提供了更强的扩展性、冗余和持久性
- 使用命令swift stat可以显示Swift中的帐户、容器和对象的信息。
- Swift为帐户,容器和对象分别定义了Ring(环)将虚拟节点(分区)映射到一组物理存储设备上,包括 Account Ring、 Container Ring 、 Object Ring。
,Swift提供了更强的扩展性、冗余和持久性 - 使用命令swift stat可以显示Swift中的帐户、容器和对象的信息。
- Swift为帐户,容器和对象分别定义了Ring(环)将虚拟节点(分区)映射到一组物理存储设备上,包括 Account Ring、 Container Ring 、 Object Ring。
- Ring记录了存储对象与物理位置的映射关系,通过Zone、 Device、 Partition和Replica来维护映射信息。