OpenStack架构详解

目录

一.OpenStack架构图简析

二.OpenStack四大节点

控制节点架构

计算节点架构

网络节点架构

存储节点架构

三.OpenStack各大组件详解

组件关系

Nova

Keystone

Glance

Cidenr

Neutron

Swift

Horizon


一.OpenStack架构图简析

  • OpenSatck既是是一个社区,也是一个项目和一个开源软件,提供开放源码软件,建立公有和私有云,它提供了一个部署云的操作平台和工具集。OpenSatck的目的在于:帮助组织运行为虚拟计算或者存储服务的云,为公有云、私有云等,提供可扩展的,灵活的云计算
  • OpenStack开源项目由社区维护,其中包括计算(Nova)、对象存储(swift)、镜像服务(Glance)
  • 下面是OpenStack的详细架构图

OpenStack架构详解_第1张图片

注:具体服务名称 MySQL(数据库)、Qpid(消息队列)、Keystone(认证服务)、Glance(镜像服务)、Compute(计算服务)、Neutron(网络服务)、Horizon(web管理界面服务)、Cinder(块存储)、Swift(对象存储)、Trove(数据库)、Heat(编排工具)、Centimeter(计量)、Telmeter(监控)

  • 由上图可知,整个openstack是由控制节点、计算节点、网络节点、存储节点四大部分组成(四个节点也可以部署一台机器上)
  • 控制节点负责对其余节点的控制,包含虚拟机的建立,迁移,网络分配,存储分配等等
  • 计算节点负责虚拟机运行
  • 网络节点负责对外网络与内网络之间的通信
  • 存储节点负责对虚拟机的额外存储管理等等

二.OpenStack四大节点

控制节点架构

  • 由上面的拓扑图可知,控制节点包括:管理支持服务、基础管理服务、扩展管理服务

管理支持服务

  • MySQL:数据库作为基础扩展服务产生的数据存放的地方
  • Qpid:消息队列(也称为消息中间件)为其他服务之间提供统一的消息通信服务

基础管理服务

  • Keystone:认证管理服务,提供了其余所有组件的认证信息/令牌的管理,创建,修改等等,使用MySQL作为统一的数据库
  • Glance:镜像管理服务,提供了对虚拟机部署的时候所能提供的镜像的管理,包含镜像的导入,格式,以及制作相应的模板
  • Nova:计算管理服务,提供了对计算节点的Nova的管理,使用Nova-API进行通信
  • Neutron:网络管理服务,提供了对网络节点的网络拓扑管理,同时提供了Neutron在Horizon的管理面板
  • Horizon:控制台服务,提供了以web的形式,对所有节点的所有服务管理,,通常把该服务称为DashBoard

扩展管理服务

  • Cinder:提供管理块存储节点服务,同时提供Cinder在Horizon中的管理面板
  • Swift:提供管理对象存储节点服务,同时提供Swift在Horizon中的管理面板
  • Trove:提供管理数据库的节点服务,同时提供Trove在Horizon中的管理面板
  • Heat:提供了基于模板来实现云环境中资源的初始化,依赖关系处理,部署等基本操作,也可以解决自动收缩,负载均衡等高级特性
  • Centimeter:提供对物理资源以及虚拟资源的监控,并且记录这些数据,对该数据进行分析,在一定的条件下,触发相应的动作

控制节点一般来说只需要一个网络端口用于通信/管理各个节点

计算节点架构

  • 计算节点包括Nova、Neutron、Telemeter三个服务

基础服务

  • Nova:提供虚拟机的创建、运行、迁移、快照等各种围绕虚拟机的服务,并且提供API与控制节点对接,有控制节点下发任务
  • Neotron:提供计算节点与网络节点之间的通信服务

扩展服务

  • Telmeter:提供计算节点的监控代理,将虚拟机的情况反馈给控制节点,是Centimeter的代理服务

计算节点包括最少两个网络端口:eth0和eth1。eth0是与控制节点进行通信,受控制节点统一调配。eth1是与网络节点,存储节点进行通信

