详解OpenStack常见模块_1简述openstack主要的组成模块都有哪些-程序员宅基地

技术标签: linux  事件模块  OpenStack  openstack  

引言

  • OpenStack 云平台服务的提供主要是依靠 Nova、Glance、Cinder 和 Neutron 四个核心模块完成的, 四个辅助模块 Horizen 、Ceilometer 、Keystone、Swift 提供的访问、监控、权限和对象存储功能。

  • 服务进程之间的通讯通过消息队列MQ实现

 

一、控制台 Horizon

  • 管理、控制OpenStack服务的web控制面板

1.1 Horizon 的特点及管理任务:

  • 实例管理:创建、删除实例,查看终端日志,远程连接实例,管理卷等;

  • 访问与安全管理:创建安全组,管理密匙对,设置浮动 IP 地址等;

  • 偏好设定:对虚拟硬件模板可以进行不同程度的偏好设定;

  • 镜像管理:导入、编辑或删除镜像;

  • 用户管理:创建用户、管理用户、设置配额、查看服务目录等;

  • 卷管理: 管理卷和快照;

  • 对象存储处理:创建、删除容器和对象。

二、身份认证模块 Keystone

  • 负责管理身份验证、服务规则和服务令牌功能的模块

2.1 主要涉及的概念

1.用户(user)

在 OpenStack 中,用户是使用 OpenStack 云服务的人、系统或服务。用户可以登录或使用指定的 token 访问云中的资源,并可以被指派到指定的项目或角色。认证服务通过对用户身份的确认,来判断一个请求是否被允许。用户通过认证信息如密码、API Keys 等进行验证。

2.项目(project)

项目是各个服务中的一些可以访问的资源集合,用来分组或隔离资源或身份对象。不同服务中,项目所涉及的资源不同。一个项目中可以有多个用户,一个用户可以属于一个或多个项目。

3.角色(role)

角色是一组用户可以访问的资源权限集合,这些资源包含虚拟机、镜像、存储资源等。

4.服务(service)

用户使用云中的资源是通过访问服务的方式实现,OpenStack 中包含许多服务,如提供计算服务的 Nova、提供镜像服务的 Glance 以及提供对象存储服务的 Swift。一个服务可以确认当前用户是否具有访问其资源的权限。但是当一个用户尝试访问其项目内的 service 时,该用户必须知道这个服务是否存在以及如何访问这个服务。

5.令牌(token)

令牌是一串数字字符串,用于访问 OpenStack 服务的 API 以及资源。在 keystone 中主要是引入令牌机制来保护用户对资源的访问。

6.端点(endpoint)

所谓端点,是指用于访问某个服务的网络地址或 URL。如果需要访问一个服务,则必须知道该服务的端点。

2.2 创建云主机的流程图

 

三、镜像模块 Glance

  • 提供发现、注册和下载的镜像服务,虚拟机镜像的集中式仓库

  • 通过虚拟机镜像创建虚拟机

  • 在生产环境中这个模块本身不存储大量的数据,需要挂载后台存储 swift 来存放实际的镜像数据

3.1 主要涉及的组件

1.glance-api

glance-api 用于接收镜像 API 的调用,诸如镜像发现、恢复以及存储等。作为一个后台进程,glance-api 对外提供 REST API 接口,响应用户发起的镜像查询、获取和存储的调用。

2.glance-registry

glance-registry 用于存储、处理和恢复镜像的元数据,元数据包括镜像的大小和类型等属性,registry 是一个内部服务接口,不建议暴露给普通用户。

3.database

database 用于存放镜像的元数据,可以根据需要选择数据库,如 MySQL、SQLite 等。

4.storage repository for image files

一般情况下,glance 并不需要存储任何镜像,而是将镜像存储在后端仓库中。Glance 支持多种 repository。主要包括对象存储 Swift、块存储 Cinder、VMware 的 ESX/ESXi 或者 vCenter、亚马逊的 S3、HTTP 可用服务器、Ceph 等。

