Openstack:

OpenStack既是一个社区,也是一个项目和一个开源软件,提供开放源码软件,建立公共和私有云,它提供了一个部署云的操作平台或工具集,其宗旨在于:帮助组织运行为虚拟计算或存储服务的云,为公有云、私有云,也为大云、小云提供可扩展的、灵活的云计算。
OpenStackd开源项目由社区维护,包括OpenStack计算(代号为Nova),OpenStack对象存储(代号为Swift),并OpenStack镜像服务(代号Glance)的集合。 OpenStack提供了一个操作平台,或工具包,用于编排云。

openstack基本架构:

 openstack物理架构图:

下面列出Openstack的详细构架图英文版

 网络拓扑图:

组件间的关系图如下: 

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

控制节点架构:

控制节点包括以下服务

   管理支持服务

   基础管理服务包含Keystone、Glance、Nova、Neutron、Horizon五个服务

Keystone:认证管理服务,提供所有组件的认证信息令牌管理、创建和修改,使用mysql数据库存储 认证信息

​ glance:镜像管理服务,提供了对虚机部署的时候提供镜像的管理导入和格式以及制作相应的模板

​ nova:计算管理服务,提供了对计算节点的nova管理、使用nova-api进行通信。

neutron:网络管理服务,提供了网络节点的网络拓扑管理,同时提供neutron在horizon的管理界面

horizon:控制台服务,提供了以web形式对所有节点的所有服务的管理,把该服务成为dashboard。
 

   扩展管理服务 包含:cinder、swift、trove、heat、centmeter五个服务

Cinder:提供管理存储节点的Cinder相关、同时提供Cinder在Horizon中的管理面板

​ Swift:提供管理存储节点Swift相关、同时提供Swift在Horizon中的管理面板

​ Trove:提供管理数据库节点的Trove先关、同时提供Trove在Horizon中的管理面板

​ Heat:提供了基于模板来实现云环境中的资源的初始化,依赖关系处理,部署等基本操作,也可以 解决自动收缩、负 载均衡等高级特性

Centimeter:提供对物理资源以及虚拟资源的监控,并记录这些书库,读数据进行分析,在一定条件下出发现货供应动 作控制节点通常来说只需要一个网络端口来用于通信和管理各个节点
 

   1)管理支持服务包含MySQL与Qpid两个服务

MySQL:数据库作为基础/扩展服务产生的数据存放的地方

Qpid:消息代理(也称消息中间件)为其他各种服务之间提供了统一的消息通信服务

   2)基础管理服务包含Keystone,Glance,Nova,Neutron,Horizon五个服务

Keystone:认证管理服务,提供了其余所有组件的认证信息/令牌的管理,创建,修改等等,使用MySQL作为统一的数据库

Glance:镜像管理服务,提供了对虚拟机部署的时候所能提供的镜像的管理,包含镜像的导入,格式,以及制作相应的模板

Nova:计算管理服务,提供了对计算节点的Nova的管理,使用Nova-API进行通信

Neutron:网络管理服务,提供了对网络节点的网络拓扑管理,同时提供Neutron在Horizon的管理面板

Horizon:控制台服务,提供了以Web的形式对所有节点的所有服务的管理,通常把该服务称为DashBoard

   3)扩展管理服务包含Cinder,Swift,Trove,Heat,Centimeter五个服务

Cinder:提供管理存储节点的Cinder相关,同时提供Cinder在Horizon中的管理面板

Swift:提供管理存储节点的Swift相关,同时提供Swift在Horizon中的管理面板

Trove:提供管理数据库节点的Trove相关,同时提供Trove在Horizon中的管理面板

Heat:提供了基于模板来实现云环境中资源的初始化,依赖关系处理,部署等基本操作,也可以解决自动收缩,负载均衡等高级特性。

Centimeter:提供对物理资源以及虚拟资源的监控,并记录这些数据,对该数据进行分析,在一定条件下触发相应动作

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

网络节点架构

网络节点仅包含Neutron服务

Neutron:负责管理私有网段与公有网段的通信,以及管理虚拟机网络之间的通信/拓扑,管理虚拟机之上的防火等等

网络节点包含三个网络端口

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

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

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

计算节点架构

计算节点包含Nova,Neutron,Telemeter三个服务

  1)基础服务 

Nova:提供虚拟机的创建,运行,迁移,快照等各种围绕虚拟机的服务,并提供API与控制节点对接,由控制节点下发任务