网络节点架构

  • 网络节点只包含Neutron服务
  • Neutron:负责管理私有网段与公有网段的通信,以及管理虚拟机网络之间的通信拓扑,管理虚拟机之上的防火墙等等

网络节点的三个网络端口

eth0(management):用于与控制节点进行通信

eth1(private):用于与除了控制节点之外的计算/存储节点之间通信

eth2(external):用于外部的虚拟机与相应的网络之间通信

 

存储节点架构

  • 存储节点包括块存储和对象存储服务等等
  • Cinder:块存储服务,提供相应的块存储服务,简单来说,就是虚拟出一块磁盘,可以挂载到相应的虚拟机之上,不受文件系统等因素的影响,对于虚拟机来说,这个操作就像新加了一块硬盘,可以对完成对磁盘的任何操作,包括挂载,卸载,格式化,转换文件系统等操作,大多应用于虚拟机空间不足的情况
  • Swift:对象存储服务,提供相应的对象存储,简单来说,就是虚拟出一块磁盘空间,可以在这个空间当中存放文件,也仅仅只能存放文件,不能进行格式化,转换文件系统,大多应用于云磁盘/文件

存储节点包含最少两个网络接口

eth0:于控制节点进行通信,接收控制节点任务,受控制节点统一调配

eth1:于计算节点/网络节点进行通信,完成控制节点下发的各类任务

 

三.OpenStack各大组件详解

组件关系

  • OpenStack半年更新一次版本,到此文章发布为止U版,不同的版本组件也可能会相应增加,下面为U版组件关系图

OpenStack架构详解_第2张图片

  • OpenStack云平台服务有四个核心模块:Nova、Glance、Cinder、Neutron四个核心模块提供计算、镜像、存储、网络;四个辅助模块:Horizen、Ceilometer、KeyStone、Swift提供访问、监控、权限、对象存储
  • OpenStack由多种服务组成,每一种服务都具有独立的命名。在整个OpenStack架构中,Keystone提供认证服务,接收来自用户和服务的认证请求,并且对其身份进行认证请求,并且对其身份进行认证。各个服务之间通过公用的API接口进行交互,大部分服务均包含一个API进程,用于监听API请求,根据服务的性质选择处理请求或转发请求。服务进程之间的通讯通过消息队列实现,如AMQP
  • 在部署完成的云系统平台上,用户通过Horizon或者RestAPI的方式在经Keystone模块认证授权后,可以执行创建虚拟机服务。通过Nova模块创建虚拟机实例,Nova调用Glance模块提供的镜像服务,然后调用Neutron模块提供网络服务。根据需要可以选择给虚拟机增加存储卷,卷功能由Cinder模块提供服务。整个过程在Ceilometer模块的资源监控下完成。同时Cinder提供的Volume和Glance提供的镜像可以通过Swift对象存储机制进保存
  • 下图是OpenStack最常见但不是唯一的架构

OpenStack架构详解_第3张图片

  • 以上架构图,包括各大组件的主要部分

Nova

Nova简介

  • Nova是负责提供计算资源的模块,也是OpenStack中核心模块,其主要功能是负责虚拟机实例的生命周期管理、网络管理、用户管理以及其他相关云平台管理功能。
  • OpenStack使用计算服务来托管和管理云计算系统。OpenStack计算服务是基础设施服务(IaaS)系统的主要组成部分,模块主要由Python实现
  • OpenStack计算组件请求Openstack Identify服务进行认证,请求OpenStack Image服务提供磁盘,为OpenStack提供用户和管理接口。磁盘镜像访问限制在项目与用户上,配额以每个项目进行设定。例如,每个项目下可以创建多少实例。OpenStack组件可以在标准硬件上横向大规模扩展,并且下载磁盘镜像启动虚拟机实例。

