自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 Swift的认证

Swift通过Proxy Server接收用户RESTful API请求时,首先需要通过认证服务对用户的身份进行认证,认证通过后,Proxy Server才会真正地处理用户请求并响应。Keystone的原理比较简单,整个系统提供全局唯一的Keystone服务,客户端在发送HTTP请求之前,首先需要向Keystone申请一个Token(定长的字符串),该Token的有效期由Keystone服务端来指...

2018-03-31 19:54:51 1045

原创 Swift中的Object Server代码解读

Paste Deploy最终使用swift.obj.server模块的app_factory()函数加载Object Server的WSGI Application,即swift.obj.server.ObjectController以Object DELETE操作为例:Object DELETE的API参见官网: https://developer.openstack.org/api-ref/o...

2018-03-31 19:28:56 132

原创 Swift中的Container Server代码解读

类似于Account Server,Paste Deploy最终将使用swift.container.server模块的app_factory()函数加载Container Server的WSGI Application,即swift.account.server.ContainerController。以Container Get操作为例:Container Get的API参见官网:https:...

2018-03-31 19:23:42 204

原创 Swift中的Account Server代码解读

用户的HTTP请求被AccountController、ContainerController与ObjectController分别转发给存储节点上的Account Server、Container Server和Object Server,这三个服务与Proxy Server一样也是WSGI Server,通过run_wsgi()函数启动,通过Paste Deploy加载对应的WSGI Appl...

2018-03-31 19:21:11 356

原创 Swift的WSGI Application到对应的Controller

proxy-server将根据请求中的信息调用相应Controller中的数据进行处理。# /swift/proxy/server.pyclass Application(object): def __call__(self, env, start_response): """ WSGI entry point. Wraps env in ...

2018-03-30 18:54:31 140

原创 Swift的HTTP请求到WSGI Application

Proxy Server的入口是bin/swift-proxy-server文件import sysfrom swift.common.utils import parse_optionsfrom swift.common.wsgi import run_wsgiif __name__ == '__main__': conf_file, options = parse_options...

2018-03-30 18:51:54 150

原创 Swift API简介

Swift以RESTful API的形式提供自己的API,Proxy Server承担了类似nova-api服务角色,负责接受并转发用户的HTTP请求。Swift API主要提供如下功能:1 存储对象,对象的个数并没有限制。单个对象的大小默认值是5GB,这个最大值用户可以自行配置。2 对于超大值对象,可以通过大对象(Large Object)中间件进行上传和存储。3 压缩对象。4 删除对象,可以批...

2018-03-30 18:49:04 1842

原创 Swift源码解析之分配Partition

执行swift-ring-build的rebalance命令,会首先调用下面函数    def rebalance(): def get_seed(index): try: return argv[index] except IndexError: pass ...

2018-03-30 18:47:18 292

原创 Swift源码解析之添加设备到Ring

执行swift-ring-builder的add命令添加设备到Ring中,与create命令类似,add命令由swift.cli.ringbuilder.Commands类add()函数完成# swift/cli/ringbuilder.py def add(): #_parse_add_values()解析参数,并返回一个device的列表,然后检查新添加的device是...

2018-03-30 18:43:08 127

原创 Swift源码解析之创建Ring文件

通过setup.cfg文件可以知道swift-ring-builder工具的源码入口位于/bin/swift-ring-builder脚本,这个脚本仅仅是对swift.cli.ringbuilder模块的封装,直接调用了swift.cli.ringbuilder中的main函数。def main(arguments=None): if len(argv) == 2: com...

2018-03-30 18:39:07 163

原创 构建Ring的过程

