文章目录
- 知识点
- 云计算
- 起源
- 定义
- 特点
- 分类
- 服务类型
- 平台分类
- 应用
- 虚拟化
- 虚拟化技术
- 定义
- 分类
- 云计算和虚拟化的关系
- 虚拟化的优点
- OpenStack
- 简介
- 核心架构
- Openstack组件
- 共享服务组件
- 核心组件
- 组件详解
- RabbitMQ
- 概念
- 特点
- rabbitmq中的概念
- 工作原理
- 常用操作
- Memcached
- Keystone
- Glance
- 工作原理
- Nova(核心)
- Horizon
- 作用:web界面服务(Dashboard),提供了以Web的形式对所有节点的所有服务的管理
- 区域(Region)
- 可用性区域(Availability Zone)
- Cell
- Cinder
- 搭建云平台(单双节点)
- 创建虚拟机并配置网络
- 面试题
- 说一下 OpenStack 及其主要组件?
- 什么服务通常在控制节点上运行?
- 计算节点上虚拟机的默认地址是什么?
- 什么服务通常在计算节点上运行?
- Glance 镜像的默认地址是什么?
- 说一下如何使用命令行启动一个虚拟机?
- 如何在 OpenStack 中显示用户的网络命名空间列表?
- 在 Glance 服务中如何使用命令行上传和下载镜像?
- OpenStack 如何将虚拟机从错误状态转换为活动状态?
- 如何使用命令行来获取可使用的浮动 IP 列表?
- 如何在特定可用区域中或在计算主机上配置虚拟机?
- 如何使用命令行查看 OpenStack 实例的控制台日志?
- 如何在特定计算节点上获取配置的虚拟机列表?
- 如何获取 OpenStack 实例的控制台的 URL 地址?
- 如何使用命令行创建可启动的 cinder / block 存储卷?
- 如何列出所有在你的 OpenStack 中创建的项目或用户?
- 如何显示 OpenStack 服务端点列表?
- 在控制节点上你应该按照什么步骤来重启 nova 服务?
- 如何使用命令行在 OpenStack 中向存在的安全组 SG(安全组)中添加新规则?
- 假如计算节点上为数据流量配置了一些 DPDK 端口,你如何检查 DPDK 端口的状态呢?
- 如何查看控制节点和计算节点的 OVS 桥配置?
- 计算节点上的集成桥(br-int)的作用是什么?
- 隧道桥(br-tun)在计算节点上的作用是什么?
- 外部 OVS 桥(br-ex)的作用是什么?
- OpenStack 网络中 OpenFlow 规则的作用是什么?
- 怎样查看 OpenFlow 交换机的信息(比如端口、表编号、缓存编号等)?
- CPU Pinning 是什么?
- 如何显示交换机中的所有 flow 的入口?
- 什么是 Neutron 代理?如何显示所有 Neutron 代理?
知识点
云计算
起源
云计算这个概念首次在2006年8月的搜索引擎会议上提出,成为了继互联网、计算机后信息时代的又一种革新(互联网第三次革命)。
云计算的核心是将资源协调在一起,使用户通过网络就可以获取到无限的资源并且不受时间和空间的限制,为用户提供一种全新的体验。
定义
云计算是一种按使用量付费的模式(资源服务模式),该模式可以实现随时随地、便捷按需的从可配置资源共享池中获取所需的资源。
云计算是基于互联网的相关服务的增加、使用和交付模式,通常涉及通过互联网来提供动态易扩展且经常是虚拟化的资源。
特点
- 按需部署:根据用户的需求快速配备计算能力及资源分配。
- 资源池化:供应商的资源被池化,以多用户租用模式被不同客户使用。
- 快速伸缩:资源可以弹性的部署和释放。
- 可靠性高:倘若服务器故障也不影响计算与应用的正常运行。
分类
私有云:云计算基础设施由一个单一的组织部署和使用。
公有云:云计算基础设施被部署给广泛的公众公开使用。
混合云:使用标准或专有的技术组合以上两种云。
服务类型
IaaS(基础设施即服务):提供商提供虚拟化计算资源,如虚拟机、存储、网络和操作系统。
PaaS(平台即服务):通过互联网为开发人员提供构建应用程序和服务的平台。
SaaS(软件即服务):通过互联网为用户提供按需软件付费应用程序。
平台分类
1)从技术应用划分
- 以数据存储为主的存储型云平台
- 以数据处理为主的计算型云平台
- 计算和存储兼顾的综合型云平台
2) 从是否收费划分
开源云平台:AbiCloud、Hadoop、Eucalyptus、MongoDB、OpenStack
商业化云平台:Google、IBM、Oracle、Amazon、阿里云等
应用
存储云:云存储是一个以数据存储和管理为核心的云计算系统。用户可以将本地的资源上传至云端上,可以在任何地方连入互联网来获取云上的资源。
医疗云:使用云计算来创建医疗健康服务云平台,实现了医疗资源的共享和医疗范围的扩大
金融云:利用云计算的模型,将信息、金融和服务等功能分散到庞大分支机构构成的互联网“云”中,共享互联网资源,从而解决现有问题并且达到高效、低成本的目标。
教育云:教育云可以将所需要的任何教育硬件资源虚拟化,然后将其传入互联网中,以向教育机构和学生老师提供一个方便快捷的平台。
虚拟化
虚拟化技术
定义
虚拟化是一个广义上的术语,是指计算元件在虚拟的基础上而不是真实的基础上运行,是一个为了简化管理,优化资源的解决方案。
分类
桌面虚拟化:在本地计算机显示和操作远程计算机桌面,在远程计算机执行程序和储存信息。
应用虚拟化:在操作系统和应用程序间建立虚拟环境。
服务器虚拟化:将服务器物理资源抽象成逻辑资源形成动态管理的“资源池”。
网络虚拟化:将不同网络的硬件和软件资源结合成一个虚拟的整体。
存储虚拟化:将实体存储空间分隔成不同的逻辑存储空间。
云计算和虚拟化的关系
虚拟化的优点
- 提高IT资源利用率,加速应用部署,提高应用兼容性。
- 显著减少了服务器的数量,企业不动资产和管理成本。
OpenStack
简介
定义
百度百科:OpenStack是一个开源的云计算管理平台项目,由NASA(美国国家航空航天局)和Rackspace合作研发并发起,以Apache许可证授权的开源代码项目。
官方:OpenStack是一个云操作系统,通过数据中心可控制大型的计算、存储、网络等资源池。所有的管理通过前端界面管理员就可以完成,同样也可以通过web接口让最终用户部署资源。
核心架构
- 物理架构图
-
逻辑架构图
-
概念架构图
Openstack组件
共享服务组件
- 数据库服务(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。提供了其余所有组件的认证信息/令牌的管理,创建,修改等等,使用MySQL作为统一的数据库。
- 镜像服务(Image Service):Glance。提供了对虚拟机部署的时候所能提供的镜像的管理,包含镜像的导入,格式,以及制作相应的模板
- 计算服务(compute):Nova。负责维护和管理云计算计算资源,维护和管理计算和网络。
- 网络服务(Network):Neutron。提供了对网络节点的网络拓扑管理,同时提供Neutron在Horizon的管理面板
- Web界面服务(Dashboard):Horizon。提供了以Web的形式对所有节点的所有服务的管理
- 块存储服务(Block Storage):Cinder。为运行实例提供稳定的数据块存储服务
- 对象存储(Object Storage):Swift。为Glance提供镜像存储和卷备份服务
- 测量(Metering):Ceillrmeter。提供对物理资源以及虚拟资源的监控,并记录这些数据,对该数据进行分析,在一定条件下触发相应动作
- 部署编排(Orchestration):Heat。提供了基于模板来实现云环境中资源的初始化,依赖关系处理,部署等基本操作,也可以解决自动收缩,负载均衡等高级特性。
- 数据库服务(Database Service):Trove。提供可扩展和可靠的关系和非关系数据库引擎服务
组件详解
RabbitMQ
概念
属于一个流行的开源消息队列系统。属于AMQP( 高级消息队列协议 ) 标准的一个 实现。是应用层协议的一个开放标准,为面向消息的中间件设计。用于在分布式系统中存储转发消息,在 易用性、扩展性、高可用性等方面表现不俗。
特点
- 开源,性能优秀,稳定性保障。
- 提供可靠性消息投递模式、返回模式和HA模式、表达式配置及镜像队列模型
- 集群模式丰富,语Spring AMQP完美整合,保证数据不丢失的前提做到高可靠性和可用性
rabbitmq中的概念
Broker:简单来说就是消息队列服务器实体。
Exchange:消息交换机,它指定消息按什么规则,路由到哪个队列。
Queue:消息队列载体,每个消息都会被投入到一个或多个队列。
Binding:绑定,它的作用就是把exchange和queue按照路由规则绑定起来。
Routing Key:路由关键字, exchange根据这个关键字进行消息投递。
vhost:虚拟主机,一个broker里可以开设多个vhost,用作不同用户的权限分离。
producer:消息生产者,就是投递消息的程序。
consumer:消息消费者,就是接受消息的程序
channel:消息通道,在客户端的每个连接里,可建立多个channel,每个
channel代表一个会话任务。
工作原理
( 1)客户端连接到消息队列服务器,打开一个channel。
( 2)客户端声明一个exchange,并设置相关属性。
( 3)客户端声明一个queue,并设置相关属性。
( 4)客户端使用routing key,在exchange和queue之间建立好绑定关系。
( 5)客户端投递消息到exchange。
( 6) exchange接收到消息后,就根据消息的key和已经设置的binding,进行消息路由,将消息投递到一个或多个队列里。
rabbitmq集群部署: 注意必须至少要有一个disk node
常用操作
Memcached
- 概念:Memcached 是一个开源的、高性能的分布式内存对象缓存系统。通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高网站访问速度,加速动态WEB应用、减轻数据库负载。
- 缓存流程
检查客户端请求的数据是否在 Memcache 中,如果存在,直接将请求的数据返回,不在对数据进行任何操作。
如果请求的数据不在 Memcache 中,就去数据库查询,把从数据库中获取的数据返回给客户端,同时把数据缓存一份 Memcache 中
每次更新数据库的同时更新 Memcache 中的数据库,确保数据信息一致性。
当分配给 Memcache 内存空间用完后,会使用 LRU (least Recently Used ,最近最少使用 )策略加到其失效策略,失效的数据首先被替换掉,然后再替换掉最近未使用的数据。
Keystone
1.概念:
用于为OpenStack家族中的其它组件成员提供统一的认证服务,包括身份验证、令牌的发放和校验、服务列表、用户权限的定义等。云环境中所有的服务之间的授权和认证都需要经过 keystone.
(1)管理用户及其权限;
(2)维护 OpenStack Services 的 Endpoint;
(3)Authentication(认证)和 Authorization(鉴权)
作用:认证服务,提供了其余所有组件的认证信息/令牌的管理,创建,修改等等,使用MySQL作为统一的数据库。
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.集群搭建图
核心概念
工作原理
4. 工作流程(在各个组件中的作用)
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界面中创建(步骤见博客)
方法二:在命令行创建
-
将image上传到控制节点的文件系统中,例如: /tmp/cirros-0.3.5-x86_64-disk.img
-
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目录中
作用:镜像服务,提供了对虚拟机部署的时候所能提供的镜像的管理,包含镜像的导入,格式,以及制作相应的模板
核心概念
工作原理
1. Glance-api:接收REST API的请求,然后通过其他模块来完成诸如镜像的查找、获取、上传、删除等操作,默认监听端口9292。2. Glance-registry:用于与MariaDB数据库交互,用于存储或获取镜像的元数据(metadata),默认监听端口9191。3. Store Adapter:通过提供的存储接口来获取镜像
Nova(核心)
1)作用:负责维护和管理的网络和存储,提供计算服务
2)核心组件
3)虚拟机创建流程
1.nova介绍:是openstack最核心的服务,负责维护和管理云计算计算资源。
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
作用:web界面服务(Dashboard),提供了以Web的形式对所有节点的所有服务的管理
区域(Region)
- 地理上的概念,可以理解为一个独立的数据中心,每个所定义的区域有自己独立的Endpoint;
- 区域之间是完全隔离的,但多个区域之间共享同一个Keystone和Dashboard(目前Openstack中的Dashboard还不支持多个区域);
- 区域的设计更多侧重地理位置的概念,用户可以选择离自己更新的区域来部署自己的服务,选择不同的区域主要是考虑那个区域更靠近自己;
- 区域的概念是由Amazon在AWS中提出,主要是解决容错能力和可靠性;
可用性区域(Availability Zone)
1. AZ是在Region范围内的再次切分,例如可以把一个机架上的服务器划分为一个AZ,划分AZ是为了提高容灾能力和提供廉价的隔离服务;2. AZ主要是通过冗余来解决可用性的问题,在Amazon的声明中,Instance不可用是指用户所有AZ中的同一个Instance都不可达才表明不可用;3. AZ是用户可见的一个概念,并可选择,是物理隔离的,一个AZ不可用不会影响其他的AZ,用户在创建Instance的时候可以选择创建到那些AZ中;4. Host Aggreates:一组具有共同属性的节点集合,如以CPU作为区分类型的一个属性
Cell
-
概念:nova为了增加横向扩展以及分布式、大规模(地理位置级别)部署的能力,同时又不增加数据库和消息中间件的复杂度,引入了cell的概念,并引入了nova-cell服务。
-
作用
- 解决OpenStack的扩展性和规模瓶颈
- 每个Cell都有自己独立的DB和AMQP,不与其他模块共用DB和AMQP,解决了大规模环境中DB和AMQP的瓶颈问题;
- Cell实现了树形结构(通过消息路由)和分级调度(过滤算法和权重算法),Cell之间通过RPC通讯,解决了扩展性问题;
Cinder
-
作用:存储服务,为运行实例提供稳定的数据块存储服务
-
核心组件
-
工作流程
- 用户向 cinder-api发送创建volume的请求
- cinder-api对请求做一些必要处理后,通过 Messaging将创建消息发送给cinder-scheduler
- cinder-scheduler从 Messaging 获取到 cinder-api发给它的消息,然后执行调度算法,从若干计存储点中选出节点 A
- cinder-scheduler通过 Messaging 将创建消息发送给存储节点A
- 存储节点 A 的 cinder-volume从 Messaging 中获取到 cinder-scheduler发给它的消息,然后通过 driver 在 volume provider 上创建 volume。
数据持久化
镜像(带有选中“创建新卷”):此选项使用镜像来启动实例,并且创建一个新卷来持久化实例数据。您可以指定卷大小并指定在删除实例时是否删除实例。
卷:这个选项使用一个已存在的卷。它不创建新卷。您可以选择在删除实例时删除卷。注意:当选择卷时,您只能启动一个实例。
卷快照:此选项使用卷快照启动实例,并且创建一个新卷来持久化实例数据。您可以选择在删除实例时删除卷。
搭建云平台(单双节点)
创建虚拟机并配置网络
- 虚拟机规格(单双节点均可用)
- 网络配置
3 . 基本环境配置
4 . 编辑环境变量
5 . 执行脚本安装服务
1 . 单节点(computer改为compute)
2 . 双节点(computer改为compute)
面试题
说一下 OpenStack 及其主要组件?
OpenStack 是一系列开源软件,这些软件组成了一个云供给软件,也就是 OpenStack,意即开源软件或项目栈。
下面是 OpenStack 的主要关键组件:
Nova – 用于在计算级别管理虚拟机,并在计算或管理程序级别执行其他计算任务。
Neutron – 为虚拟机、计算和控制节点提供网络功能。
Keystone – 为所有云用户和 OpenStack 云服务提供身份认证服务。换句话说,我们可以说 Keystone 是一个提供给云用户和云服务访问权限的方法。
Horizon – 用于提供图形用户界面。使用图形化管理界面可以很轻松地完成各种日常操作任务。
Cinder – 用于提供块存储功能。通常来说 OpenStack 的 Cinder 中集成了 Chef 和 ScaleIO 来共同为计算和控制节点提供块存储服务。
Swift – 用于提供对象存储功能。通常来说,Glance 管理的镜像是存储在对象存储空间的。像 ScaleIO 这样的外部存储也可以提供对象存储,可以很容易的集成 Glance 服务。
Glance – 用于提供镜像服务。使用 Glance 的管理平台来上传和下载云镜像。
Heat – 用于提供编排服务或功能。使用 Heat 管理平台可以轻松地将虚拟机作为堆栈,并且根据需要可以将虚拟机扩展或收缩。
Ceilometer – 用于提供计量与监控功能。
什么服务通常在控制节点上运行?
以下服务通常在控制节点上运行:
认证服务(KeyStone)
镜像服务(Glance)
Nova 服务比如 Nova API、Nova Scheduler 和 Nova DB
块存储和对象存储服务
Ceilometer 服务
MariaDB / MySQL 和 RabbitMQ 服务
网络(Neutron)和网络代理的管理服务
编排服务(Heat)
计算节点上虚拟机的默认地址是什么?
虚拟机存储在计算节点的/var/lib/nova/instances
什么服务通常在计算节点上运行?
Nova 计算
网络服务,比如 OVS
Glance 镜像的默认地址是什么?
因为 Glance 服务运行在控制节点上,所以 Glance 镜像都被存储在控制节点的 /var/lib/glance/images 文件夹下。
说一下如何使用命令行启动一个虚拟机?
我们可以使用如下 OpenStack 命令来启动一个新的虚拟机:
# openstack server create --flavor {flavor-name} --image {Image-Name-Or-Image-ID} --nic net-id={Network-ID} --security-group {Security_Group_ID} –key-name {Keypair-Name} <VM_Name>
如何在 OpenStack 中显示用户的网络命名空间列表?
可以使用 ip net ns 命令来列出用户的网络命名空间。
ip netns list
qdhcp-a51635b1-d023-419a-93b5-39de47755d2d
haproxy
vrouter
如何在 OpenStack 中执行网络命名空间内的命令?
假设我们想在 qdhcp-a51635b1-d023-419a-93b5-39de47755d2d 网络命名空间中执行 ifconfig 命令,我们可以执行如下命令。
命令格式 : ip netns exec {network-space} :
ip netns exec qdhcp-a51635b1-d023-419a-93b5-39de47755d2d "ifconfig"
在 Glance 服务中如何使用命令行上传和下载镜像?
Glance 服务中云镜像上传可以使用如下 OpenStack 命令:
openstack image create --disk-format qcow2 --container-format bare --public --file {Name-Cloud-Image}.qcow2 <Cloud-Image-Name>
下载云镜像则使用如下命令:
glance image-download --file <Cloud-Image-Name> --progress <Image-ID>
OpenStack 如何将虚拟机从错误状态转换为活动状态?
在某些情况下虚拟机可能会进入错误状态,可以使用如下命令将错误状态转换为活动状态:
~# nova reset-state --active {Instance_id}
如何使用命令行来获取可使用的浮动 IP 列表?
可使用如下命令来显示可用浮动 IP 列表:
~]# openstack ip floating list | grep None | head -10
如何在特定可用区域中或在计算主机上配置虚拟机?
假设我们想在 compute-02 中的可用区 NonProduction 上配置虚拟机,可以使用如下命令:
~]# openstack server create --flavor m1.tiny --image cirros --nic net-id=e0be93b8-728b-4d4d-a272-7d672b2560a6 --security-group NonProd_SG --key-name linuxtec --availability-zone NonProduction:compute-02 nonprod_testvm
如何使用命令行查看 OpenStack 实例的控制台日志?
使用如下命令可查看实例的控制台日志。
首先获取实例的 ID,然后使用如下命令:
~# openstack console log show {Instance-id}
如何在特定计算节点上获取配置的虚拟机列表?
假设我们想要获取在 compute-0-19 中配置的虚拟机列表,可以使用如下命令:
openstack server list –all-projects –long -c Name -c Host | grep -i {Compute-Node-Name}
:
~# openstack server list --all-projects --long -c Name -c Host | grep -i compute-0-19
如何获取 OpenStack 实例的控制台的 URL 地址?
可以使用以下 OpenStack 命令从命令行检索实例的控制台 URL 地址:
~# openstack console url show {Instance-id}
如何使用命令行创建可启动的 cinder / block 存储卷?
假设创建一个 8GB 可启动存储卷,可参考如下步骤:
使用如下命令获取镜像列表
~# openstack image list | grep -i cirros
| 89254d46-a54b-4bc8-8e4d-658287c7ee92 | cirros | active |
使用 cirros 镜像创建 8GB 的可启动存储卷
~# cinder create --image-id 89254d46-a54b-4bc8-8e4d-658287c7ee92 --display-name cirros-bootable-vol 8
如何列出所有在你的 OpenStack 中创建的项目或用户?
可以使用如下命令来检索所有项目和用户:
~# openstack project list --long
如何显示 OpenStack 服务端点列表?
OpenStack 服务端点被分为 3 类:
公共端点
内部端点
管理端点
使用如下 OpenStack 命令来查看各种 OpenStack 服务端点:
~# openstack catalog list
可通过以下命令来显示特定服务端点(比如说 keystone)列表:
~# openstack catalog show keystone
在控制节点上你应该按照什么步骤来重启 nova 服务?
应该按照如下步骤来重启 OpenStack 控制节点的 nova 服务:
service nova-api restart
service nova-cert restart
service nova-conductor restart
service nova-consoleauth restart
service nova-scheduler restart
如何使用命令行在 OpenStack 中向存在的安全组 SG(安全组)中添加新规则?
可以使用 neutron 命令向 OpenStack 已存在的安全组中添加新规则:
~# neutron security-group-rule-create --protocol <tcp or udp> --port-range-min <port-number> --port-range-max <port-number> --direction <ingress or egress> --remote-ip-prefix <IP-address-or-range> Security-Group-Name
假如计算节点上为数据流量配置了一些 DPDK 端口,你如何检查 DPDK 端口的状态呢?
因为我们使用 openvSwitch (OVS) 来配置 DPDK 端口,因此可以使用如下命令来检查端口的状态:
root@compute-0-15:~# ovs-appctl bond/show | grep dpdk
active slave mac: 90:38:09:ac:7a:99(dpdk0)
slave dpdk0: enabled
slave dpdk1: enabled
root@compute-0-15:~#
root@compute-0-15:~# dpdk-devbind.py --status
如何查看控制节点和计算节点的 OVS 桥配置?
控制节点和计算节点的 OVS 桥配置可使用以下命令来查看:
~]# ovs-vsctl show
计算节点上的集成桥(br-int)的作用是什么?
集成桥(br-int)对来自和运行在计算节点上的实例的流量执行 VLAN 标记和取消标记。
数据包从实例的 n/w 接口发出使用虚拟接口 qvo 通过 Linux 桥(qbr)。qvb 接口是用来连接 Linux 桥的,qvo 接口是用来连接集成桥的。集成桥上的 qvo 端口有一个内部 VLAN 标签,这个标签是用于当数据包到达集成桥的时候贴到数据包头部的。
隧道桥(br-tun)在计算节点上的作用是什么?
隧道桥(br-tun)根据 OpenFlow 规则将 VLAN 标记的流量从集成网桥转换为隧道 ID。
隧道桥允许不同网络的实例彼此进行通信。隧道有利于封装在非安全网络上传输的流量,它支持两层网络,即 GRE 和 VXLAN。
外部 OVS 桥(br-ex)的作用是什么?
顾名思义,此网桥转发来往网络的流量,以允许外部访问实例。br-ex 连接物理接口比如 eth2,这样用户网络的浮动 IP 数据从物理网络接收并路由到用户网络端口。
OpenStack 网络中 OpenFlow 规则的作用是什么?
OpenFlow 规则是一种机制,这种机制定义了一个数据包如何从源到达目的地。OpenFlow 规则存储在 flow 表中。flow 表是 OpenFlow 交换机的一部分。
当一个数据包到达交换机就会被第一个 flow 表检查,如果不匹配 flow 表中的任何入口,那这个数据包就会被丢弃或者转发到其他 flow 表中。
怎样查看 OpenFlow 交换机的信息(比如端口、表编号、缓存编号等)?
假如我们要显示 OpenFlow 交换机的信息(br-int),需要执行如下命令:
root@compute-0-15# ovs-ofctl show br-int
OFPT_FEATURES_REPLY (xid=0x2): dpid:0000fe981785c443
n_tables:254, n_buffers:256
capabilities: FLOW_STATS TABLE_STATS PORT_STATS QUEUE_STATS ARP_MATCH_IP
actions: output enqueue set_vlan_vid set_vlan_pcp strip_vlan mod_dl_src mod_dl_dst mod_nw_src mod_nw_dst mod_nw_tos mod_tp_src mod_tp_dst1(patch-tun): addr:3a:c6:4f:bd:3e:3bconfig: 0state: 0speed: 0 Mbps now, 0 Mbps max2(qvob35d2d65-f3): addr:b2:83:c4:0b:42:3aconfig: 0state: 0current: 10GB-FD COPPERspeed: 10000 Mbps now, 0 Mbps max………………………………………
CPU Pinning 是什么?
CPU Pinning 是指为某个虚拟机保留物理核心。它也称为 CPU 隔离或处理器关联。有两个目的:
它确保虚拟机只能在专用核心上运行
它还确保公共主机进程不在这些核心上运行
我们也可以认为 Pinning 是物理核心到一个用户虚拟 CPU(vCPU)的一对一映射。
如何显示交换机中的所有 flow 的入口?
可以使用命令ovs-ofctl dump-flows
来查看交换机的 flow 入口。
假设我们想显示 OVS 集成桥(br-int)的所有 flow 入口,可以使用如下命令:
[root@compute01 ~]# ovs-ofctl dump-flows br-int
什么是 Neutron 代理?如何显示所有 Neutron 代理?
OpenStack Neutron 服务器充当中心控制器,实际网络配置是在计算节点或者网络节点上执行的。Neutron 代理是计算节点或者网络节点上进行配置更新的软件实体。Neutron 代理通过 Neuron 服务和消息队列来和中心 Neutron 服务通信。
可通过如下命令查看 Neutron 代理列表:
~# openstack network agent list -c ‘Agent type’ -c Host -c Alive -c State