Neutron:提供计算节点与网络节点之间的通信服务

  2)扩展服务

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

计算节点包含最少两个网络端口

eth0:与控制节点进行通信,受控制节点统一调配

eth1:与网络节点,存储节点进行通信

存储节点架构

存储节点包含Cinder,Swift等服务

Cinder:块存储服务,提供相应的块存储,简单来说,就是虚拟出一块磁盘,可以挂载到相应的虚拟机之上,不受文件系统等因素影响,对虚拟机来说,这个操作就像是新加了一块硬盘,可以完成对磁盘的任何操作,包括挂载,卸载,格式化,转换文件系统等等操作,大多应用于虚拟机空间不足的情况下的空间扩容等等

Swift:对象存储服务,提供相应的对象存储,简单来说,就是虚拟出一块磁盘空间,可以在这个空间当中存放文件,也仅仅只能存放文件,不能进行格式化,转换文件系统,大多应用于云磁盘/文件

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

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

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

重要组件介绍

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

 总图:

一.云计算+openstack概念

1.云计算是一种按使用量付费的模式,这种模式提供可用的,便捷的,按需的访问,通过互联网进入可配置的计算资源共享池(资源包括网络,计算,存储,应用软件,服务);

2.OpenStack:是一个开源的云计算管理平台项目,由几个主要的组件组合起来完成具体工作,项目目标是提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台。

二.Openstack组件

共享服务组件(6个):

数据库服务(database service):Mariadb及Mongodb

消息传输(Message Queues): RabbitMQ

缓存(cache):Memcached

时间同步(time sync):ntp

存储(storge provider):ceph,GFS,LVM,ISICI等

高可用及负载均衡:pacemaker,HAproxy,keepalived,lvs

核心组件:

身份服务(Identity Service):Keystone

计算服务(compute):Nova

镜像服务(Image Service):Glance

网络服务(Network):Neutron

块存储服务(Block Storage):Cinder

Web界面服务(Dashboard):Horizon

对象存储(Object Storage):Swift

测量(Metering):Ceillrmeter

部署编排(Orchestration):Heat

三.RabbitMQ

1.概念:属于一个流行的开源消息队列系统。属于AMQP( 高级消息队列协议 ) 标准的一个 实现。是应用层协议的一个开放标准,为面向消息的中间件设计。用于在分布式系统中存储转发消息,在 易用性、扩展性、高可用性等方面表现不俗。

2.耦合/解耦合

3.rabbitmq中的概念:

Broker:简单来说就是消息队列服务器实体。

Exchange:消息交换机,它指定消息按什么规则,路由到哪个队列。

Queue:消息队列载体,每个消息都会被投入到一个或多个队列。
Binding:绑定,它的作用就是把exchange和queue按照路由规则绑定起来。
Routing Key:路由关键字, exchange根据这个关键字进行消息投递。
vhost:虚拟主机,一个broker里可以开设多个vhost,用作不同用户的权限分离。

producer:消息生产者,就是投递消息的程序。

consumer:消息消费者,就是接受消息的程序。

channel:消息通道,在客户端的每个连接里,可建立多个channel,每个channel代表一个会话任务。

4.工作原理

( 1)客户端连接到消息队列服务器,打开一个channel。

( 2)客户端声明一个exchange,并设置相关属性。

( 3)客户端声明一个queue,并设置相关属性。

( 4)客户端使用routing key,在exchange和queue之间建立好绑定关系。

( 5)客户端投递消息到exchange。

( 6) exchange接收到消息后,就根据消息的key和已经设置的binding,进行消息路由,将消息投递到一个或多个队列里。

5.rabbitmq集群部署: 注意必须至少要有一个disk node

四.Memcache

1.概念:

Memcached 是一个开源的、高性能的分布式内存对象缓存系统。通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高网站访问速度,加速动态WEB应用、减轻数据库负载。

2.缓存流程:

(1). 检查客户端请求的数据是否在 Memcache 中,如果存在,直接将请求的数据返回,不在对数据进行任何操作。

(2).如果请求的数据不在 Memcache 中,就去数据库查询,把从数据库中获取的数据返回给客户端,同时把数据缓存一份 Memcache 中
(3).每次更新数据库的同时更新 Memcache 中的数据库。确保数据信息一致性。
(4).当分配给 Memcache 内存空间用完后,会使用LRU(least Recently Used ,最近最少使用 ) 策略加到其失效策略,失效的数据首先被替换掉,然后在替换掉最近未使用的数据