3.2 镜像格式

1.RAW

RAW 是一种没有格式或裸格式的磁盘文件类型,RAW 对数据不做任何修饰和处理, 直接保存最原始的状态,所以在性能方面非常出色。由于RAW 格式保存原始数据,因此更容易和其他镜像格式进行转换。

2.QCOW2

主要特性是磁盘文件大小可以动态按需增长,并且不会占用所有的实际磁盘空间大小。与 RAW 相比,使用这种格式可以节省磁盘容量。

3.VHD

VHD 是微软公司产品使用的磁盘格式。Virtual PC(微软早期虚拟化产品)和 Hyper-V 使用的就是 VHD 格式。VirtualBox 也提供了对 VHD 的支持。如需在 OpenStack 上使用Hyper-V 类型的虚拟化,就应上传 VHD 格式的镜像文件。

4.VMDK

VMDK 是 VMware 公司产品使用的磁盘格式。目前也是一个开放的通用格式,除了VMware 自家的产品外,QEMU 和 VirtualBox 也提供了对 VMDK 格式的支持。

5.VDI

VDI 是 Oracle 公司的 VirtualBox 虚拟软件所使用的格式。

6.ISO

ISO 是指一种存档数据文件在光盘上的格式。

7.AKI、ARI、AMI

Amazon 公司的 AWS 所使用的镜像格式。

四、计算模块 Nova

  • 负责虚拟机实例的生命周期管理、网络管理、存储卷管理、用户管理以及其他的相关云平台管理功能

  • 模块主要由 Python 实现

  • Nova 中的各个组件是以数据库和队列(MQ)为中心进行通信

4.1 主要组件

1.Nova-api 服务

接收和响应来自最终用户的计算 API 请求,对外提供一个与云基础设施交互的接口,也是外部可用于管理基础设施的唯一组件。所有对 Nova 的请求都首先由 nova-api 处理。nova-api 向外界暴露若干 HTTP REST API 接口。

2.Nova-api-metadata 服务

接收来自虚拟机发送的元数据请求。 Nova-api-metadata 服务一般在安装 Nova-Network 服务的多主机模式下使用。

3.Nova-Compute 服务

运行在计算节点上,主要负责管理节点上的实例。OpenStack 对实例的操作都是交给 nova-compute 来完成的。它是一个持续工作的守护进程,通过 Hypervisor 的 API 来创建和销毁虚拟机实例。

4.Nova-placement-api 服务

用于追踪记录资源提供者目录和资源使用情况,这些资源包括计算、存储以及 IP 地址池等。

5.Nova-Conductor 模块

作用于 Nova-Compute 服 务与 数 据 库之 间 , 避免 了由Nova-Compute 服务对云数据库的直接访问。它可以横向扩展。通过 Nova-conductor 实现对数据库的连接操作,可以实现更高的系统安全性以及更好的系统伸缩性。

6.Nova-Scheduler 服务

Nova-Scheduler 接收到一个来自队列的运行虚拟机实例请求, 然后决定在哪台计算服务器主机来运行该虚拟机。通过恰当的调度算法从可用资源池获得一个计算服务。

五、网络模块 Neutron

  • 实现实例与实例之间以及实例与外部网络之间的通信

  • 提供二层(L2)vSwitch交换和三层(L3)Router路由抽象功能

5.1 实现功能

  • Router:为租户提供路由、NAT等服务

  • Network:对应于一个真实物理网络中的二层局域网(VLAN)

  • Subnet:指定一段IPV4或IPV6地址并描述其相关的配置信息

5.2 虚拟网络的形式

  • 对二层物理网络的抽象与管理

1.虚拟交换机/网桥

OpenStack 网络中,对于二层交换机有两种的抽象方式,一种是通过 Linux bridge 实现, 另外一种是通过 OpenvSwitch 实现。两种方式都可以实现二层网路的抽象。

