OpenStack云计算实战(txt+pdf+epub+mobi电子书下载)


发布时间:2020-05-14 04:00:11

点击下载

作者:钟小平 许宁

出版社:人民邮电出版社有限公司

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

OpenStack云计算实战

OpenStack云计算实战试读:

开始

采用OCP服务器和OpenStack的Ironic进行管理,使其更加名正言顺地称为云服务。目前主要的云服务商都推出了此类云产品,如IBM的云平台推出基于Intel新一代至强可扩展处理器的裸金属服务器,亚马逊推出i3裸金属服务器,阿里云发布神龙云服务器(X-dragon Cloud Server)。

与虚拟化云主机几乎都基于x86架构不同,裸金属服务器在平台架构方面要丰富得多,除了Intel处理器,还可以选择POWER处理器、ARM处理器,以及GPU、FPGA等服务器产品。

随着容器技术的兴起,物理服务器成为其顺理成章的选择,因为对于用容器运行应用的用户,虚拟机在某些情况下是没有必要的。一些企业用户仍然希望使用可靠、安全的环境,也会选择裸金属云。1.2 Linux虚拟化技术

虚拟化是云计算的基础。虚拟化使得在一台物理服务器上可以运行多台虚拟机,虚拟机共享物理机的CPU、内存、I/O硬件资源,但逻辑上虚拟机之间是相互隔离的。OpenStack作为IaaS云操作系统,最主要的服务就是为用户提供虚拟机。在目前 OpenStack 的实际应用中,主要使用 KVM 和Xen这两种Linux虚拟化技术。这里主要讨论Linux虚拟化技术。1.2.1 计算机虚拟化基础

1.虚拟化体系结构与Hypervisor

虚拟化主要是指通过软件实现的方案,常见的体系结构如图1-3所示。这是一个直接在物理主机上运行虚拟机管理程序的虚拟化系统。在 x86平台虚拟化技术中,这个虚拟机管理程序通常被称为虚拟机监控器(Virtual Machine Monitor,VMM),又称为Hypervisor。它是运行在物理机和虚拟机之间的一个软件层,物理机被称为主机(Host),虚拟机被称为客户机(Guest),中间软件层即Hypervisor。图1-3 虚拟化体系结构

这里解释两个基本概念。(1)主机——指物理存在的计算机,又称宿主计算机(简称宿主机)。当虚拟机嵌套时,运行虚拟机的虚拟机也是宿主机,但不是物理机。主机操作系统是指宿主计算机上的操作系统,在主机操作系统上安装的虚拟机软件可以在计算机上模拟一台或多台虚拟机。(2)虚拟机——指在物理计算机上运行的操作系统中模拟出来的计算机,又称客户机,理论上完全等同于实体的物理计算机。每个虚拟机都可安装自己的操作系统或应用程序,并连接网络。运行在虚拟机上的操作系统称为客户操作系统。

Hypervisor基于主机的硬件资源给虚拟机提供了一个虚拟的操作平台并管理每个虚拟机的运行,所有虚拟机独立运行并共享主机的所有硬件资源。Hypervisor就是提供虚拟机硬件模拟的专门软件,可分为两类:原生型和宿主型。(1)原生型(Native)

原生型又称裸机型(Bare-metal),Hypervisor作为一个精简的操作系统(操作系统也是软件,只不过它是一个比较特殊的软件)直接运行在硬件之上以控制硬件资源并管理虚拟机。比较常见的有VMware ESXi、Microsoft Hyper-V等。(2)宿主型(Hosted)

宿主型又称托管型,Hypervisor运行在传统的操作系统上,同样可模拟出一整套虚拟硬件平台。比较著名的有VMware Workstation、Oracle Virtual Box等。

从性能角度来看,不论原生型还是宿主型都会有性能损耗,但宿主型比原生型的损耗更大,所以企业生产环境中基本使用的是原生型Hypervisor,宿主型的Hypervisor一般用于实验或测试环境中。

2.全虚拟化和半虚拟化

根据虚拟化实现技术的不同,虚拟化可分为全虚拟化和半虚拟化两种,其中,全虚拟化产品将是未来虚拟化的主流。(1)全虚拟化(Full Virtualization)

