详解OpenStack常见模块

详解OpenStack常见模块,第1张

引言

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卷创建的步骤

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

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

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

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

存储节点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(临时目录)。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/993660.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存