(1)Linux bridge Linux bridge 由 Linux 内核实现, 是工作在二层的虚拟网络设备, 功能类似于物理的交换机

(2)Open vSwitch 类似于 Linux bridge,Open vSwitch 也可以实现对二层网络的抽象,对虚拟网络提供分布式交换机功能。它支持各种组网类型, 功能全面, 支持基本的 vlan 功能, 也支持 QOS 以及 NetFlow、sFlow 标准的管理接口和协议。

2.虚拟路由器

虚拟路由器是对网络设备的一种抽象,实现了租户间多网络构建以及内部网络和外部网络之间的通信问题。其实现原理和真实路由器一致,根据路由表转发数据包,同时还支持 NAT 地址转换以及浮动 IP 地址设置

3.namespace

通过 namespace 进行隔离,每个 namespace 都有自己的独立网络栈,包括路由表、防火墙规则、网络接口等。同时,Neutron 为每个 namespace 提供 DHCP 和路由服务。所以各个租户之间的网络地址允许重叠,因为它们在不同的 namespace 中进行抽象

4.DHCP

Neutron 提供 DHCP 服务的组件是 DHCPagent,默认通过 dnsmasq 实现 DHCP 功能。dnsmasq 是一个提供 DHCP 与 DNS 服务的开源软件。在 OpenStack 网络中, DHCP 服 务 同 样 被 隔 离 在 namespace 中 , 并 通 过 Linux Bridge 连 接 DHCP namespace 中的接口。

5.浮动 IP 地址

通常情况下, 在搭建 OpenStack 网络时, 会在虚拟路由器启用 SNAT 功能。这将给 OpenStack 网络提高安全性和便利性,具体表现如下。

  • 启动 NAT 功能,OpenStack 内部网络被保护起来;

  • 虚拟机访问外部网络通过地址转换的方式,更容易让外部路由设备寻路, 即不需要增加额外的回包路由条目。

所以,浮动 IP 地址是用来解决外部网络访问虚拟机的问题。如果虚拟机不需要外部网络访问,也可以不绑定浮动 IP 地址。

5.3 组网模型

1.Local 网络

Local 网络模型特点:

  • 不具备 vlan 特性,不能对二层网络进行隔离。

  • 同一个 local 网络的虚拟机实例会连接到相同的虚拟交换机上, instance 之间可以通信。

  • 虚拟交换机没有绑定任何物理网卡, 无法与宿主机之外的网络通信。

2.Flat 网络

Flat 组网模型不支持 vlan , 属于扁平化的网络模型。Linux bridge 直接绑定物理网卡,并连接虚拟机。每个 Flat 网络都会独占一个物理网卡,该物理网卡不能配置 IP 地址, 所有连接到此网络的虚拟机共享一个私有 IP 网段

3.vlan 网络

OpenStack 通过 vlan 网络解决了多租户之间的网络隔离问题。如果需要其他 vlan 网络, 可以创建新的物理网卡子接口,并绑定新网络。

  • vlan 网络存在的缺点:

    • vlan 的数量限制:4096 个 vlan 数量不能满足大规模云计算数据中心的需求;

    • 物理网络基础设施的限制:基于 IP 子网的区域划分限制了需要二层网络连通性的应用负载的部署;

    • TOR 交换机 MAC 表耗尽: 虚拟化以及节点间过多的流量导致更多的 MAC表项。

4.VXLAN 网络

VXLAN 网络使用的是隧道技术,是目前 OpenStack 广泛使用的网络技术。相比于 vlan 模型有以下改进。

  • 租户数量从 4K 增加到 16M;

  • 租户内部通信可以跨越任意 IP 网络,支持虚拟机任意迁移;

  • 一般来说,每个租户逻辑上都有一个网关实例,IP 地址可以在租户间进行复用;

  • 能够结合 SDN 技术对流量进行优化。

六、块存储 Cinder

  • 提供对Volume从创建到删除整个生命周期的管理Cinder功能