用全虚拟化模拟出来的虚拟机中的操作系统是与底层的硬件完全隔离的,虚拟机中所有的硬件资源都通过虚拟化软件来模拟。这为虚拟机提供了完整的虚拟硬件平台,包括处理器、内存和外设,支持运行任何理论上可在真实物理平台上运行的操作系统,为虚拟机的配置提供了较大程度的灵活性。每台虚拟机都有一个完全独立和安全的运行环境,虚拟机中的操作系统也不需要做任何修改,并且易于迁移。在操作全虚拟化的虚拟机的时候,用户感觉不到它是一台虚拟机。全虚拟化的代表产品有VMware ESXi和KVM。

由于虚拟机的资源都需要通过虚拟化软件来模拟,虚拟机会损失一部分的性能。(2)半虚拟化(Para Virtualization)

半虚拟化的架构与全虚拟化基本相同,需要修改虚拟机中的操作系统来集成一些虚拟化方面的代码,以减小虚拟化软件的负载。其代表产品有Microsoft Hyper-V和XEN。

半虚拟化模拟出来的虚拟机整体性能会更好些,因为修改后的虚拟机操作系统承载了部分虚拟化软件的工作。不足之处是,由于要修改虚拟机的操作系统,用户会感知使用的环境是虚拟化环境,而且兼容性比较差,用户使用时也比较麻烦,需要获得集成虚拟化代码的操作系统。1.2.2 OpenStack所支持的虚拟化技术

在 OpenStack 环境中,计算服务通过 API 服务器来控制虚拟机管理程序,它具备一个抽象层,可以在部署时选择一种虚拟化技术来创建虚拟机,向用户提供云服务。OpenStack可用的虚拟化技术列举如下。

1.KVM

基于内核的虚拟机(Kernel-based Virtual Machine,KVM)是通用的开放虚拟化技术,也是OpenStack用户使用较多的虚拟化技术,它支持OpenStack的所有特性。

2.Xen

Xen是部署快速、安全、开源的虚拟化软件技术,可使多个同样的操作系统或不同操作系统的虚拟机运行在同一主机上。Xen技术主要包括XenServer(服务器虚拟化平台)、Xen Cloud Platform (XCP,云基础架构)、XenAPI(管理XenServer和XCP的API程序)、XAPI(XenServer和XCP的主守护进程,可与XenAPI直接通信)、基于Libvirt的Xen。OpenStack通过XenAPI支持XenServer和XCP两种虚拟化技术。不过,在RHEL等平台上,OpenStack使用的是基于Libvirt的Xen。

3.容器

容器是在单一 Linux 主机上提供多个隔离的 Linux 环境的操作系统级虚拟化技术。不像基于虚拟化管理程序的传统虚拟化技术,容器并不需要运行专用的客户操作系统。目前的容器有以下两种技术。(1)Linux容器(Linux Container,LXC):提供了在单一可控主机节点上支持多个相互隔离的服务器容器同时执行的机制。(2)Docker:一个开源的应用容器引擎,让开发者可以把应用以及依赖包打包到一个可移植的容器中,然后发布到任何流行的Linux平台上。利用Docker也可以实现虚拟化,容器完全使用沙箱机制,相互之间不会有任何接口。

Docker 的目的是尽可能减少容器中运行的程序,减少到只运行单个程序,并且通过 Docker来管理这个程序。LXC可以快速兼容所有应用程序和工具,以及任意管理和编制层次,来替代虚拟机。

虚拟化管理程序提供更好的进程隔离,呈现一个完全的系统。LXC/Docker除了一些基本隔离,并未提供足够的虚拟化管理功能,缺乏必要的安全机制。基于容器的方案无法运行与主机内核不同的其他内核,也无法运行一个完全不同的操作系统。目前 OpenStack 社区对容器的驱动支持还不如虚拟化管理程序。在OpenStack项目中,LXC属于计算服务项目Nova,通过调用Libvirt来实现;Docker驱动是一种新加入的虚拟化管理程序的驱动,目前无法替代虚拟化管理程序。

4.Hyper-V

Hyper-V是微软推出的企业级虚拟化解决方案。Hyper-V的设计借鉴了Xen,管理程序采用微内核的架构,兼顾了安全性和性能的要求。Hyper-V作为一种免费的虚拟化方案,在OpenStack中得到了很多支持。

5.VMware ESXi