五.Keystone

工作流程:

1.概念:

用于为OpenStack家族中的其它组件成员提供统一的认证服务,包括身份验证、令牌的发放和校验、服务列表、用户权限的定义等。云环境中所有的服务之间的授权和认证都需要经过 keystone. 

(1).管理用户及其权限;

(2).维护 OpenStack Services 的 Endpoint;

(3).Authentication(认证)和 Authorization(鉴权)

2.keystone中概念:

(1).user指代任何使用open stack的实体,可以是真正的用户,其他系统或服务;

(2).Credentials:是user用来证明自己身份的信息,可以是1. 用户名/密码;2.Token;3. API Key;4. 其他高级方式.

(3). Authentication:是 Keystone 验证 User 身份的过程。User 访问 OpenStack时向 Keystone 提交用户名和密码形式的 Credential,Keystone 验证通过后会给 User 签发一个 Token 作为后续访问的 Credential。

(4).Token: Token 是由数字和字母组成的字符串,user成功Authentication后成Token并分配给user。Token用作访问Service的Credential;Service会通过Keystone验证Token的有限性;Token的有效期默认24小时。

(5).Project:用于将open stack的资源进行分组和隔离。根据openstack的服务对象不同,project可以是一个客户,部门或者项目组。

(6).Service包括nova,glance,cinder,neutron等,每个service会提供若干个Endpoint,user通过Endpoint访问资源和执行操作。

(7).Endpoint:是一个网络上可访问的地址,通常是一个URL。Service通过Endpoint暴露自己的API,Keystone负责管路和维护每个service的Endpoint.

(8).Role:可以为user分配一个或多个Role,Service决定每个role能做什么事,系统基本角色有两个:管理员admin和租户_member_

3.Keystone基本框架

Token: 用来生成和管理token

Catalog: 用来存储和管理service/endpoint

Identity: 用来管理tenant/user/role和验证

Policy: 用来管理访问权限

4.通过查询可用image’这个实际操作让大家更加清晰keystone的工作过程及原理:

第一步:登入。

用户admin拿着credential请求登入,Authentication认证通过,并给admin用户一个token;

第二步:显示操作界面。

进入操作界面后,这时admin需要访问image服务。在访问image前发生了:admin询问keystone询问到了能访问admin和demo两个project,同时可以访问instance,Volume,glance等服务。因为这时admin已经从keystone拿到了service的Endpoints.

第三步:显示image列表。

Admin要查看project admin中的image,先是把将请求发送到Glance的Endpoint,Glance向keystone询问admin身份是否有效,接下来Glance会查看/etc/glance/policy.json判断admin是否有查看image的权限。权限判定后,Glance将image列表发给admin。

5.keystone主要有两个日志:keystone.log和keystone_access.log,保存在/var/log/apache2/目录里

6.集群搭建图

六.Glance

1.glance介绍:是openstack项目中负责镜像管理的模块,其功能包括虚拟机镜像的查找,注册和检索等。Glance提供restful api可以查询虚拟机镜像的metadata及获取镜像。Glance可以将镜像保存到多种后端存储上,比如简单的文件存储或者对象存储。

2.Glance架构

Glance-api

Glance-api是系统后台运行的服务进程,对外提供REST API,响应Image查询,获取和存储的调用。Glance-api不会真正处理请求,如果操作是与image metadata相关,glance-api会把请求转发给glance-registry;如果操作是与image自身存取相关,glance-api会把请求转发给image的store backend.

Glance-registry

Glance-registry是系统后台运行的服务进程,负责处理和存取image的metadata,例如image的大小和类型。Glance支持多种格式的image,比较常用的有:Raw,vmdk,ISO,QCOW2.Image的metadata会保持到database中,默认是MySQL。

Store backend

Glance自己并不存储image,真正的image是存放在backend中。Glance支持多种backend,默认是:A directory on a local file system(Filesystem)具体使用哪种backend,实在/etc/glance/glance-api.conf 中配置。

3.创建Image

方法一:在web界面中创建(步骤见博客)

方法二:在命令行创建

1. 将image上传到控制节点的文件系统中,例如: /tmp/cirros-0.3.5-x86_64-disk.img