6.1 cinder的功能

  • 提供RESTAPI

  • 调度Volume 创建请求,合理优化存储资源的分配

  • 支持多种back-end(后端)存储方式

6.2 Cinder组件

1.Cinder-Api

用来接受 API 请求,并将其路由到 Cinder-Volume 执行

2.Cinder-Backup守护进程

Cinder-Backup 服务提供任何种类备份卷到一个备份存储提供者。就像 Cinder-Volume服务,它与多种存储提供者在驱动架构下进行交互。

3.Cinder-Volume

Cinder-Volume 用来与块存储服务和 Cinder-Scheduler 进程进行直接交互。也可以与这些进程通过一个消息队列进行交互。Cinder-Volume 服务响应到块存储服务的读写请求, 可以在多种存储驱动架构下交互。当用户请求一个存储资源时,由 Cinder-API 负责接受请求,Cinder-Scheduler 负责调度资源,而真正执行存储任务的是 Cinder-Volume。这样的工作机制使得存储架构非常容易扩展。当存储资源不足时,可以增加存储节点(运行Cinder-Volume )。 当客户的请求量太大调度不过来时, 可以增加调度( 运行Cinder-Scheduler)。

4.Message Queue

消息队列作用是在块存储的进程之间路由信息。Cinder 各个子服务通过消息队列实现进程间通信和相互协作

5.Cinder-Scheduler

Cinder-Scheduler 守护进程会选择最优存储节点来创建卷

6.Database

Cinder 有一些数据需要存放到数据库中,一般使用 MySQL。数据库是安装在控制节点上的,比如在我们的实验环境中,可以访问名称为“Cinder”的数据库。

6.3 volume卷创建的步骤

  1. 用户向cinder-API发送创建卷请求

  2. API对请求做一些必要处理后,向消息队列发送消息

  3. cinder-Scheduler从消息队列Message Queue获取到消息,执行调度算法,选出节点A

  4. cinder-Scheduler向消息队列Messaging发送消息(让存储节点A创建Volume)

  5. 存储节点A的cinder-Volume从消息队列中获取到消息,通过卷提供者的驱动创建卷

七、对象存储 Swift

  • 使用普通硬件来构建冗余的、可扩展的分布式对象存储集群,存储容量可达PB级

  • Swift属于对象存储,用于永久类型的静态数据的长期存储(如虚拟机镜像、图片存储、邮件存储和存档备份)

7.1 Swift特点

  • 极高的数据持久性

  • 无单点故障

  • 完全对称的系统架构

  • 简单、可依赖

  • 无限的可扩展性

7.2 主要组件

1.代理服务(Proxy Server)

Swift 通过 Proxy Server 向外提供基于 HTTP 的 REST 服务接口,会根据环的信息来查找服务地址并转发用户请求至相应的账户、容器或者对象,进行CRUD(增删改查)等操作。由于采用无状态的 REST 请求协议,可以进行横向扩展来均衡负载。

2.认证服务(Authentication Server)

验证访问用户的身份信息,并获得一个对象访问令牌(Token),在一定的时间内会一直有效;验证访问令牌的有效性并缓存下来直至过期。

3.缓存服务(Cache Server)

缓存的内容包括对象服务令牌,账户和容器的存在信息,但不会缓存对象本身的数据;缓存服务可采用 Memcached 集群,Swift 会使用一致性哈希算法来分配缓存地址。

4.账户服务(Account Server)

提供账户元数据和统计信息,并维护所含容器列表的服务,每个账户的信息被存储在一个 SQLite 数据库中。

5.容器服务(Container Server)

提供容器元数据和统计信息(比如对象的总数,容器的使用情况等),并维护所含对象列表的服务。容器服务并不知道对象存储在哪,只知道指定容器里存的哪些对象。

6.对象服务(Object Server)