VMware提供业界领先且可靠的服务器虚拟化平台和软件定义计算产品,其中ESXi虚拟化平台用于创建和运行虚拟机及虚拟设备。在OpenStack中它也得到了支持,但是如果没有vCenter和企业级许可,一些API的使用会受限。

6.Baremetal与Ironic

有些云平台除了提供虚拟化和虚拟机服务,还提供传统的主机服务。在 OpenStack 中可以将Baremetal(裸金属)与其他部署有虚拟化管理程序的节点通过不同的计算池(可用区域,Availabity Zone)一起管理。

Baremetal是计算服务的后端驱动,与Libvirt驱动、XenAPI驱动、VMware驱动一样,只不过它是用来管理没有虚拟化的硬件,主要通过PXE和IPMI进行控制管理。

现在Baremetal已由Ironic所替代,Nova管理的是虚拟机的生命周期,而Ironic管理的是主机的生命周期。Ironic提供了一系列管理主机的API接口,可以对“裸”操作系统的主机进行管理,从主机上架安装操作系统到主机下架维修,可以像管理虚拟机一样地管理主机,创建一个Nova计算物理节点,只需告诉Ironic,然后自动地从镜像模板中加载操作系统到nova-compute安装完成即可。Ironic解决主机的添加、删除、电源管理、操作系统部署等问题,目标是成为主机管理的成熟解决方案,让OpenStack不仅可以在软件层面解决云计算问题,而且供应商可以对应自己的服务器开发Ironic插件。1.2.3 KVM——基于Linux内核的虚拟化解决方案

KVM是一种基于Linux x86硬件平台的开源全虚拟化解决方案,也是主流的Linux虚拟化解决方案,支持广泛的客户机操作系统。KVM需要CPU的虚拟化指令集的支持,如Intel的Intel VT(vmx指令集)或AMD的AMD-V(svm指令集)。

1.KVM模块

KVM模块是一个可加载的内核模块kvm.ko。由于KVM对x86硬件架构的依赖,因此KVM还需要一个处理器规范模块。如果使用Intel架构,则加载kvm-intel.ko模块;使用AMD架构,则加载kvm-amd.ko模块。

KVM模块负责对虚拟机的虚拟CPU和内存进行管理及调度,主要任务是初始化CPU硬件,打开虚拟化模式,然后将虚拟机运行在虚拟模式下,并对虚拟机的运行提供一定的支持。

至于虚拟机的外部设备交互,如果是真实的物理硬件设备,则利用Linux系统内核来管理;如果是虚拟的外部设备,则借助于QEMU(Quick Emulator,快速仿真)来处理。

由此可见,KVM本身只关注虚拟机的调度和内存管理,是一个轻量级的Hypervisor,很多Linux发行版集成KVM作为虚拟化解决方案,CentOS也不例外。

2.QEMU

KVM模块本身无法作为一个Hypervisor模拟出一个完整的虚拟机,而且用户也不能直接对Linux内核进行操作,因此需要借助其他软件来进行,QEMU就是KVM所需的这样一个软件。

QEMU并非KVM的一部分,而是一个开源的虚拟机软件。与KVM不同,作为一个宿主型的Hypervisor,没有 KVM,QEMU 也可以通过模拟来创建和管理虚拟机,只因为是纯软件实现,所以性能较低。QEMU的优点是,在支持QEMU编译运行的平台上就可以实现虚拟机的功能,甚至虚拟机可以与主机不是同一个架构。KVM在QEMU的基础上进行了修改。虚拟机运行期间,QEMU会通过KVM模块提供的系统调用进入内核,由KVM模块负责将虚拟机置于处理器的特殊模式运行。遇到虚拟机进行输入/输出(I/O)操作(外设交互),KVM 模块转交给 QEMU 解析和模拟这些设备。

QEMU 使用 KVM 模块的虚拟化功能,为自己的虚拟机提供硬件虚拟化的加速,从而极大地提高了虚拟机的性能。除此之外,虚拟机的配置和创建,虚拟机运行依赖的虚拟设备,虚拟机运行时的用户操作环境和交互,以及一些针对虚拟机的特殊技术(如动态迁移),都是由 QEMU 自己实现的。

KVM虚拟机的创建和运行是一个用户空间的QEMU程序和内核空间的KVM模块相互配合的过程。KVM模块作为整个虚拟化环境的核心工作在系统空间,负责CPU和内存的调度。QEMU作为模拟器工作在用户空间,负责虚拟机I/O模拟。