Nova-api(API服务器)

  • 接收和响应来自最终用户的计算API请求,对外提供一个与云基础设施交互的接口,也是外部可用于管理基础设施的唯一组件。此服务支持OpenStack计算服务API、Amazon EC2 API以及特殊管理的API。用于接收用户管理操作的请求。管理使用EC2 API通过Web Services调用实现,然后APi Server通过消息队列(Message Queue)轮流与云基础设施的相关组件通信。作为EC2 API的另外一种选择,OpenStack也提供一个内部使用的“OpenStack API”

Nova-api-metadata服务

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

Nova-Compute(运算工作站)

  • Nova-compute的主要任务是管理实例的整个生命周期,他们通过消息队列接收请求并且执行,从而对实例进行各种操作,在典型实际生产环境下,会架设很多运算工作站,根据调度算法,一个实例可以在可用的任意一台运算工作站上部署

Nova-Conductor

  • Nova-Conductor模块作用与Nova-Compute服务与数据库之间,避免了由Nova-Compute服务对云数据库的直接访问,它可以横向扩展,但是,不要将他部署在运行Nova-Compute服务的主机节点上

Nova-Scheduler(调度器)

  • 调度器负责把nova-API调用送达给目标。调度器以名为“nova-schedule”的守护进程方式运行,并根据调度算法从可用资源池中恰当地选择运算服务器。有很多因素都可以影响调度结果,比如负载、内存、子节点的远近、CPU架构等等。强大的是nova调度器采用的是可插入式架构。
  • Nova调度器的基本调度算法有
  • 随机化:主机随机选择可用的节点
  • 可用化:与随机相似,只是随机选择的范围被制定
  • 简单化:应用这种方式,主机选择负载最小者来运行实例。

Nova-placement-api

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

由于nova也有数据迁移的功能,我们来说一下,冷迁移和热迁移

冷迁移(cold migration),也叫静态迁移。关闭电源的虚拟机进行迁移。通过冷迁移,可以选择将关联的磁盘从一个数据存储移动到另一个数据存储。

好处:虚拟机不需要位于共享存储器上,数据丢失率小。

缺点:需要关闭电源,业务中断。

热迁移(Live Migration),又叫动态迁移、实时迁移,即虚拟机保存/恢复,通常是将整个虚拟机的运行状态完整保存下来,同时可以快速的恢复到原有硬件平台甚至是不同硬件平台上。恢复以后,虚拟机仍旧平滑运行,用户不会察觉到任何差异。

好处:软件和硬件系统的维护升级,不会影响用户的关键服务,提高了服务的高可用性和 用户的满意度。

缺点:过程不可中断,操作复杂

 

Keystone

  • Keystone为所有的OpenStack组件提供认证和访问策略服务,它依赖资深REST(基于Identity API)系统进行工作主要对(单不限于)Swift、Glance、Nova等进行认证与授权。事实上,授权通过对动作消息来源者请求的合法性进行鉴定,下图显示了身份认证服务的流程:

OpenStack架构详解_第4张图片

  • keystone采用两种授权方式:基于用户密码和基于令牌
  • keystone提供三种服务:令牌服务(含有授权用户的授权信息)、目录服务(含有用户合法操作的可用服务列表)、策略服务(利用Keystone具体指定用户或者群组某些访问权限)

user(用户)

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

project(项目)

  • 项目是各个服务中的一些可以访问的资源集合,用来分组或者隔离资源或者身份对象。不同的服务中,项目所涉及的资源不同,在Nova服务中项目可以是云主机,在Swift和Glance中项目可以是镜像存储,在Neutron中项目可以是网络资源。默认情况下,用户总是被绑定到项目中。一个项目可以用多个用户,一个用户也可以属于多个项目

role(角色)

  • 角色是一组用户可以访问的资源权限集合,这些资源包含虚拟机、镜像、存储资源等。用户既可以被添加到全局的角色,也可以被添加到指定项目内的角色。区别是,全局的角色适用于所有项目中的资源权限,而项目内的角色只适用于该项目内的资源权限

service(服务)

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