提供对象元数据和内容服务,可以用来存储、检索和删除本地设备上的对象。在文件系统中,对象以二进制文件的形式存储,它的元数据存储在文件系统的扩展属性(xattr)中, 建议采用默认支持扩展属性(xattr)的 XFS 文件系统。每个对象使用对象名称的哈希值和操作时间戳组成的路径来存储。最后一次写操作总可以成功,并确保最新一次的对象版本将会被处理。删除也被视为文件的一个版本(一个以".ts"结尾的 0 字节文件,ts 表示墓碑)。

7.复制服务(Replicator)

会检测本地分区副本和远程副本是否一致,具体是通过对比哈希文件和高级水印来完成,发现不一致时会采用推式(Push)更新远程副本:对于对象的复制、更新使用 rsync 同步文件到对等节点。帐号和容器的复制通过 HTTP 或 rsync 来推送整个数据库文件上丢失的记录;另外一个任务是确保被标记删除的对象从文件系统中移除:当有一项(对象、容器、或 者帐号)被删除,则一个墓碑文件被设置作为该项的最新版本。复制器将会检测到该墓碑文件并确保将它从整个系统中移除。

8.更新服务(Updater)

当对象由于高负载或者系统故障等原因而无法立即更新时,任务将会被序列化到在本地文件系统中进行排队,以便服务恢复后进行异步更新

9.审计服务(Auditor)

在本地服务器上会反复地爬取来检查对象、容器和账户的完整性,如果发现比特级的错误,文件将被隔离,并复制其他的副本以覆盖本地损坏的副本;其他类型的错误(比如在任何一个容器服务器中都找不到所需的对象列表)会被记录到日志中。

10.账户清理服务(Account Reaper)

移除被标记为删除的账户,删除其所包含的所有容器和对象。删除账号的过程是相当直接的。

7.3 Swift 存储结构

在 Storage Node 上运行着 Linux 系统并使用了 XFS 文件系统,逻辑上使用一致性哈希算法将固定总数的 partition 映射到每个 Storage Node 上,每个 data 也使用同样的哈希算法映射到 partition 上。 存储内容一般放在/srv/node/sdb1 之类的路径下,其目录结构如下所示: accounts(账号)async_pending(异步待更新)containers(容器)objects(对象)quarantined (隔离目录)tmp(临时目录)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/yanxifaner/article/details/120067508

智能推荐

攻防世界 insanity_攻防世界insanity-程序员宅基地

文章浏览阅读97次。insanity:首先启动题目,给了一个不知道格式的文件于是利用exeinfo 打开:发现它是ELF文件,且是32bit,于是利用,IDA打开得到:在查看字符串,按快捷键shift+f12得到flag:_攻防世界insanity

qt6.2 开发遇坑记_qt6 如何支持win7-程序员宅基地

文章浏览阅读1.1k次。一、第一道坑文档过时开发部分文档总是和代码对不上,我的qt最开始是在线安装包安装的,提示文档里面明明有的函数,用了编译却总是不能过,没办法,只能用原生c++,简直是泪崩,各种依赖库加苦二、第二道坑 c++通病依赖库qt过之不及build运行和debug运行都是正常的,一旦发布就是少各种dll,用windeployqt自动copy了dll之后运行闪退,手动copy了mingw目录下的plugins,modules,qml文件夹,终于跑起来了,兴奋的打包发测,结果..._qt6 如何支持win7

# 行动、任务、项目概念区分_工作中的todo指什么-程序员宅基地

文章浏览阅读5.8k次。行动、任务、项目概念区分1、行动(todo或action)行动就是确定时间节点,可以立即去做的事情。行动容易操作和衡量。2、任务(task)任务通常指所接受的工作,所担负的职责,是指为了完成某个有方向性的目的而产生的活动。任务有明确的执行目标和执行人,相比于项目,任务侧重于结果,也会有时间的约束性。任务里面可以嵌套任务,即一个主任务下面可以细分成若干个子任务,由这些子任务的完成结果组成为主..._工作中的todo指什么