2. glance image-create --name cirros1 --file /tmp/cirros-0.3.5-x86_64-disk.img --disk-format qcow2 --container-format bare --progress

一般创建比较大的镜像用命令行创建会更快和方便。

Image放在/var/lib/glance/images/

4.glance日志:glance_api.log 和glance_registry.log,保存/var/log/glance目录中

七.Nova

1.nova介绍:是openstack最核心的服务,负责维护和管理云计算计算资源。

从上图可以看出,nova处于openstack架构的中心,其他组件都为nova提供支持glance为VM提供image,cinder和swift分别为VM提供块存储和对象存储,neutron提供网络连接。

2.nova组件介绍

1.nova-api

是整个nova的门户,所有对nova的请求都首先由nova-api处理。Nova-api向外暴露若干HTTP rest api 接口在keystone中,客户端可以将请求发送到endpoint指定的地址,向nova-api请求操作。

Nova-api对收到的HTTP api请求会做如下处理:

(1).检查客户端传入的参数是否合法;

(2).调用nova其他子服务的处理客户端HTTP请求;

(3).格式化nova其他子服务返回的结果并返回给客户端。

2.nova-conductor

Nova-compute需要获取和更新数据库中instance的信息,但nova-compute并不会直接访问数据库,而是通过nova-conductor实现数据的访问。

使用nova-conductor的两个显著好处:

(1).更好的系统安全性:早期的openstack版本中,nova-compute可以直接访问数据库,但试想如果任意一个计算节点被黑客入侵,都会导致控制节点上的数据库面临极大的风险。为了解决这个问题,引入了nova-conductor;

(2)更好的伸缩性:nova-conductor建立后,提高了nova的伸缩性。Nova-compute与conductor是通过消息中间件交互的。这种松散的架构允许配置多个nova-conductor实例,从而应对日益增长的计算节点对数据库的访问。

3.nova-scheduler

虚拟机调度服务,负责决定在哪个计算节点上运行虚机。

如何选择计算节点——启动实例调度策略

Filter scheduler(调度器),调度过程分两步:

(1).通过过滤器(filter)选择满足条件的计算节点(运行nova-compute)

(2).通过权重计算(weighting)选择在最优(权重值最大)的计算节点上创建instance

Filter具体有哪些:

RetryFilter

AvailabilityZoneFilter

RamFilter

DiskFilter

CoreFilter

ComputeFilter

ComputeCapabilitiesFilter

ImagePropertiesFilter

ServerGroupAntiAffinityFilter

ServerGroupAffinityFilter

Weight: 默认实现是根据计算节点空闲的内存量计算权重值: 空闲内存越多,权重越大,instance 将被部署到当前空闲内存最多的计算节点上。

4.nova-compute(装在计算节点上)

nova-compute 在计算节点上运行,负责管理节点上的 instance。OpenStack 对 instance 的操作,最后都是交给 nova-compute 来完成的。nova-compute 与 Hypervisor 一起实现 OpenStack 对 instance 生命周期的管理。

5.Console Interface

nova-console:

用户可以通过多种方式访问虚机的控制台:

nova-novncproxy,基于 Web 浏览器的 VNC 访问
nova-spicehtml5proxy,基于 HTML5 浏览器的 SPICE 访问
nova-xvpnvncproxy,基于 Java 客户端的 VNC 访问

nova-consoleauth

负责对访问虚机控制台请求提供 Token 认证

nova-cert

提供 x509 证书支持

3.从创建虚机流程看nova子服务如何协同工作

1.客户(可以是 OpenStack 最终用户,也可以是其他程序)向 API(nova-api)发送请求:“帮我创建一个虚机”

2.API 对请求做一些必要处理后,向 Messaging(RabbitMQ)发送了一条消息:“让 Scheduler 创建一个虚机”

3.Scheduler(nova-scheduler)从 Messaging 获取到 API 发给它的消息,然后执行调度算法,从若干计算节点中选出节点 A

4.Scheduler 向 Messaging 发送了一条消息:“在计算节点 A 上创建这个虚机”

5.计算节点 A 的 Compute(nova-compute)从 Messaging 中获取到 Scheduler 发给它的消息,然后在本节点的 Hypervisor 上启动虚机。

6.在虚机创建的过程中,Compute 如果需要查询或更新数据库信息,会通过 Messaging 向 Conductor(nova-conductor)发送消息,Conductor 负责数据库访问。