3.KVM架构

从上面的分析来看,KVM作为Hypervisor主要包括两个重要的组成部分:一个是Linux内核的KVM模块,主要负责虚拟机的创建、虚拟内存的分配、VCPU寄存器的读写以及VCPU的运行;另一个是提供硬件仿真的 QEMU,用于模拟虚拟机的用户空间组件、提供 I/O 设备模型和访问外设的途径。KVM的基本架构如图1-4所示。图1-4 KVM的基本架构

在KVM模型中,每一个虚拟机都是一个由Linux调度程序管理的标准进程,可以在用户空间启动客户机操作系统。一个普通的Linux进程有两种运行模式:内核和用户,而KVM增加了第三种模式——客户模式,客户模式又有自己的内核和用户模式。

当新的虚拟机在KVM上启动时(通过一个称为kvm的实用程序),它就成为主机操作系统的一个进程,因此就可以像其他进程一样调度它。但与传统的 Linux 进程不一样,客户端被 Hypervisor标识为处于Guest模式(独立于内核和用户模式)。每个虚拟机都是通过/dev/kvm设备映射的,它们拥有自己的虚拟地址空间,该空间映射到主机内核的物理地址空间。如前所述,KVM使用底层硬件的虚拟化支持来提供完整的(原生)虚拟化。I/O 请求通过主机内核映射到在主机上(Hypervisor)执行的QEMU进程。

4.KVM虚拟磁盘(镜像)文件格式

在KVM中往往使用Image(镜像)这个术语来表示虚拟磁盘,主要有以下3种文件格式。(1)raw:原始的格式,它直接将文件系统的存储单元分配给虚拟机使用,采取直读直写的策略。该格式实现简单,不支持诸如压缩、快照、加密和CoW等特性。(2)qcow2:QEMU引入的镜像文件格式,也是目前KVM默认的格式。qcow2文件存储数据的基本单元是簇(cluster),每一簇由若干个数据扇区组成,每个数据扇区的大小是512字节。在qcow2中,要定位镜像文件的簇,需要经过两次地址查询操作,qcow2根据实际需要来决定占用空间的大小,而且支持更多的主机文件系统格式。(3)qed:qcow2的一种改进,qed的存储、定位、查询方式,以及数据块大小与qcow2一样,它的目的是为了克服qcow2格式的一些缺点,提高性能,不过目前还不够成熟。

如果需要使用虚拟机快照,需要选择qcow2格式。对于大规模数据的存储,可以选择raw格式。qcow2格式只能增加容量,不能减少容量,而raw格式可以实现增加或者减少容量。1.2.4 Libvirt套件

仅有KVM模块和QEMU组件是不够的,为了使KVM整个虚拟化环境易于管理,还需要Libvirt服务和基于Libvirt开发出来的管理工具。

Libvirt是一个软件集合,是一套为方便管理平台虚拟化技术而设计的开源代码的应用程序接口、守护进程和管理工具。它不仅提供了对虚拟机的管理,而且提供了对虚拟网络和存储的管理。Libvirt最初是为Xen虚拟化平台设计的一套API,目前还支持其他多种虚拟化平台,如KVM、ESX和QEMU等。在KVM解决方案中,Qemu用来进行平台模拟,面向上层管理和操作;而Libvirt用来管理KVM,面向下层管理和操作。整个Libvirt架构如图1-5所示。图1-5 Libvirt架构

Libvirt是目前使用广泛的虚拟机管理应用程序接口,一些常用的虚拟机管理工具(如virsh)和云计算框架平台(如OpenStack)都是在底层使用Libvirt的应用程序接口。

Libvirt包括两部分,一部分是服务(守护进程名为libvirtd),另一部分是API。作为一个运行在主机上的服务端守护进程,libvirtd为虚拟化平台及其虚拟机提供本地和远程的管理功能,基于Libvirt开发出来的管理工具可通过libvirtd服务来管理整个虚拟化环境。也就是说,libvirtd在管理工具和虚拟化平台之间起到一个桥梁的作用。Libvirt API是一系列标准的库文件,给多种虚拟化平台提供一个统一的编程接口,相当于管理工具需要基于Libvirt的标准接口来进行开发,开发完成后的工具可支持多种虚拟化平台。1.3 了解OpenStack