token(令牌)

  • 令牌是一串数字字符串,用于访问OpenStack服务API以及资源。一个令牌可以待在特定的时间内生效,并且可以在任意时间释放。在Keystone中主要是引入令牌机制来保护用户对资源的访问

身份认证服务包含以下组件

  • 服务器:一个中心化的服务器使用RESTful接口来提供认证和授权服务
  • 驱动:驱动或者服务后端被整合到集中式服务器中。它们被用来访问Openstack外部仓库的身份信息,并且它们可能已经存在于Openstak被部署在的基础设施中
  • 模块:模块运行于使用身份认证服务的OpenStack组件的地址空间中,这些模块拦截服务请求,获取用户凭证,并且将它们送入中央服务器来寻求授权,可以是实现中间件模块和OpenStack组件间的整合

 

Glance

镜像模块简述

  •  镜像服务允许用户发现、注册和获取虚拟机镜像。它提供了一个REST API,允许查询虚拟机镜像的元数据,并获取一个现存的镜像。可以将虚拟机镜像存放到各种位置,从简单的文件系统到对象存储系统,如OpenStack Swift项目,默认是存储在本地文件系统上的。其实在生产环境中这个模块本身不存储大量的数据,需要挂载后台存储swift来存放实际的镜像数据.,
  • 在OpenStack环境中,镜像是用于在计算节点生成虚拟机。脱离了镜像服务,就无法创建虚拟机,所以镜像服务是OpenStack的一一个核心服务

Glance主要组件

  • glance-api用于接收镜像API的调用,诸如镜像发现、恢复以及存储等。作为一个后台进程,glance-api 对外提供RESTAPI接口,响应用户发起的镜像查询、获取和存储的调用。
  • glance-registry用于存储、处理和恢复镜像的元数据,元数据包括镜像的的大小和类型等属性,registry 是-一个内部服务接口,不建议暴露给普通用户。
  • database用于存放镜像的元数据,可以根据需要选择数据库,如MySQL、 SQLite 等。
  • storage repository for image files,  一般情况下,glance 并不需要存储任何镜像,而是将镜像存储在后端仓库中。Glance支持多种reposi tory.主要包括对象存储Swift、块存储Cinder、VMware的ESX/ESXi或者vCenter.亚马逊的S3、HTTP 可用服务器、Ceph等

Glance支持的镜像格式

  • Glance 支持多种镜像格式,包括磁盘格式和容器格式。
  • OpenS tack中可以支持多种虚拟化的技术,如KVM、XenServer、 Hyper-V 和VMware等。
  • 用户在上传镜像时,需要指定上传镜像文件的格式。除了磁盘格式,在Glance中还有容器的格式。- -般在 上传镜像时只需指定容器格式为bare,即为空。因为Glance中并没有真正使用到容器格式。容器格式用来表示虚拟机镜像文件是否包含了元数据,例如OVF格式。
  • 以下列出了Glance常用的镜像文件格式

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

  QCOW2是QCOW的升级版本,其主要特性是磁盘文件大小可以动态按需增长,并且不会占用所有的实际磁盘空间大小。例如创建了100GB 的QCOW2格式的磁盘,而实际只保存了2GB数据,那么将只占用了实际物理磁盘的2GB空间。与RAW相比,使用这种格式可以节省磁盘容量。

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


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

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

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

  AKI、ARI、AMI是Amazon公司的AWS所使用的镜像格式。

 

Cidenr

Cidenr简介

  • 块存储服务(Cinder)提供块存储。存储的分配和消耗是由块存储驱动器或者多后端配置的驱动器决定的。还有很多驱动程序可用: NAS/SAN、 NFS, ISCSI、CEPH等。块存储适合性能敏感性业务场景,例如数据库存储大规模可扩展的文件系统或服务器需要访问到块级的裸设备存储。典型情况下,块服务API和调度器服务运行在控制节点上。取决于使用的驱动,卷服务器可以运行在控制节点、计算节点或单独的存储节点之上。
  •   块存储服务为OpenStack中的实例提供持久的存储,块存储提供-一个基础设施,用于管理卷以及和OpenStack计算服务交互,为实例提供卷、快照、卷类型等功能。站在实例的角度,挂载的每个卷都是--块独立的硬盘。Cinder提供了从创建卷到删除卷整个生命周期的管理。