在前面创建虚机的流程示意图中,我们看到 nova-* 子服务之间的调用严重依赖 Messaging。Messaging 是 nova-* 子服务交互的中枢。

以前没接触过分布式系统的同学可能会不太理解为什么不让 API 直接调用Scheduler,或是让Scheuler 直接调用 Compute,而是非要通过 Messaging 进行中转。 这里做一些解释。程序之间的调用通常分两种:同步调用和异步调用。
同步调用

API 直接调用 Scheduler 的接口是同步调用。 其特点是 API 发出请求后需要一直等待,直到 Scheduler 完成对 Compute 的调度,将结果返回给 API 后 API 才能够继续做后面的工作。

异步调用

API 通过 Messaging 间接调用 Scheduler 就是异步调用。 其特点是 API 发出请求后不需要等待,直接返回,继续做后面的工作。 Scheduler 从 Messaging 接收到请求后执行调度操作,完成后将结果也通过 Messaging 发送给 API。在 OpenStack 这类分布式系统中,通常采用异步调用的方式,其好处是:

1.解耦各子服务。 子服务不需要知道其他服务在哪里运行,只需要发送消息给 Messaging 就能完成调用。

2.提高性能 异步调用使得调用者无需等待结果返回。这样可以继续执行更多的工作,提高系统总的吞吐量。

3.提高伸缩性 子服务可以根据需要进行扩展,启动更多的实例处理更多的请求,在提高可用性的同时也提高了整个系统的伸缩性。而且这种变化不会影响到其他子服务,也就是说变化对别人是透明的。

4.实现 instance 生命周期的管理

nova-compute 创建 instance 的过程可以分为 4 步:

(1).为 instance 准备资源

(2).创建 instance 的镜像文件

(3).创建 instance 的 XML 定义文件

(4).创建虚拟网络并启动虚拟机

5.Nova 创建虚拟机详细过程

1.界面或命令行通过RESTful API向keystone获取认证信息。

2、keystone通过用户请求认证信息,并生成auth-token返回给对应的认证请求。

3、界面或命令行通过RESTful API向nova-api发送一个boot instance的请求(携带auth-token)。

4、nova-api接受请求后向keystone发送认证请求,查看token是否为有效用户和token。

5、keystone验证token是否有效,如有效则返回有效的认证和对应的角色(注:有些操作需要有角色权限才能操作)。

6、通过认证后nova-api和数据库通讯。

7、初始化新建虚拟机的数据库记录。

8、nova-api通过rpc.call向nova-scheduler请求是否有创建虚拟机的资源(Host ID)。

9、nova-scheduler进程侦听消息队列,获取nova-api的请求。

10、nova-scheduler通过查询nova数据库中计算资源的情况,并通过调度算法计算符合虚拟机创建需要的主机。

11、对于有符合虚拟机创建的主机,nova-scheduler更新数据库中虚拟机对应的物理主机信息。

12、nova-scheduler通过rpc.cast向nova-compute发送对应的创建虚拟机请求的消息。

13、nova-compute会从对应的消息队列中获取创建虚拟机请求的消息。

14、nova-compute通过rpc.call向nova-conductor请求获取虚拟机消息。(Flavor)

15、nova-conductor从消息队队列中拿到nova-compute请求消息。

16、nova-conductor根据消息查询虚拟机对应的信息。

17、nova-conductor从数据库中获得虚拟机对应信息。

18、nova-conductor把虚拟机信息通过消息的方式发送到消息队列中。

19、nova-compute从对应的消息队列中获取虚拟机信息消息。

20、nova-compute通过keystone的RESTfull API拿到认证的token,并通过HTTP请求glance-api获取创建虚拟机所需要镜像。

21、glance-api向keystone认证token是否有效,并返回验证结果。

22、token验证通过,nova-compute获得虚拟机镜像信息(URL)。

23、nova-compute通过keystone的RESTfull API拿到认证k的token,并通过HTTP请求neutron-server获取创建虚拟机所需要的网络信息。

24、neutron-server向keystone认证token是否有效,并返回验证结果。

25、token验证通过,nova-compute获得虚拟机网络信息。

26、nova-compute通过keystone的RESTfull API拿到认证的token,并通过HTTP请求cinder-api获取创建虚拟机所需要的持久化存储信息。

27、cinder-api向keystone认证token是否有效,并返回验证结果。