Python读写xml文件_python xml读写保留编码-程序员宅基地

文章浏览阅读424次。python读写xml文件时会删除xml文件第一行的声明_python xml读写保留编码

( 图论专题 )【 最大费用最大流 】-程序员宅基地

文章浏览阅读2.6k次。( 图论专题 )【 最大费用最大流 】【 最大费用最大流 】只需要将【 最小费用最大流 】的w取相反数就好了,最后的mincost( 最小费用 )也取相反数就是最大费用了。( 图论专题 )【 最小费用最大流 】例题:HDU - 643710 3 1 101 5 1000 05 10 1000 1第一行n,m,K,M, 每天n个小时,m个视频,K个人,观看相同视频时失去W幸福值。接下来m行,每行S,T,w,op四个正整数,dii个视频的开始时间,结束时间,看完得到的幸福值,.._最大费用最大流

C语言再学习 -- 段错误(核心已转储)_c语言中的段错误是什么意思-程序员宅基地

文章浏览阅读6.1w次,点赞80次,收藏332次。参看:Linux下的段错误产生的原因及调试方法参看:Linux环境下段错误的产生原因及调试方法小结参看:维基百科--Segmentation fault参看:LINUX内核段错误调试详细指南精品培训PPT讲义一、什么是段错误?一旦一个程序发生了越界访问,cpu 就会产生相应的保护,于是 segmentation fault 就出现了,通过上面的解释,段错误应该就是访问了不可访问的内存,这个内存区要_c语言中的段错误是什么意思

随便推点

VS中Windows界面开发_vs写界面-程序员宅基地

文章浏览阅读9.2k次。1.环境:vs2017,.net4.52.步骤:(1)打开vs2017,新建项目Windows窗体应用(.NET Framework),新建后会出现一个Form1的窗体;(2)打开工具箱,将公共控件中的Label、Button、TextBox控件拉入窗体中,在右边属性栏中更改名字;(3)双击button控件,进入代码编辑器,并触发button控件的Click事件,即点击button按钮..._vs写界面

day01 windows编程入门-程序员宅基地

文章浏览阅读1.7k次,点赞5次,收藏16次。我们以前见过double,int,long,我们都可以很清晰的知道他们是什么意思,但是这玩意可读性这么差,而且还都是大写,怎么记得住啊。你可以会觉得,这是什么鬼,怎么这么多参数,我们以前写的C++的mina最多也就两个参数啊,但是,你必须接受这个现实,windows编程有非常多的复杂概念,和非常复杂的声明等等。Windows编程的本质就是使用好操作系统,想要用好操作系统必不可少的秘籍----MSDN。我们已经完成了第一个窗口的实例,接下来我们将学习如何编写一个正规的第一个窗口。_windows编程入门

给已有的linux系统增加磁盘容量_linux系统如何追加一个硬盘容量-程序员宅基地

文章浏览阅读309次。【代码】给已有的linux系统增加磁盘容量。_linux系统如何追加一个硬盘容量

操作系统的安全管理_安全操作系统设计技术(tcb)-程序员宅基地

文章浏览阅读1.1w次,点赞4次,收藏24次。OS的安全管理_安全操作系统设计技术(tcb)

Bash字符串处理(与Java对照) - 10.判断两个字符串是否相等(不等)-程序员宅基地

文章浏览阅读438次。Bash字符串处理(与Java对照) - 10.判断两个字符串是否相等(不等)In JavaString.equals & String.equalsIgnoreCaseboolean equals(Object anObject) 比较此字符串与指定的对象。 boolean equalsIgnoreCase(Strin..._bash字符串相等

Hadoop基础学习---3、HDFS概述、HDFS的Shell操作、HDFS的API操作_hadoop setrep-程序员宅基地

文章浏览阅读798次。Hadoop基础学习---3、HDFS概述、HDFS的Shell操作、HDFS的API操作_hadoop setrep