2010年7月,Rackspace和NASA合作,分别贡献出Rackspace云文件平台代码和NASA Nebula平台代码,并以 Apache 许可证开源发布了 OpenStack,OpenStack 由此诞生。经过几年的发展, OpenStack现已发展成为一个广泛使用的业内领先的开源项目,提供部署私有云及公共云的操作平台和工具集,并且在许多大型企业支撑核心生产业务。1.3.1 什么是OpenStack

OpenStack示意图如图1-6所示。OpenStack是一个云操作系统,通过数据中心控制大型的计算、存储、网络资源池,并可以使用Web界面和API进行管理。图1-6 OpenStack示意图

OpenStack项目旨在提供开源的云计算解决方案以简化云的部署过程,实现类似AWS EC2和S3的IaaS服务。其主要应用场合包括Web应用、大数据、电子商务、视频处理与内容分发、大吞吐量计算、容器优化、主机托管、公共云、计算启动工具包(Compute Starter Kit)和DBaaS(数据库即服务,DateBase-as-a-Service)等。

Open意为开放,Stack意为堆栈或堆叠,OpenStack是一系列开源软件的组合,包括若干项目。每个项目都有自己的代号(名称),包括不同的组件,每个组件又包括若干服务,一个服务意味着运行的一个进程。这些组件部署灵活,支持水平扩展,具有伸缩性,支持不同规模的云平台。

OpenStack最初仅包括Nova和Swift两个项目,现在已经有数十个项目,其中主要的项目如表1-1所示。这些项目之间相互关联,协同管理各类计算、存储和网络资源,提供云计算服务。表1-1 OpenStack的主要项目

作为免费的开源软件项目,OpenStack由一个名为OpenStack Community的社区开发和维护,来自世界各地的云计算开发人员和技术人员共同开发、维护OpenStack项目。与其他开源的云计算软件相比,OpenStack具有以下优势。(1)模块松耦合。OpenStack模块分明,容易添加独立功能的组件。往往无须通读OpenStack整个源代码,只需了解其接口规范及API使用,就能添加一个新的模块。(2)组件配置灵活。OpenStack的组件安装非常灵活,可以全部集中装在一台主机上,也可以分散安装到多台主机中,甚至可以把所有的节点都部署在虚拟机中。(3)二次开发容易。OpenStack发布的OpenStack API是RESTful API,所有组件采用这种统一的规范,加上模块松耦合设计,二次开发较为简单。1.3.2 OpenStack项目的组成

OpenStack是由众多项目组成的,每个项目均由一系列进程、命令行脚本、数据库和其他脚本组成。这些进程是分布式的,通过数据库和中间件耦合到一起。这些项目包括OpenStack服务和库等类型,而服务是最主要的OpenStack项目。OpenStack的Queens版本的项目如表1-2所示。表1-2 OpenStack的Queens版本的项目组成续表1.3.3 OpenStack基金会与社区

2012年7月,RackSpace公司将OpenStack转交给OpenStack基金会进行管理。OpenStack基金会是一家非营利性组织,旨在推动OpenStack云操作系统在全球的发展、传播和使用。它在全球范围内服务开发者、用户及整个生态系统,提供共享资源,以扩大OpenStack公共云与私有云的发展,帮助技术厂商选择平台,助力开发者开发出行业最佳的云软件。

OpenStack 基金会分为个人会员和企业会员两大类。OpenStack 基金会个人会员是免费无门槛的,可凭借技术贡献或社区建设工作等参与到OpenStack社区中。而企业会员则根据赞助会费的情况,分成白金会员、黄金会员、企业赞助会员及支持组织者,其中,白金会员和黄金会员的话语权较大。

OpenStack社区是世界上较大、较完善的开源社区之一,拥有来自全球近200个国家及地区的数万名成员。技术委员会负责总体管理全部OpenStack项目,而项目技术负责人(Project Technical Lead)则管理项目内事务,对项目本身的发展进行决策。OpenStack社区由技术专家负责技术,提供专门资源创建社区和整个生态系统,对各种贡献进行鼓励和奖励。

社区对于个人会员而言是非常开放的。个人只有加入基金会,才能享有会员权益,可对OpenStack的诸多事项进行投票表决,获取更多的技术和市场信息。1.3.4 OpenStack版本演变