28、token验证通过,nova-compute获得虚拟机持久化存储信息。

29、nova-compute根据instance的信息调用配置的虚拟化驱动来创建虚拟机。

九.Horizon

1.区域(Region

(1).地理上的概念,可以理解为一个独立的数据中心,每个所定义的区域有自己独立的Endpoint;

(2).区域之间是完全隔离的,但多个区域之间共享同一个Keystone和Dashboard(目前Openstack中的Dashboard还不支持多个区域);

(3).除了提供隔离的功能,区域的设计更多侧重地理位置的概念,用户可以选择离自己更新的区域来部署自己的服务,选择不同的区域主要是考虑那个区域更靠近自己,如用户在美国,可以选择离美国更近的区域;

(4).区域的概念是由Amazon在AWS中提出,主要是解决容错能力和可靠性;

2.可用性区域(Availablilty Zone

AZ是在Region范围内的再次切分,例如可以把一个机架上的服务器划分为一个AZ,划分AZ是为了提高容灾能力和提供廉价的隔离服务;

3.Host Aggreates

一组具有共同属性的节点集合,如以CPU作为区分类型的一个属性,以磁盘(SSD\SAS\SATA)作为区分类型的一个属性,以OS(Windows\Linux)为作区分类型的一个属性;

4.Cell

nova为了增加横向扩展以及分布式、大规模(地理位置级别)部署的能力,同时又不增加数据库和消息中间件的复杂度,引入了cell的概念,并引入了nova-cell服务。

(1).主要是用来解决OpenStack的扩展性和规模瓶颈;

(2).每个Cell都有自己独立的DB和AMQP,不与其他模块共用DB和AMQP,解决了大规模环境中DB和AMQP的瓶颈问题;

(3).Cell实现了树形结构(通过消息路由)和分级调度(过滤算法和权重算法),Cell之间通过RPC通讯,解决了扩展性问题;

十.Cinder

1.cinder架构

Cinder-api接收 API 请求,调用 cinder-volume ;

Cinder-volume管理 volume 的服务,与 volume provider 协调工作,管理 volume 的生命周期。运行 cinder-volume 服务的节点被称作为存储节点。

cinder-schedulerscheduler 通过调度算法选择最合适的存储节点创建 volume。

volume provider数据的存储设备,为 volume 提供物理存储空间。 cinder-volume 支持多种 volume provider,每种 volume provider 通过自己的 driver 与cinder-volume 协调工作。

Message QueueCinder 各个子服务通过消息队列实现进程间通信和相互协作。因为有了消息队列,子服务之间实现了解耦,这种松散的结构也是分布式系统的重要特征。

Database Cinder 有一些数据需要存放到数据库中,一般使用 MySQL。数据库是安装在控制节点上。

2.volume创建流程看cinder子服务如何协同工作:

1.客户(可以是 OpenStack 最终用户,也可以是其他程序)向 API(cinder-api)发送请求:“帮我创建一个 volume”;

2.API 对请求做一些必要处理后,向 Messaging(RabbitMQ)发送了一条消息:“让 Scheduler 创建一个 volume”

3.Scheduler(cinder-scheduler)从 Messaging 获取到 API 发给它的消息,然后执行调度算法,从若干计存储点中选出节点 A

4.Scheduler 向 Messaging 发送了一条消息:“让存储节点 A 创建这个 volume”

5.存储节点 A 的 Volume(cinder-volume)从 Messaging 中获取到 Scheduler 发给它的消息,然后通过 driver 在 volume provider 上创建 volume。

数据持久化

如果您想创建一个使用临时存储的实例,意味着当实例被删除时数据会丢失,那么从以下启动项中选择一个:

镜像:本选项使用一个镜像启动实例。

实例快照:此选项使用一个实例快照来启动实例。

如果您想创建一个使用持久存储的实例,意味着当实例被删除时数据被保存,那么选择从以下启动项中选择一个

镜像(带有选中创建新卷:此选项使用镜像来启动实例,并且创建一个新卷来持久化实例数据。您可以指定卷大小并指定在删除实例时是否删除实例。

:这个选项使用一个已存在的卷。它不创建新卷。您可以选择在删除实例时删除卷。注意:当选择卷时,您只能启动一个实例。

卷快照:此选项使用卷快照启动实例,并且创建一个新卷来持久化实例数据。您可以选择在删除实例时删除卷。

十一: Openstack -- 消息队列

Openstack项目内部各组件之间采用远程通信机制RPC,而RPC采用消息队列来实现进程间的通信。Openstack使用的消息队列协议是AMQP,这是一个异步消息传递使用的应用层协议规范。应用程序之间无须专用连接,通过读写出入队列的消息即可进行相互通信。Openstack利用开源库oslo.messaging实现内部服务进程之间的通信。

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

2、AMQP的通信机制

1)建立连接,由生产者和消费者创建连接,连接到服务器/代理的物理节点上;

2)建立消息信道,信道建立在连接之上,一个连接可以建立多个信道,生产者连接虚拟主机建立信道,消费者连接到相应的队列上建立信道;

3)发送消息,生产者将消息发送到服务器/代理中的交换器;

