首页 > 其他分享 >OpenStack学习笔记之四:Cinder流程介绍及GlusterFS存储对接

OpenStack学习笔记之四:Cinder流程介绍及GlusterFS存储对接

时间:2024-05-30 16:02:47浏览次数:22  
标签:备份 volume GlusterFS cinder 之四 Cinder root 客户端

4、Cinder详解及存储对接

4.1 Cinder流程介绍

4.1.1 流程结构

Cinder服务由四个进程组成:
cinder-api是一个WSGI应用程序,它接受并验证来自客户端的REST(JSON或XML)请求,并通过AMQP将它们路由到适当的其他Cinder进程。
cinder-scheduler确定哪个后端应作为卷创建或移动请求的目标。它维护后端的非持久状态(例如可用容量、功能和支持的额外规格),在做出放置决策时可以利用这些状态。调度程序使用的算法可以通过Cinder配置进行更改。
cinder-volume接受来自其他Cinder进程的请求,并充当Cinder驱动程序的操作容器。该进程是多线程的,并且通常每个Cinder后端都有一个执行线程(如Cinder配置文件中所定义)。
cinder-backup当客户端请求卷备份或恢复操作时,处理与潜在备份目标(例如通过NFS或OpenStack对象存储服务(Swift)导出的文件存储)的交互。

在这里插入图片描述

4.1.2 卷创建工作流程

以下部分将逐步介绍当用户请求从Cinder创建新卷时发生的步骤。

在这里插入图片描述

① 客户端通过调用REST API发出创建卷的请求(客户端可以使用python-cinder client CLI实用程序)。
cinder-api流程验证请求、用户凭据;一旦验证,将消息放入AMQP队列进行处理。
cinder-volume进程从队列中取出消息,将消息发送到cinder-scheduler以确定将卷配置到哪个后端。
cinder-scheduler进程将消息从队列中取出,根据当前状态和请求的卷标准(大小、可用区域、卷类型(包括额外规格))生成候选列表。
cinder-volumecinder-scheduler进程从队列中读取响应消息 ;通过调用后端驱动程序方法迭代候选列表,直到成功。
⑥ Cinder驱动程序通过与存储子系统交互创建请求的卷(取决于配置和协议)。
cinder-volume进程收集卷元数据和连接信息,并将响应消息发布到AMQP队列。
cinder-api进程从队列中读取响应消息并响应客户端。
⑨ 客户端接收的信息包括创建请求的状态、卷UUID等。

4.1.3 卷附加工作流程

在这里插入图片描述

① 客户端通过调用Nova REST API发出附加卷的请求(客户端可以使用python-nova client CLI实用程序)。
nova-api流程验证请求、用户凭据;验证后,调用Cinder API来获取指定卷的连接信息。
cinder-api流程验证请求、用户凭据;一旦验证,通过AMQP将消息发布到卷管理器。
cinder-volume从队列中读取消息,调用与要附加的卷相对应的Cinder驱动程序。
⑤ Cinder驱动程序准备Cinder卷以准备附件(具体步骤取决于所使用的存储协议)。
cinder-volume进程cinder-api通过AMQP队列将响应信息发布到进程。
cinder-apicinder-volume进程从队列中读取响应消息;将RESTful响应中的连接信息传递给Nova调用者。
⑧ Nova使用Cinder返回的信息创建与存储的连接。
⑨ Nova将卷设备/文件传递给管理程序,然后管理程序将卷设备/文件作为实际或虚拟块设备(取决于存储协议)附加到来宾VM。

4.1.4 卷备份工作流程

在这里插入图片描述

① 客户端通过调用REST API发出备份Cinder卷的请求(客户端可以使用python-cinder client CLI实用程序)。
cinder-api流程验证请求、用户凭据;一旦验证,通过AMQP将消息发布到备份管理器。
cinder-backup从队列中读取消息,为备份创建数据库记录,并从数据库中获取要备份卷的信息。
cinder-backup调用backup_volume要备份的卷对应的Cinder卷驱动的方法,传递备份记录和要使用的备份服务的连接(NFS、Swift等)
⑤ 适当的Cinder卷驱动程序连接到源Cinder卷。
⑥ 卷驱动程序调用backup已配置的备份服务的方法,并移交卷附件。
⑦ 备份服务将Cinder卷的数据和元数据传输到备份存储库。
⑧ 备份服务使用此备份的完整记录更新数据库,并cinder-api通过AMQP队列发布响应信息以进行处理。
cinder-api进程从队列中读取响应消息并将结果以RESTful响应形式传递给客户端。