一 介绍Ring是swift中非常核心的组件,它决定着数据如何在集群中分布。Swift根据设置的partition_power决定集群中的分区数量(2的partition_power次方),并根据一致性哈希算法将分区分配到不同的node上,并将数据分布到对应的分区上。二 新的Ring创建的过程1 ring-builder根据device weight计算出每个设备上应该被分配的分区的数量。(2的p...

2018-03-29 22:04:51 322

原创 swift-ring-builder命令大全

一 swift-ring-builder 命令swift-ring-builder中包含多种命令:addcreatelist_partsrebalanceremovesearchset_infoset_min_part_hoursset_weightset_replicasvalidatewrite_ring二 swift-ring-builder命令详细解释swift-ri...

2018-03-29 21:56:13 610

原创 Swift中Ring的数据结构

Swift中所谓的Ring就是基于一致性Hash所构建的环。Ring包括以下三种重要的数据结构。一 相关数据结构说明1 设备表设备表中的每一项都对应一个Device,其中记录了该Device的具体位置信息,包括Device ID,所在Region,Zone,IP地址以及端口号,以及用户为该Device定义的权重(Weight)等。Device容量大小不一时,可以通过Weight值保证Partiti...

2018-03-29 21:50:37 625

原创 Swift中一致性Hash

一 背景Swift通过引入Ring来实现对物理节点的管理,包括记录对象与物理存储位置间的映射关系,物理节点的添加和删除等。针对决定某个对象存储在哪个节点上之类的问题,最常规的做法就是采用Hash算法,如果存储节点的数量固定,普通的Hash算法就能满足要求,但是因为Swift通过增减存储节点来实现无限的可扩展性,存储节点数量可能会发生变动,此时所有对象的Hash值都会改变,这对于部署了极多的Swif...

2018-03-29 21:38:34 551

原创 Paste实战

一 缘起当看到OpenStack的api-paste.ini中大量出现的composite,pipline,filter,app之后,顿时觉得不淡定了,这些都是啥,是啥!在详细研究一番之后,却发现了意外的惊喜,好似发现了另一个世界,也明白了OpenStack使用这套东西却有他的高明之处。本篇介绍的是很纯粹的paste,不涉及Openstack。二 paste的世界paste单词本意为:糊料,糨糊,...

2018-03-29 21:30:59 211

原创 Nova虚拟机迁移概念与实战

一 基本概念Openstack支持两种类型的虚拟机迁移冷迁移(Cold migration):冷迁移也叫静态迁移。在迁移过程中虚拟机必须关机,用户也不能访问虚拟机。热迁移(Host or live migreation):热迁移也叫动态迁移。在迁移的过程中虚拟机仍旧工作,用户可以继续使用虚拟机。虚拟机的数据存在本地磁盘(block migration)虚拟机的数据存在共享磁盘上(Live migr...

2018-03-28 21:13:01 897

原创 Nova冷迁移与Resize

一 介绍迁移是指将虚拟机从一个计算节点迁移到另外一个节点上。冷迁移是相对热迁移而言,区别在于冷迁移过程中虚拟机是关机或处于不可用状态,而热迁移则需要保证虚拟机时刻运行。Resize则是根据需求调整虚拟机的计算能力和资源。Resize和冷迁移的工作流程相同,区别只是Resize时必须保持新的Flavor配置大于旧的配置,而冷迁移则要求两者相同。二 Resize工作流程如下图 三 流程解析1 nova...

2018-03-28 20:39:21 1454

原创 Nova热迁移源码解析

一 介绍热迁移是指虚拟机正常工作的情况下从一个计算节点迁移到另外的节点上,如下图所示:host1与host2共享存储Storage,虚拟机VM1从host1主机迁移到host2主机,在业务不中断的条件下将虚拟机内存复制到host2主机中,镜像的存储路径并没有发生改变。二 热迁移特点虚拟机的热迁移在生产环境中有着极大的用处,在各个厂商的产品中,热迁移已经成为一个重要指标。热迁移有很多的特点。1 动态...

2018-03-28 20:14:40 780

原创 Swift源码分析

一 Swift源码结构[root@localhost swift]# tree -L 1binetcswift├── account├── cli├── common├── container├── __init__.py├── __init__.pyc├── __init__.pyo├── obj└── proxysetup.cfgsetup.pytestbin:一...

2018-03-28 19:45:50 853 1

原创 WSGI介绍

RESTful只是设计风格而不是标准,Web服务中通常使用基于HTTP的符合RESTful风格的API。而WSGI(Web Server Gateway Interface,Web服务器网关接口)则是Python语言所定义Web服务器和Web应用程序或框架之间的通用接口标准。从名称上看,WSGI是一个网关,作用就是在协议之间进行转换。换句话说,WSGI就是一座桥梁,桥梁的一端称为服务端或网关端,另...

2018-03-28 19:18:38 203

原创 RESTful介绍

一 什么是RESTfulRESTful是目前最流行的一种互联网软件架构。REST(Representational State Transfer,表述性状态转移)一词是由Roy Thomas Fielding在他2000年博士论文中提出,定义了他对互联网软件的架构原则,如果一个架构符合REST原则,则称它为RESTful架构。RESTful架构一个核心概念是“资源”(Resource)。从REST...

2018-03-28 19:15:49 114

原创 Swift架构理解(二)

一 Storage Node上运行有三种服务Account Server:提供Account相关服务,包括所含Container列表以及Account的元数据等。Account的信息被存储在SQLite数据库中。Container Server:提供Container相关服务,包括所含Object的列表以及Container的元数据等,Container的信息被存储在SQLite数据库中。Obje...

2018-03-28 19:13:37 431

原创 Nova创建虚拟机流程解读

一 介绍创建一个虚拟机至少需要指定的参数有3个:虚拟机名字,镜像,Flavor。执行“nova image-list”命令可以看到目前可用的虚拟机镜像。命令执行结果如下:[root@localhost ~(keystone_demo)]# nova image-listWARNING: Command image-list is deprecated and will be removed af...

2018-03-27 21:44:56 1934

原创 swift架构理解

存储是Openstack所管理的最重要的资源之一。Nova实现了Openstack虚拟机世界的抽象,并利用主机的本地存储为虚拟机提供“临时存储(Ephemeral Storage)”,如果虚拟机被删除了,挂在这个虚拟机上的任何临时存储都将自动释放。存放在临时存储上的数据是高度不可靠的,任何虚拟机和主机的故障都可能会导致数据丢失。因此,基于临时存储的虚拟机就是无根之浮萍,没有确切的归属,在它生命周期...

2018-03-27 21:17:07 2022

原创 nova的资源管理

nova-compute需要在数据库中存储主机的资源使用情况,包括内存、cpu、磁盘等,以便nova-scheduler获取作为选择主机的依据,这就要求每创建、迁移、删除一个虚拟机,都要更新数据库中相关的内容。Nova使用ComputeNode对象保存计算节点的配置信息以及资源使用状态。nova-compute为每一个主机创建一个ResourceTracker对象,任务就是更新ComputeNod...

2018-03-26 21:57:47 1180

原创 nova-compute源码结构分析

一 目录结构Compute服务位于nova/compute[root@localhost compute]# tree -L 1.├── api.py├── build_results.py├── cells_api.py├── claims.py├── flavors.py├── __init__.py├── __init__.pyc├── instance_actions.p...

2018-03-26 21:54:42 324

原创 Virt Driver模块介绍

Nova本身并不提供虚拟化技术,只是借助了各种主流的虚拟化技术,比如Xen、KVM等,实现虚拟机的创建与管理,因此作为Nova的核心,nova-compute需要和不同的Hypervisor进行交互。各种Hypervisor的支持通过Virt Driver的方式实现,比如Libvirt Driver,各种Virt Driver的实现位于nova/virt目录。|--disk|--hyperv|--...

2018-03-26 21:44:30 280

原创 Nova-compute的虚拟机类型描述和状态描述

一 Nova-compute的虚拟机类型描述(Flavor)我们每个人从一出生就需要占用耗费各种资源,虚拟机也是一样,不同的是,我们人可以通过后天努力来改善自己所拥有的资源状态,而虚拟机在创建时就必须为其预先指定一组资源的设置,包括计算、存储、内存等能力的大小,这组资源的设置就称为Flavor,每个虚拟机Instance对象的instance_type_id字段就代表了它拥有的Flavor。Fla...

2018-03-26 21:29:55 364

原创 nova-compute的虚拟机(instance)描述

Nova作为Openstack这个虚拟世界的管理机构,控制着一个个虚拟机的状态变迁与生老病死,而Nova中这种对虚拟机生命周期管理正是由Computer服务nova-compute来完成。本篇针对虚拟机(instance)进行相关说明类似人类世界的主体“人”,Linux进程世界的主体“进程”,“虚拟机”作为虚拟机世界的主体,必然也会有一些庞杂的信息或结构去专门描述它的特征和状态,Nova里面这个结...

2018-03-26 21:22:12 332

原创 openstack功能测试(集成测试)

一 属于Tempest项目1 Openstack集成测试用例套件2 基于unittest2和nose3 测试范围核心组件keystone、Glance、Nova、Cinder等4 Openstack CI & Tempesthttps://review.openstack.orgTempest gated with Gate-tempest-merge Gate-tempest-pep8 ...

2018-03-25 14:39:03 1308

原创 openstack单元测试

一 各个组件自己负责二 Nose单元测试框架三 Tox自动化打包、测试和发布工具多环境测试,py26,py28,py32早些时候用run_test.sh,现在推荐用tox四 实战0 进入nova源码安装目录[stack@localhost nova]$ pwd/opt/stack/nova[stack@localhost nova]$ git branch* stable/ocata1 首先...

2018-03-25 13:31:35 202

原创 openstack开发环境搭建

一 Devstack安装openstack1 创建stack用户2 克隆devstack3 编辑local.conf文件4 运行stack.sh补充:安装完成后,可执行./info.sh 查看已安装的各种信息。CTRL+A+D从screen中退出。参考https://docs.openstack.org/devstack/latest/5 重启机器后,如何启动Devstack的所有服务执行下面步骤...

2018-03-25 10:11:21 2127

原创 Nova API的实现——V2 API上添加新资源

为Nova添加新的API,或者对现有API进行扩展是件相对容易的事情,我们并不需要去过多关注一个HTTP请求是如何路由到新增的资源及其操作上,需要做的仅仅是遵循一些固定的规则与步骤。首先看如何在v2 API中添加新的资源。一 添加新资源与对应的Controller对核心资源,需要在nova/api/openstack/compute目录下添加新文件,对于扩展资源则是nova/api/opensta...

2018-03-24 18:53:49 384

原创 Nova API的执行过程

一 用户命令到的HTTP请求一般的 Openstack 用户和管理员能够通过执行简易的 Openstack Commands 来管理和使用 Openstack 。但需要注意的是,Openstack Services 的 API 并不会识别这类指令,所以在 API 的外层还需要一重转化机制 —— novaclient。如果是使用 Devstack 进行部署的话,novaclient 会被默认安装在本...

2018-03-24 18:46:38 522

原创 Nova的Object Model源码分析

Object Model由Redhat的Dan Smith提出,在Icehouse版本中开始添加,在Juno版本中基本实现了所有功能。Object Model应该说是Nova中数据库访问的分水岭,在此之前,对每一个表的操作都放在同一个文件里,比如flavor.py,使用时直接调用这个文件中的函数去修改数据库。而Object Model引入后,新建立了Flavor对象与flavor表相对应,将对fl...

2018-03-23 21:34:44 378

原创 Nova Conductor服务源码分析

Conductor服务nova-conductor最初于Grizzly版本发布,目的是为数据库访问提供一层安全机制。在此之前,nova-compute都是直接访问数据库,一旦被攻破,则数据库会面临直接暴露的危险。此外,nova-conductor的加入也使得nova-compute与数据库解耦,因此在保证conductor API兼容性的前提下,数据库schema升级的同时并不需要去升级nova-...

2018-03-23 20:21:13 387

原创 Nova v3 API如何添加新资源

对于V3 API添加新资源,以现有扩展资源keypairs为例进行说明#nova/api/openstack/compute/plugins/v3/keypairs.pyALIAS = 'os-keypairs'class Keypairs(extensions.V3APIExtensionBase): """Keypair Support.""" name = "Keypai...

2018-03-23 19:44:56 141

原创 Nova Scheduler源码分析

一 调度器选择一个虚拟机在哪个主机上运行的方式有很多种,目前Nova中实现的有:ChanceScheduler(随机调度器):从所有的nova-compute服务正常运行的节点中随机选择。FilterScheduler(过滤调度器):根据指定的过滤条件以及权重挑选最佳节点。CachingScheduler:FilterScheduler的一种,在FilterScheduler的基础上将主机资源信息...

2018-03-23 19:37:23 380

原创 给自己准备一个Docker的tomcat镜像

一 Tomcat简介Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。当配置正确时,Apache 为HTML页面服务,而Tomcat 实际上运行JSP 页面和Servlet。另外,Tomcat和IIS等Web服务器一样,具有处理HTML页面的功能,另外它还是一个Servlet和...

2018-03-22 21:38:50 1523 1

原创 Docker下使用MongoDB

一 下载镜像[root@localhost mongodb]# docker pull mongoUsing default tag: latestlatest: Pulling from library/mongod13d02fa248d: Pull completebc8e2652ce92: Pull complete3cc856886986: Pull completec319e...

2018-03-22 21:35:40 1600

提示
确定要删除当前文章?
取消 删除