其具体功能包括:

提供REST API接口,使用户能够查询和管理卷、卷快照以及卷类型:

协调卷的创建请求,合理优化存储资源的分配;

通过驱动架构支持多种后端存储方式,包括LVM、NFS. Ceph和其他诸如EMC、IBM等商业存储产品和方案

Cinder的组件有

  •  Cinder-API用来接受API请求,并将其路由到Cinder-Volume执行
  •  Cinder-Volume用来与块存储服务和Cinder-Scheduler进程进行直接交互。它也可以;与这些进程通过一个消息队列进行交互。Cinder-Volume服务响应送到块存储服务的读写请求来维持状态,它也可以和多种存储提供者在驱动架构下进行交互。当用户请求一一个存储资 源时,由Cinder -API负责接受请求,Cinder-Scheduler负责调度资源,而真正执行存储任务的是Cinder -Volume.这样的工作机制使得存储架构非常容易扩展。当存储资源不足时,可以增加存储节点(运行Cinder -Volume)。当客户 的请求量太大调度不过来时,可以增加调度(运行Cinder-Scheduler)
  • Cinder- -Scheduler守护进程会选择最优存储节点来创建卷,其工作机制与Nova-Scheduler类似。当需要创建卷时,Cinder- Scheduler根据存储节点的资源使用情况选择-一个最合适的节点来创建卷.
  • Cinder Baeckup 守护进程服务提供任何种类备份卷到一个备份存储提供者。就像Cinder-Volume服务,它与多种存储提供者在驱动架构下进行交互。
  •  消息队列作用是在块存储的进程之间路由信息。Cinder 各个子服务通过消息队列实现进程间通信和相互协作。

Cinder的工作流程

  • 用户向Cinder-API发送创建卷请求:“帮我创建- -个卷 ”;
  • Cinder-API 对请求做一些必要处理后,向消息队列发送一条消息:“让Cinder- -Scheduler创建-一个卷”;
  •  Cinder-Scheduler 从消息队列获取到消息,然后执行调度算法,从若干存储节点中选出节点A:
  • Cinder-Scheduler 向消息队列发送- -条消息: “让存储节点A创建这个卷”:
  • 存储节点A的Cinder-Volume从消息队列中获取到消息,然后通过卷提供者的驱动创建卷。

Neutron

Neutron简述

  •  Neutron是 OpenStack项目中负责提供网络服务的组件,它基于软件定义网络的思想,实现了网络虚拟化下的资源管理。Neutron 的设计目标是实现“网络即服务(Networking as a Service)”,在设计上遵循了基于 SDN 实现网络虚拟化的原则,在实现上充分利用了 Linux 系统上的各种网络相关的技术

Neutron功能

  • 二层功能:Neutron支持多种虚拟交换机,一般使用Linux Bridge和Open vSwitch创建传统的VLAN网络,以及基于隧道技术的Overlay网络,如VxLAN和GRE(Linux Bridge 目前只支持 VxLAN)。
  • 三层功能:Neutron从Juno版开始正式加入的DVR(Distributed Virtual Router)服务,它将原本集中在网络节点的部分服务分散到了计算节点上。可以通过namespace中使用ip route或者iptables实现路由或NAT,也可以通过openflow给OpenvSwitch下发流表来实现
  • 负载均衡:LBaaS 支持多种负载均衡产品和方案,不同的实现以 Plugin 的形式集成到 Neutron,通过HAProxy来实现。
  • 防火墙:Neutron有两种方式来保障instance和网络的安全性,分别是安全组以及防火墙功能,均可以通过iptables来实现,前者是限制进出instance的网络包,后者是进出虚拟路由器的网络包。

