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。如果需要访问一个服务,则必须知道该服务的端点。

三、镜像模块 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(临时目录)。

你可能感兴趣的:(openstack,swift,开发语言)