2010年10月,OpenStack的第1个正式版本发布了,其代号为Austin,RackSpace公司计划每隔几个月发布一个全新的版本,并且以26个英文字母为首字母,从A~Z顺序命名后续版本。到2011年9月第4个版本Diablo发布时,又改为每半年发布一个版本,分别是当年的春秋两季发布新版本。每个版本都在不断改进,吸收新技术,实现新概念,具体的版本演变过程如表1-3所示。表1-3 OpenStack版本演变续表1.4 OpenStack的架构

在学习OpenStack的部署和运维之前,我们应当熟悉其架构和运行机制。OpenStack作为一个开源、可扩展、富有弹性的云操作系统,其架构设计主要参考了亚马逊的AWS云计算产品,通过模块的划分和模块间的功能协作,设计的基本原则如下。(1)按照不同的功能和通用性划分不同的项目,拆分子系统。(2)按照逻辑计划、规范子系统之间的通信。(3)通过分层设计整个系统架构。(4)不同功能子系统间提供统一的API接口。1.4.1 OpenStack的概念架构

OpenStack的概念架构(Concept Architecture)如图1-7所示。此图展示了OpenStack云平台各模块(仅给出主要服务)协同工作的机制和流程。

OpenStack通过一组相关的服务提供一个基础设施即服务(IaaS)的解决方案。这些服务以虚拟机为中心。虚拟机主要是由Nova、Glance、Cinder和Neutron 4个核心模块进行交互的结果。Nova为虚拟机提供计算资源,包括vCPU、内存等。Glance为虚拟机提供镜像服务,安装操作传统的运行环境。Cinder提供存储资源,类似传统计算机的磁盘或卷。Neutron为虚拟机提供网络配置,以及访问云平台的网络通道。图1-7 OpenStack的概念架构

云平台用户(开发者与运维人员,甚至包括其他OpenStack组件)在经Keystone服务认证授权后,通过Horizon或REST API模式创建虚拟机服务。创建过程包括利用Nova服务创建虚拟机实例,虚拟机实例采用Glance提供的镜像服务,然后使用Neutron为新建的虚拟机分配IP地址,并将其纳入虚拟网络中,之后再通过Cinder创建的卷为虚拟机挂载存储块。整个过程都在Ceilometer模块的资源监控下,Cinder 产生的卷(Volume)和 Glance 提供的镜像(Image)可以通过 Swift 的对象存储机制进行保存。

Horizon、Ceilometer、Keystone 提供访问、监控、身份认证(权限)功能,Swift 提供对象存储功能,Heat实现应用系统的自动化部署,Trove用于部署和管理各种数据库,Sahara提供大数据处理框架,而Ironic提供裸金属云服务。

云平台用户通过nova-api等来与其他OpenStack服务交互,而这些OpenStack服务守护进程通过消息总线(动作)和数据库(信息)来执行API请求。

消息队列为所有守护进程提供一个中心的消息机制,消息的发送者和接收者相互交换任务或数据进行通信,协同完成各种云平台功能。消息队列将各个服务进程解耦,所有进程可以任意分布式部署,协同工作在一起。目前RabbitMQ是默认的消息队列实现技术。

SQL 数据库保存了云平台大多数创建和运行时的状态,包括可用的虚拟机实例类型,正在使用的实例、可用的网络和项目等。理论上,OpenStack可以使用任一支持SQL-Alchemy的数据库。1.4.2 OpenStack的逻辑架构

要设计、部署和配置OpenStack,管理员必须理解其逻辑架构(Logical Architecture)。图1-8所示的逻辑架构描述的是OpenStack服务各个组成部分以及各组件之间的逻辑关系(仅列出最通用的服务和组件)。图1-8 OpenStack的逻辑架构

OpenStack包括若干称为OpenStack服务的独立组件。所有服务均可通过一个公共的身份服务进行身份验证。除了那些需要管理权限的命令,每个服务之间均可通过公共API进行交互。

每个 OpenStack 服务又由若干组件组成,包含多个进程。所有的服务至少有一个 API 进程,用于侦听 API 请求,对这些请求进行预处理,并将它们传送到该服务的其他组件。除了认证服务,实际工作是由具体的进程完成的。

至于一个服务的进程之间的通信,则使用AMQP消息代理。服务的状态存储在数据库中。部署和配置OpenStack云时,可以从几种消息代理和数据库解决方案中进行选择,如RabbitMQ、MySQL、MariaDB和SQLite。