4.1.5 卷恢复工作流程

在这里插入图片描述

① 客户端通过调用REST API发出恢复Cinder卷的请求(客户端可以使用python-cinder client CLI实用程序)。
cinder-api流程验证请求、用户凭据;一旦验证,通过AMQP将消息发布到备份管理器。
cinder-backup从队列中读取消息,获取备份的数据库记录以及新的或预先存在的卷数据库记录,具体取决于是否请求预先存在的卷。
cinder-backup调用backup_restore要备份的卷对应的Cinder卷驱动的方法,传递备份记录和要使用的备份服务的连接(NFS、Swift等)
⑤ 适当的Cinder卷驱动程序连接到目标Cinder卷。
⑥ 卷驱动程序调用restore已配置的备份服务的方法,并移交卷附件。
⑦ 备份服务在备份存储库中查找Cinder卷的备份元数据和数据,并使用它们将目标Cinder卷恢复到与原始备份操作在该操作时的源卷相匹配的状态。
⑧ 备份服务cinder-api通过AMQP队列发布响应信息以进行处理。
cinder-api进程从队列中读取响应消息cinder-backup并将结果以RESTful响应形式传递给客户端。

4.2. Cinder和其他存储对接

4.2.1 GlusterFS

  1. 两台虚拟机(19.101和19.102),给虚拟机添加一块磁盘,格式化并挂载给/volume目录
[root@GFS-node1 ~]# fdisk /dev/sdb
[root@GFS-node1 ~]# mkfs.xfs /dev/sdb1

[root@GFS-node1 ~]# mkdir /volume

[root@GFS-node1 ~]# vim /etc/fstab

/dev/sdb1 /volume	xfs	defaults 0 0		# 也可以用blkid命令查看uuid,直接用uuid挂载

[root@GFS-node1 ~]# mount -a
  1. 使用gluster创建存储
[root@GFS-node1 ~]# mkdir /volume/node1			# 注意:使用volume目录直接创建会报错

[root@GFS-node1 ~]# gluster peer probe 192.168.19.102	# 只加对端节点
[root@GFS-node1 ~]# gluster volume create vol1 replica 2 192.168.19.101:/volume/node1 192.168.19.102:/volume/node2		# 如果只有一个节点,就不用replica,也可以选择stripple
[root@GFS-node1 ~]# gluster volume start vol1
[root@GFS-node1 ~]# gluster volume info vol1
  1. 修改Cinder配置文件,挂载glusterfs
[root@openstack ~]# yum install glusterfs-fuse -y

[root@openstack ~]# vim /etc/cinder/cinder.conf 

enabled_backends=lvm,glusterfs			# 这里的glusterfs只是一个名字,和后面的配置必须对应

[lvm]							# 这部分正常来讲是应该没有的,packstack安装时创建的,便于做实验
iscsi_helper=lioadm
volume_group=cinder-volumes
iscsi_ip_address=192.168.19.201
volume_driver=cinder.volume.drivers.lvm.LVMISCSIDriver
volume_backend_name=lvm

[glusterfs]						# 新增加的部分
volume_driver=cinder.volume.drivers.glusterfs.GlusterfsDriver		# 加载驱动
glusterfs_shares_config=/etc/cinder/shares.conf			# 指定glusterfs卷使用的配置文件
volume_backend_name=GFS						# 取个别名,后面需要用到

[root@openstack ~]# vim /etc/cinder/shares.conf

192.168.19.101:/vol1
192.168.19.102:/vol1

[root@openstack ~]# systemctl restart openstack-cinder-api
  1. 将配置好的存储和Cinder关联起来
[root@openstack ~]# source keystonerc_admin 
[root@openstack ~(keystone_admin)]# cinder type-create glusterfs			# 有了类型后,创建云硬盘就可以选择这个类型,还需要将这个类型和后端卷的别名关联起来
+--------------------------------------+-----------+
|                  ID                  |    Name   |
+--------------------------------------+-----------+
| 64cb444a-ec36-4036-aca0-cfd5de769453 | glusterfs |
+--------------------------------------+-----------+
[root@openstack ~(keystone_admin)]# cinder type-key glusterfs set volume_backend_name=GFS
  1. 将创建好的云硬盘挂载给云主机使用时,宿主机必须要有glusterfs的驱动,否则挂载失败