4)转发消息,交换器收到消息后,根据一定的路由策略将消息转发到对应的队列;

5)接受消息,消费者监听相应的队列,一旦队列中有可以消费的消息,队列就将消息发送给消费者;

6)消息确认。当消费者完成一条消息的处理后,需要发送一条确认消息给相应的队列。

3、openstack中AMQP

Nova中的每个组件都会连接消息服务器,一个组件可能是一个消息发送者,也可能是一个消息接受者。Openstack默认使用kombu连接RabbitMQ服务器,消息的发送者与接受者都需要一个连接对象来连接RabbitMQ服务器。

Nova基于AMQP实现了下面两种类型的RPC:

1)rpc.call,同步调用,一个请求发送出去后,需要等待响应,调用需要指定目标服务节点;

2)rpc.cast,一般调用,是一种单向RPC,只将请求发送出去,不需要等待结果,不关心请求由哪个服务节点完成。
 

总结归类:openstackf的基本常用命令:

keystone 身份认证服务安装
glance 镜像存储服务安装
nova 计算服务安装
neutron 网络服务安装
horizon 管理面板安装
虚拟机网络设置 /etc/sysconfig/network-scripts/
修改主机名 /etc/sysconfig/network中的hostname
主机地址映射配置 /etc/hosts
禁用selinux /etc/selinux/config使selinux=disabled
CentOS6.5本地yum源配置
①新建挂载点
②挂载镜像到挂载点 mount /dev/cdrom /media/cdrom
③进入yum源配置目录 /etc/yum.repos.d
③改变网络源文件目录,停止使用网络源,使用本地源 CentOS-Media.repo中将enabled=0改为1
④清空缓存
⑤制作新的缓存