用户访问OpenStack有多种方法,可以通过由Horizon仪表板服务实现的基于Web的用户界面,也可以通过命令行客户端,或者通过浏览器插件或curl发送API请求。对于应用程序来说,可以使用多种软件开发工具包(Software Development Kit,SDK)。所有这些访问方法最终都要将REST API调用发送给各种不同的OpenStack服务。

在实际的部署方案中,各个组件可以部署到不同的物理节点上。OpenStack本身是一个分布式系统,不仅各个服务可以分布部署,服务中的组件也可以分布部署。这种分布式特性让OpenStack具备极大的灵活性、伸缩性和高可用性。当然,从另一个角度来看,这一特性也使OpenStack比一般系统复杂,学习难度也更大。1.4.3 OpenStack组件之间的通信关系

OpenStack组件之间的通信关系,可分为以下4种类型。

1.基于AMQP

基于AMQP(Advanced Message Queuing Protocol,高级消息队列协议)进行的通信,主要是每个项目内部各个组件之间的通信,如 Nova 的 nova-compute 与 nova-scheduler 之间,Cinder 的cinder-scheduler 和cinder-volume之间。

虽然通过AMQP进行通信的大部分组件属于同一个项目,但是并不要求它们都安装在同一个节点上,这就大大方便了系统的水平(横向)扩展。管理员可以对其中的各个组件分别按照其负载进行水平扩展,使用不同数量的主机节点承载这些服务。

2.基于SQL的通信

通过数据库连接实现的通信大多用于各个项目内部,也不要求数据库和项目中的其他组件安装在同一节点上,可以分开安装,也可以专门部署数据库服务器,通过基于SQL的连接进行通信。

3.基于HTTP进行通信

通过各项目的API建立的通信关系基本都属于这一类,这些API都是RESTful Web API。最常见的就是通过Horizon仪表板或者命令行接口对各组件进行操作时产生的这种通信,然后就是各组件通过 Keystone 对用户身份进行认证时使用的这种通信。还有一些基于 HTTP 进行通信的情形,如nova-compute在获取镜像时对Glance API的调用、Swift数据的读写等。

4.通过Native API实现通信

这是OpenStack各组件和第三方软硬件之间的通信方式。例如,Cinder与存储后端之间的通信, Neutron的代理(即插件)与网络设备之间的通信,都需要调用第三方的设备或第三方软件的API,这些API被称为Native API,这些通信是基于第三方API的。1.4.4 OpenStack的物理架构

OpenStack是分布式系统,必须从逻辑架构映射到具体的物理架构,将各个项目和组件以一定的方式安装到实际的服务器节点,部署到实际的存储设备上,并通过网络将它们连接起来,这就是OpenStack的物理部署架构。

OpenStack的部署分为单节点部署和多节点部署两种类型。单节点部署就是将所有的服务和组件都放在一个物理节点上,通常是用于学习、验证、测试或者开发。多节点部署就是将服务和组件分别部署在不同的物理节点上。一个典型的多节点部署如图1-9所示。常见的节点类型有控制节点(Control Node)、计算节点(Compute Node)、存储节点(Storage Node)和网络节点(Network Node),下面分别介绍这些节点类型。图1-9 OpenStack的多节点部署

1.控制节点

控制节点又称管理节点,安装并运行各种OpenStack控制服务,负责管理、节制其余节点,执行虚拟机建立、迁移、网络分配、存储分配等任务。OpenStack的大部分服务都是运行在控制节点上,通常包括以下服务。(1)支持服务(Supporting Service)

• 数据库服务器,如SQL数据库。

• 消息队列服务,如RabbitMQ。

• 网络时间协议(Network Time Protocol,NTP)服务。(2)基础服务

运行Keystone认证服务、Glance镜像服务、Nova计算服务的管理组件、Neutron网络服务的管理组件、多种网络代理(Networking agent)和Horizon仪表板。(3)扩展服务

运行Cinder块存储服务、Swift对象存储服务、Trove数据库服务、Heat编排服务和Ceilometer计量服务的部分组件。这对于控制节点来说是可选的。

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

2.计算节点

计算节点是实际运行虚拟机的节点,主要负责虚拟机的运行,为用户创建并运行虚拟机,为虚拟机分配网络。通常包括以下服务。

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载