四种网络

  •  Local网络,本地的一个Linux Bridge,除了虚拟机的虚拟网卡不连接其他的网络设备,实际场景很少使用,可以忽略。
  •  Flat网络,不带vlan tag的网络,相当于Local网络的Linux Bridge连接到一个物理网卡,该网络中的instance能与同网络的instance通信,且可以跨多个节点,实际场景也很少用到。
  •  VlAN网络,可以跨节点,目前是私有云网络应用较多
  •  VXLAN网络,是基于隧道技术的 overlay 网络,通过唯一的VNI区分于其他 vxlan 网络。vxlan中数据包通过VNI封装成UPD包进行传输,因为二层的包通过封装在三层传输,能够克服vlan和物理网络基础设施的限制
  • GRE网络,与vxlan类似的一种overlay网络,使用IP包进行封装

Neutron组件

  • Neutron Server:对外提供OpenStack网络API,接收请求,并调用Plugin处理请求。
  • Plugin:处理Neutron Server发来的请求,维护OpenStack逻辑网络的状态,并调用Agent处理请求。
  • Agent:处理Plugin的请求,负责在Network Provider上真正实现各种网络功能。
  • Network Provider:提供网络服务的虚拟或者物理网络设备,比如Linux Bridge,OpenVSwitch或者其他支持Neutron的物理交换机。
  • Queue:Neutron Server,Plugin和Agent之间通过Messaging Queue通信和调用。
  • Database:存放OpenStack的网络状态信息,包括Network,Subnet,Port,Router等

Swift

swift简述

  • Swift为OpenStack提供一种分布式、持续虚拟对象存储,它类似于Amazon Web Service的S3简单存储服务。Swift具有跨节点百级对象的存储能力。Swift内建冗余和失效备援管理,也能够处理归档和媒体流,特别是对大数据(千兆字节)和大容量(多对象数量)的测度非常高效。
  • swift的功能以及特点

海量对象存储
大文件(对象)存储
数据冗余管理
归档能力-----处理大数据集
为虚拟机和云应用提供数据容器
处理流媒体
对象安全存储
备份与归档
良好的可伸缩性

swift服务的分类

  • Swift代理服务器(Proxy server):用户都是通过Swift-API与代理服务器进行交互,代理服务器正是接收外界请求的门卫,它检测合法的实体位置并路由它们的请求。此外,代理服务器也同时处理实体失效而转移时,故障切换的实体重复路由请求
  • Swift对象服务器(Object Server):对象服务器是一种二进制存储,它负责处理本地存储中的对象数据的存储、检索和删除。对象都是文件系统中存放的典型的二进制文件,具有扩展文件属性的元数据(xattr)
  • Swift容器服务器(Container Server):容器服务器将列出一个容器中的所有对象,默认对象列表将存储为SQLite文件(译者注:也可以修改为MySQL,安装中就是以MySQL为例)。容器服务器也会统计容器中包含的对象数量及容器的存储空间耗费。
  • Swift账户服务器(Account Server):账户服务器与容器服务器类似,将列出容器中的对象
  • Ring容器:Ring容器记录着Swift中物理存储对象的位置信息,它是真实物理存储位置的实体名的虚拟映射,类似于查找及定位不同集群的实体真实物理位置的索引服务。这里所谓的实体指账户、容器、对象,它们都拥有属于自己的不同的Rings。

Horizon

  • Horizon是一个用以管理、控制OpenStack服务的Web控制面板,它可以管理实例、镜像、创建密匙对,对实例添加卷、操作Swift容器等。除此之外,用户还可以在控制面板中使用终端(console)或VNC直接访问实例。
  • Horizon的特点

实例管理:创建、终止实例,查看终端日志,VNC连接,添加卷等
访问与安全管理:创建安全群组,管理密匙对,设置浮动IP等
偏好设定:对虚拟硬件模板可以进行不同偏好设定
镜像管理:编辑或删除镜像
查看服务目录
管理用户、配额及项目用途
用户管理:创建用户等
卷管理:创建卷和快照
对象存储处理:创建、删除容器和对象

你可能感兴趣的:(openstack)