[root@compute ~]# yum install glusterfs-fuse -y			# 所有的宿主机上操作

标签:备份,volume,GlusterFS,cinder,之四,Cinder,root,客户端
From: https://blog.csdn.net/wuxiaobing1234/article/details/139302241

相关文章

  • Hadoop集群模式的搭建之四:运行Hadoop集群
    格式化NameNode当第一次启动HDFS时要进行格式化,将NameNode上的数据清零,否则会缺失DataNode。以后启动无需再格式化,只要运行过Hadoop集群,其工作目录(/usr/local/src/hadoop/tmp)中就会有数据。如果需要重新格式化,则在重新格式化之前一定要先删除工作目录下的数据,否则格式化时会出问......
  • Cinderella
    Besidethebedwheremyfrailmotherlay,hopelessnessenvelopedusboth.Despiteourfamily'swealth,itprovedpowerlessagainsttheinevitabilityofherfate.Herpassingleftmeinsolitude,hermemoryforeverentwinedwiththeblossomsinthega......
  • Cinderella
    Istandbesidethebed,onwhichmymomisweaklying,hopeless.Althoughmyfatherisrich,itstillcan’tsavemymom.Afterthatday,mymomleavesmeforeverandIbecomealone.Sheisburiedinagardenwhereflowersbrightlybloom,Imissmymomeve......
  • cinder2019#bug
    OpenStack#bug2019888处理对于2023年5月10日之后的所有OpenStack版本,需要将Nova配置为向Cinder发送服务令牌,并让Cinder接收它。这是CVE-2023-2088修复程序所要求的。有关详细信息,请参阅OSSA-2023-003。nova配置vim/etc/nova/nova.conf'''[DEFAULT]'''ser......
  • RabbitMQ3.x之四_RabbitMQ角色说明及创建用户与授权
    RabbitMQ3.x之四_角色说明及创建用户与授权文章目录RabbitMQ3.x之四_角色说明及创建用户与授权1.访问和授权1.Tags说明2.命令行示例2.管理界面新建用户及访问授权1.管理界面新建用户2.管理界面中的授权说明3.guest用户不能远程登录提示3.创建用户1.基本命令2......
  • C#9.0新特性详解系列之四:顶级程序语句(Top-Level Programs)
    原文链接:https://www.cnblogs.com/markkang/p/14091908.html1背景与动机通常,如果只想用C#在控制台上打印一行“HelloWorld!”,这可不是Console.WriteLine("HelloWorld!");一条语句就可以搞定的,还涉及到其他必要基础代码(如定义类和入口函数Main),例如下面:usingSystem;classProgr......
  • 机械结构篇之四足机器人腿部结构
    欢迎关注微信公众号“四足机器人研习社”,本公众号的文章和资料和四足机器人相关,包括行业的经典教材、行业资料手册,同时会涉及到职业知识学习及思考、行业发展、学习方法等一些方面的文章。目录   1.四足机器人腿部机构概述 2.足式机器人腿部设计要点 3.四足机器人......
  • 在Linux中,在分布式环境中如何实现文件系统冗余和同步?(例如DRBD、GlusterFS)
    在Linux中,实现分布式环境下的文件系统冗余和同步可以通过使用专门的分布式文件系统技术和块级复制技术来完成。这里重点介绍两种方案:DRBD(DistributedReplicatedBlockDevice)和GlusterFS。1.DRBD(DistributedReplicatedBlockDevice)DRBD是一种块设备级别的存储复制......
  • MyBatisPlus 之四:MP 的乐观锁和逻辑删除、分组、排序、链式的实现步骤
    乐观锁乐观锁是相对悲观锁而言的,乐观锁假设数据一般情况不会造成冲突,所以在数据进行提交更新的时候,才会正式对数据的冲突与否进行检测,如果冲突,则返回给用户异常信息,让用户决定如何去做。乐观锁适用于读多写少的场景,这样可以提高程序的吞吐量。乐观锁采取了更加宽松的加......
  • 第六十八天 BBS项目之四 分组连表查询 路由匹配进阶使用
    一、内容回顾#1登录页面搭建-bootsrtap的栅格,form-group,input:form-control-验证码#2验证码图片的生成-1pillow生成一张图片-2图片上写文字-3设置文字大小,设置文字颜色,设置文字字体格式(ttf)-45位大小写字母,数字-5点,线,弧形-6放到bytesio,取出来 img.save(f,'p......