安装SCP yum -y install openssh-clients
安装NTP
NTP配置文件 /etc/ntp.conf
查询网络中的NTP服务器 ntpq -p
安装ftp yum -y install vsftpd
配置文件 /etc/vsftpd/vsftpd.conf
查看yum列表 yum list | wc -l
keystone
token 通常指一串比特值或字符串,用来做访问资源的记号。其中包含可以访问的资源范围和有效时间。
租户:早起被叫做project,是各个服务中可以访问的资源集合。用户在访问租户资源时,必须与该租户关联,并指定该用户在该租户下的角色。
用户:可以是一个人或一个服务或使用OpenStack相关服务的一个组织,OpenStack通过注册相关服务用户来管理用户。
角色:代表一组用户可以访问的资源权限,角色决定了用户的权限。
mysql的配置文件 /etc/my.cnf
启动mysql服务器 service mysqld start
mysql开机自启
①chkconfig --add mysqld
②chkconfig mysqld on
修改mysql数据库root密码为openstack
/usr/bin/mysqladmin -u root password ‘openstack’
mysql数据库初始化 mysql_install_db
安装软件包 rpm -ivh
启动RabbitMQ服务
service rabbitmq-server start
查看rabbitmq用户列表
rabbitmqctl list_users
rabbitmqctl list_permissions
rabbitmq创建用户
rabbitmqctl add_user nova NOVA_MQPASS
rabbitmq对用户授权
rabbitmqctl set_permissions -p /nova ‘.’ '.’ ‘.*’
连接数据库 mysql -uroot -p openstack
显示所有数据库 show databases;
创建数据库 create database keystone;
授权本地用户
grant all privileges on keystone. * to ‘keystone’@‘localhost’ identified by ‘KEYSTONE_DBPASS’;
授权远程用户
grant all privileges on keystone. * to ‘keystone’@’%’ identified by ‘KEYSTONE_DBPASS’;
查看所有用户
select user from mysql.user;
生成token
export ADMIN_TOKEN=$(openssl rand -hex 10)
配置token
openstack-config --set /etc/keystone/keystone.conf DEFAULT admin_token XXX
配置数据库连接 /etc/hosts
日志文件 /var/log/keystone/keystone.log
同步数据库
su -s /bin/sh -c “keystone-manage db_sync” keystone
显示所有表
mysql -ukeystone -pKEYSTONE_DBPASS -e “show tables from keystone”;
启动keystone服务
service openstack-keystone on
创建租户tenent
①keystone tenant-create --name admin --description “Admin Tenant”
②keystone tenant-get XXX
③keystone tenant-list
创建admin用户
keystone user-create --name admin --pass ADMIN_PASS --email
创建admin角色
keystone role-create --name admin
将用户赋予admin角色和admin租户中
keystone user-role-add --user admin --role admin --tenant admin
查看:keystone user-role-list --user admin --tenant admin
创建service类型
keystone service-create --name keystone --type identity --description
查看已创建的endpoint
keystone endpoint-list
取消keystone的环境变量
unset OS_SERVICE_TOKEN
unset OS_SERVICE_ENDPOINT
校验admin
keystone --os-username admin --os-tenant-name admin --os-password ADMIN_PASS --os-auth-url http://controller0:35357/v2.0 user-list
glance
磁盘格式镜像的基本格式
raw qcow2 VDI VHD OVF AMI/AKI/ARI
容器格式
bare ovf aki ari ami ova
环境变量生效
source /root/admin-openrc.sh
配置数据库连接
openstack-config --set /etc/glance/glance-api.conf database connection mysql://glance:GLANCE_DBPASS@controller0/glance
/etc/glance/glance-registry.conf
启动glance服务
①service openstack-glance-api start
②service openstack-glace-registry start
日志路径
/var/log/glance/api.log
/var/log/glance/registry.log
查看glance镜像信息
file cirros-0.3.0-x86_64-disk.img
创建镜像
glance image-creat --name cirros --dish-format qcow2 --container-format bare --file XXX
校验glance是否上传成功
①glance image-list
②glance image-show XXX
nova
配置数据库连接
/etc/nova/nova.conf
启动nova相关的服务(6个)
①service openstack-nova-api start
②service openstack-nova-scheduler start
③service openstack-nova-cert start
④service openstack-nova-consoleauth start
⑤service openstack-conductor start
⑥service openstack-nova-novnprocy start
compute节点上需要启动的nova服务
openstack-nova-compute
libvirtd
messagebus
在controller上校验nova服务
source /root/admin-openrc.sh
nova service-list
openstack-status
nova日志文件
如 /var/log/nova/nova-api.log
neutron-controller0
neutron五个主要子服务
neutron-server、neutron-openvswitch-agent、neutron-dhcp-agent、neutron-l3-agent、neutron-metadata-agent、openvswitch
配置文件
/etc/neutron/neutron.conf
/etc/neutron/plugins/ml2/ml2_conf.ini
查看service租户的id号码
keystone tenant-list | grep service
启动neutron-server服务
ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini
service neutron-server start
controller0上校验neutron配置
source admin-openrc.sh
neutron ext-list
controller0上查看所有服务的状态
openstack-service status
openstack-status
horizon
安装Django14
rpm -ivh
设置openstack-dashboard
/etc/openstack-dashboard/local_settings
启动的服务
service httpd start
service memcached start
neutron-computer0
配置网络核心参数
/etc/sysctl.conf
启动服务
openvswitch
openstack-nova-compute
neutron-openvswitch-agent
检查agent是否启动正常
在computer0上 openstack-status
在controller0上 neutron agent-list
neutron-network0
配置文件
/etc/neutron/l3_agent.ini
/etc/neutron/dhcp_agent.ini
/etc/neutron/dnsmasq-neutron.conf
/etc/neutron/metadata_agent.ini
添加网桥
ovs-vsctl add-br br-int
添加外部网
ovs-vsctl add-br br-ex
将网络接口eth1挂接到网桥br-ex上
ovs-vsctl add-port br-ex eth1
controller0节点上验证neutron
neutron agent-list
开机启动文件
/etc/rc.local中写入
Ip link set br-ex up
ip addr add 172.16.0.20/24 dev br-ex
网卡
br-ex br-int br-tun eth0 eth1 eth2

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