openstack 工作原理分析

来源:互联网 发布:什么是软件外包公司 编辑:程序博客网 时间:2024/04/30 13:46

 openstack 学习笔记

1.为什么需要云?由于大量用户的上线,服务器的数据急剧增多,为了提高资源和网络带宽利用率,提出了云计算。面向海量的数据和复杂的计算,利用互联网上的硬件、软件和数据,把所有的计算能力集中起来,对计算资源进行动态分配。它主要可以提供一下优越性:可以提供用户自助服务器;网络访问:在网络很少人干预下进行。可在网络上的任何计算能力。弹性:使开发的代码更具弹性,从而根据需要快速和向外扩展;计费功能:就像实用程序,按小时支付。

2.目前主要有公有云和私有云,私有云主要是针对内部或单台服务器作优化。Public云主要是用于web资源访问,虚拟网络,虚拟机。

3.openstack简介:提供public云和private云,必须实现大规模可扩展的云项目。当然先要学会在服务器上安装和部署它。

Openstack7大组件: Object Storage(对象存储,swift)Image (镜像,Glance)Compute(计算,Nova哈哈这个组件也是我后面主要研究和开发的核心呀)Dashboard(仪表盘,Horizon)Identity(身份认证,Keystone)Network(网络,Quantum) Block Storage(块存储,cinder).

4.下面就简单介绍下各大组件的主要功能:

Dashboard:为所有OpenStack的服务提供了一个模块化的web-based用户界面。

Compute:把用户输入的数据进行计算后,决定可以实行那个具体的虚拟服务调用。

Network:为计算(compute)提供虚拟网络。

BlockStorage:为compute提供虚拟数据。

Image:是一个虚拟机镜像的存储、查询和检索系统,它提供了一个虚拟磁盘映像的目录和存储库,这些磁盘映像常常广泛应用于OpenStackCompute之中。

ObjectStorage:允许进行存储或者检索文件。

当然了,所有的服务都必须有用户权限验证,Keystone

Compute:NovaOpenStack中最复杂的分布式组件,它通过大量的进程合作,将最终用户的API请求发送到正在运行的虚拟机之上。

nova-api:接受和响应最终用户ComputeAPI的请求。它还引发多数业务流程的活动(如运行一个实例),并实施一些政策(主要是配额检查)

nova-compute:主要是一个人工守护进程,它可以通过虚拟机管理程序的API来创建和终止虚拟机实例。虽然通过该进程做的事情是相当的复杂,但是它的基础原理却是非常的简单:接收队列中的动作,然后执行一系列的系统命令(如启动KVM实例),同时更新数据库中的状态。

nova-volume:给虚拟机分配额外持久化的存储,管理持久卷到计算实例的创建,连接和分离。一个新的OpenStack项目,Cinder,将最终替代nova-volume功能。在发布的Folsom版本中,nova-volumeBlock Storage service(块存储服务)有类似的功能。

nova-network:该人工守护进程与nova-computenova-volume非常相似。它接受队列中的网络任务,然后执行任务操纵网络(如设立桥接接口或更改iptables规则)。不过该项功能被移植到Quantum之中,已经成为一个独立的OpenStack服务。

nova-schedule:从概念上说是OpenStackNova中最简单的一段代码:从队列上得到一个虚拟机实例请求并且决定它应该在哪里运行(特别是它应该运行在哪台计算服务器主机之上)

queue:提供了一个守护进程之间传递消息的中央枢纽。

SQLdatabase:存储云基础设施的编译时和运行时的状态。这包括可用的实例类型,在使用中的实例,可用的网络和项目。

Nova的软件架构,每个nova组件是守护进程,每个进程之间通过队列(Queue)和数据库nova database)来交换信息,执行各种请求。而用户通过nova-api暴露的web service来同其他组件进行进行交互。

ObjectStore:分布式架构是非常迅速以防止任何单点故障以及横向扩展。如果某个单独的服务器出现故障,也不会影响到其他机器。它包括以下组件:

proxyserver:代理服务器接受传入的请求通过OpenStack对象的API或只是原始HTTP。它接受文件上传、修改元数据或容器创建。此外,它还将提供文件或集装箱清单到web浏览器。代理服务器可能使用一个可选的缓存(通常部署在memcache)提高性能。

帐户服务器管理账户定义对象存储服务;容器服务器管理映射的容器;对象服务器管理实际的对象(如文件)在存储节点;•也有大量的周期性过程执行日常任务运行在大型数据存储。其中最重要的是复制服务确保一致性和可用性通过集群;

Imagestone

GlanceAPI接受image API调用,进行image检索和image存储;一个数据库存储image元数据。像nova,你可以选择你的数据库,根据您的喜好(但大多数人使用MySQLSQlite)

IdentityKeystoneOpenStack提供一个单点安全保障,主要是、目录、令牌和身份验证。每一个Keystone函数要有一个可插入式链接的接口来提供特殊的服务,允许用户创建自己的网络和然后他们连接接口。

各个模块的逻辑关系:

OpenStack的系统从image store复制image存储到本地磁盘,作为第一个磁盘的实例,占用资源的image将获得更快运行。当一个instance已经运行完毕,它就会被删除。这个时候内存和vircpu资源都会被释放。 

块存储和OpenStack计算

OpenStack的块级存储提供了两类存储,“短暂”的存储和持久性“卷”。短暂的存储只存在于新创建的一个实例,将持续到重新启动的客户机操作系统,但删除实例时,相关的存储也一起删除。所有的实例有一些短暂的存储。卷是持久性的虚拟化块设备独立于任何特定的实例。卷可能被连接到一个单个实例,但可以分离或重新连接到不同的实例,而保留所有数据,很像一个USB驱动器。 

安装部署OpenStack Compute

Openstack的组件就是运行在标准的硬件上。有compute计算节点,根据image来产生一个instance

Computenode,运行virtualinstance。(硬件要求Processor: 64-bit x86Memory: 32 GB RAMDisk space: 30 GB (SATA)Network: two 1 GB NICs

配置openstack  compute:由于各个模块之间都是相互独立的,无共享的,(有queue消息队列为各个模块传递消息)所以可以根据自己的需要配置模块。在nova.conf文件中设置配置选项。

Configuration: nova.conf 即就是主要讲解了如何去查看nova.conf配置.

有多种方式去配置nova,一般有单节点,双节点。多节点。

单结点:一台服务器运行所有的nova-services,同时也驱动虚拟实例。这种配置只为尝试OpenStackCompute,或者为了开发目的;
双结点:一个cloud controller 结点运行除nova-compute外的所有nova-servicescompute结点运行nova-compute。一台客户计算机很可能需要打包镜像,以及和服务器进行交互,但是并不是必要的。这种配置主要用于概念和开发环境的证明。多结点:通过简单部署nova-compute在一台额外的服务器以及拷贝nova.conf文件到这个新增的结点,你能在两结点的基础上,添加更多的compute结点,形成多结点部署。在较为复杂的多结点部署中,还能增加一个volumecontroller 和一个network controller作为额外的结点。对于运行多个需要大量处理能力的虚拟机实例,至少是4个结点是最好的。

如果你注意到消息队列中大量的复制引发了性能问题,一种可选的架构是增加更多的Messaging服务器。在这种情形下,除了可以扩展数据库服务器外,还可以增加一台额外的RabbitMQ服务器。部署中可以在任意服务器上运行任意nova-service,只要nova.conf中配置为指向RabbitMQ服务器,并且这些服务器能发送消息到它。

OpenStackObject Storage

你必须通过认证服务来认证,以接收OpenStackObject Storage连接参数和认证令牌。令牌必须为所有后面的container/object操作而传递。典型的,特定语言的API处理认证,令牌传递和HTTPSrequest/response 通信。

一般来说,每个用户能完全访问自己的存储账户。用户必须用他们的证书来认证,一旦被认证,他们就能创建或删除container,以及账户之类的对象。一个用户能访问另一个账户的内容的唯一方式是,他们享有一个API访问key或你的认证系统提供的会话令牌。

Containersand Objects:一个Container是一个存储隔间,为你提供一种组织属于你的数据的方式。它比较类似于文件夹或目录。Container和其他文件系统概念的主要差异是containers不能嵌套。然而,你可以在你的账户内创建无数的containers。但是你必须在你的账户上有一个container,因为数据必须存在Container中。

OperationsOperations是你在OpenStack Object Storage系统上执行的行为,比如创建或删除containers,上传或下载objects等等。Operations的完全清单可以在开发文档上找到。Operations能通过ReST web service API或特定语言的API来执行。值得强调的是,所有操作必须包括一个来自你授权系统的有效的授权令牌。

特定语言的API绑定,一些流行语言支持的API 绑定,在RackSpace云文件产品中是可用的。这些绑定在基础ReSTAPI上提供了一层抽象,允许编程人员直接与containerobject模型打交道,而不是HTTP请求和响应。这些绑定可免费下载,使用和修改。它们遵循MIT许可协议。对于OpenStackObject Storage,当前支持的API绑定是:PHPPythonJavaC#/.NET Ruby

哈哈,这个也就是盼哥教我的nova命令去简单实现一系列操作啦,当然了,通过—debug参数,我也试着用crul去完成相同的命令。

关于Object Storage如何工作这个模块,我就下不去再继续解了啦,盼哥说我们主要开发的项目是nova-compute、nova-network、nova-schedule。

5.下面说下Replication:设计副本的目的是,在面临网络中断或驱动失败等临时错误条件时,保持系统在一致的状态。副本进程会比较本地的数据和每个远处的副本,以确保他们所有都包含最新的版本。对象副本用一个Hash列表来快速比较每个分区的片段,而containe account replication 用的是Hash和共享的高水印结合的方法。副本的更新,是基于推送的。对于对象副本,更新是远程同步文件到PeerAccountcontainer replication通过HTTP or rsync把整个数据库文件推送遗失的记录。副本也通过tombstone设置最新版本的方式,确保数据从系统中清除。

更新器(Updaters),呵呵,这个设计比较好,有保障呀~考虑到有时,container  account数据不能被立即更新,这通常是发生在失败的情形或高负载时期。如果一个更新失败,该更新会在文件系统上本地排队,更新器将处理这些失败的更新。事件一致性窗口最可能来起作用。比如,假设一个container服务器正处于载入之中,一个新对象正被放进系统,代理服务器一响应客户端成功,该对象就立即可读了。然而,container服务器没有更新Object列表,所以更新就进入队列,以等待稍后的更新。Container列表,因此可能还不会立即包含这个对象。实际上,一致性窗口只是与updater运行的频率一样大,当代理服务器将转发清单请求到响应的第一个container服务器中,也许甚至还不会被注意。在载入之下的服务器可能还不是服务后续清单请求的那个。另外两个副本中的一个可能处理这个清单。

8.Instance Management

下面就来学习下compute是怎么去管理一个instance的整个工作流程。Openstack提供了三种方式去管理一个instance,分别是,命令行,网络的http请求,nova-api。但是必须设置OS_AUTH_URLTenant name

os_tenant_name通过OS_TENANT_NAME),user namepassword

如果你过的了身份验证了,接下来就要设置:

exportOS_AUTH_URL="http://keystone.example.com:5000/v2.0/"

exportOS_USERNAME=demouser

exportOS_PASSWORD=demopassword

exportOS_TENANT_NAME=demoproject

下面说下,用compute API来实现instance。它是作为“severs”去实现和管理一个instance的。

可以通过—debug参数看到。

为了达到语言的通用性,还提供了EC2API去实现童颜过的功能。关于具体的创建流程在这里就先不说了,我有专门去分析run_instance函数的。

哈哈,终于揭开面纱了,我之前就是被这个问题所困扰了呀。使用命令去创建一个instance

novaimage-list

+--------------------------------------+---------------------------------+--------+--------+

| ID                                   | Name                            | Status | Server |

+--------------------------------------+---------------------------------+--------+--------+

| 46039ce3-14e7-4409-8a98-112c1a68214a |cirros-0.3.0-x86_64-uec         | ACTIVE|        |

| ef99de5f-4a81-4323-8db1-7f923404d1bd |cirros-0.3.0-x86_64-uec-kernel  | ACTIVE|        |

| 0d3fa474-4e4a-4e24-a324-f199749ba0ee | cirros-0.3.0-x86_64-uec-ramdisk| ACTIVE |        |

+--------------------------------------+---------------------------------+--------+--------+

根据image的信息可以创建一个instance了。

ubuntu@dongdong-test:~$ nova boot hzrandd--image 46039ce3-14e7-4409-8a98-112c1a68214a --flavor 2

+-------------------------------------+--------------------------------------+

| Property                            | Value                                |

+-------------------------------------+--------------------------------------+

| OS-EXT-STS:task_state               | scheduling                           |

| availability_zone                   | None                                 |

| image                               |cirros-0.3.0-x86_64-uec              |

| OS-EXT-SRV-ATTR:host_ip             | None                                 |

| OS-EXT-STS:vm_state                 | building                             |

| OS-EXT-SRV-ATTR:instance_name       | instance-00000009                    |

| flavor                              | m1.small                             |

| id                                  |0ce961e8-2b62-415e-9639-492ed3fcde84 |

| security_groups                     | [{u'name':u'default'}]              |

| user_id                             |e6de100c0c5d419b8215d03cb602b10f     |

| OS-DCF:diskConfig                   | MANUAL                               |

| accessIPv4                          |                                      |

| accessIPv6                          |                                      |

| progress                            | 0                                    |

| OS-EXT-STS:power_state              | 0                                    |

| config_drive                        |                                      |

| status                              | BUILD                                |

| updated                             |2013-03-19T12:52:35Z                 |

| hostId                              |                                      |

| OS-EXT-SRV-ATTR:host                | None                                 |

| key_name                            | None                                 |

| network_qos_public                  | {}                                   |

| OS-EXT-SRV-ATTR:hypervisor_hostname |None                                 |

| name                                | hzrandd                              |

| adminPass                           | iEA6ndipsM2F                         |

| tenant_id                           | b90009002f3d4bdb8489dc8ddfa1fe9a     |

| created                             |2013-03-19T12:52:35Z                 |

| network_qos_private                 | {}                                   |

| metadata                            | {}                                   |

+-------------------------------------+--------------------------------------+

当然了,有用户名或id号可以去查看它的详细信息。

novashow hzrandd

+-------------------------------------+----------------------------------------------------------------+

| Property                           |Value                                                         |

+-------------------------------------+----------------------------------------------------------------+

| status                              | ACTIVE                                                         |

| updated                             |2013-03-19T12:53:45Z                                           |

| OS-EXT-STS:task_state               | None                                                          |

| OS-EXT-SRV-ATTR:host                | dongdong-test                                                 |

| availability_zone                   | nova                                                          |

| key_name                            | None                                                           |

| image                               |cirros-0.3.0-x86_64-uec (46039ce3-14e7-4409-8a98-112c1a68214a) |

| private network                     | 10.0.0.5                                                       |

| hostId                              |ecea8a9dcdb14651b07f62024be515d47a46a0a5a7bd1030a816ae81       |

| OS-EXT-STS:vm_state                 | active                                                        |

| OS-EXT-SRV-ATTR:instance_name       | instance-00000009                                              |

| OS-EXT-SRV-ATTR:hypervisor_hostname |dongdong-test                                                 |

| flavor                              | m1.small(2)                                                   |

| id                                  |0ce961e8-2b62-415e-9639-492ed3fcde84                           |

| security_groups                     | [{u'name':u'default'}]                                        |

| user_id                             |e6de100c0c5d419b8215d03cb602b10f                               |

| name                                | hzrandd                                                       |

| created                             |2013-03-19T12:52:35Z                                           |

| tenant_id                           |b90009002f3d4bdb8489dc8ddfa1fe9a                               |

| OS-DCF:diskConfig                   | MANUAL                                                        |

| network_qos_private                 | {u'rate': 20, u'prio': 4,u'ceil': 200}                        |

| accessIPv4                          |                                                               |

| accessIPv6                          |                                                                |

| progress                            | 0                                                             |

| OS-EXT-STS:power_state              | 1                                                             |

| metadata                            | {}                                                            |

| network_qos_public                  | {u'rate': 2, u'prio': 4,u'ceil': 100}                         |

| config_drive                        |                                                               |

+-------------------------------------+----------------------------------------------------------------+

当然啦,如果你想知道自己的instance运行在那个节点上,可这个命令。

nova boot randdnew --image ef99de5f-4a81-4323-8db1-7f923404d1bd  --flavor2e5f-4a81-4323-8db1-7f923404d1bd --flavor 2 --availability-zone nova:nova-1

+-------------------------------------+--------------------------------------+

| Property                            | Value                                |

+-------------------------------------+--------------------------------------+

| OS-EXT-STS:task_state               | scheduling                           |

| availability_zone                   | None                                 |

| image                              |cirros-0.3.0-x86_64-uec-kernel       |

| OS-EXT-SRV-ATTR:host_ip             | None                                 |

| OS-EXT-STS:vm_state                 | building                             |

| OS-EXT-SRV-ATTR:instance_name       | instance-0000000a                    |

| flavor                              | m1.small                             |

| id                                  |5fac37ff-2c87-4993-a14c-08284bdc964a |

| security_groups                     | [{u'name':u'default'}]              |

| user_id                             |e6de100c0c5d419b8215d03cb602b10f     |

| OS-DCF:diskConfig                   | MANUAL                               |

| accessIPv4                          |                                      |

| accessIPv6                          |                                      |

| progress                            | 0                                    |

| OS-EXT-STS:power_state              | 0                                    |

| config_drive                        |                                      |

| status                              | BUILD                                |

| updated                             |2013-03-19T13:05:46Z                 |

| hostId                              |                                      |

| OS-EXT-SRV-ATTR:host                | None                                 |

| key_name                            | None                                 |

| network_qos_public                  | {}                                   |

| OS-EXT-SRV-ATTR:hypervisor_hostname |None                                 |

| name                                | randdnew                             |

| adminPass                           | 9YDV8nvxQePr                         |

| tenant_id                           |b90009002f3d4bdb8489dc8ddfa1fe9a     |

| created                             |2013-03-19T13:05:46Z                 |

| network_qos_private                 | {}                                   |

| metadata                            | {}                                   |

+-------------------------------------+-----------------

跳过了一点其他讲解。进入到floating-ip

它可以在需要的时候随时分配给某个instance,让它可以暂时的去访问资源。

ubuntu@dongdong-test:~$ novafloating-ip-pool-list

+------+

| name |

+------+

| nova |

| test |

+------+

ubuntu@dongdong-test:~$

ubuntu@dongdong-test:~$nova floating-ip-create nova

+--------------+-------------+----------+------+

| Ip          | Instance Id | Fixed Ip | Pool |

+--------------+-------------+----------+------+

| 172.24.4.227 | None        | None     | nova |

+--------------+-------------+----------+------+

ubuntu@dongdong-test:~$nova floating-ip-create test

+---------------+-------------+----------+------+

| Ip            | Instance Id | Fixed Ip | Pool |

+---------------+-------------+----------+------+

| 192.168.253.1 | None       | None     | test |

+---------------+-------------+----------+------+

通过连续三次执行该命令,可以看到确实如此。

ubuntu@dongdong-test:~$nova floating-ip-create test

+---------------+-------------+----------+------+

| Ip            | Instance Id | Fixed Ip | Pool |

+---------------+-------------+----------+------+

| 192.168.253.2 | None       | None     | test |

+---------------+-------------+----------+------+

ubuntu@dongdong-test:~$nova floating-ip-create test

+---------------+-------------+----------+------+

| Ip            | Instance Id | Fixed Ip | Pool |

+---------------+-------------+----------+------+

| 192.168.253.3 | None       | None     | test |

+---------------+-------------+----------+------+

通过这个命令实现的iptenant的,而不是立即就给一个instance分配了。

把这个ip“绑定”到一个instance上:

novaadd-floating-ip hzrandd  192.168.253.3

查看后,发现确实分配到一个instance上个了。

novafloating-ip-list

+---------------+--------------------------------------+----------+------+

| Ip            | Instance Id                          | Fixed Ip | Pool |

+---------------+--------------------------------------+----------+------+

| 172.24.4.227  | None                                 | None     | nova |

| 192.168.253.1 | None                                 | None     | test |

| 192.168.253.2 | None                                 | None     | test |

| 192.168.253.3 |0ce961e8-2b62-415e-9639-492ed3fcde84 | 10.0.0.5 | test |

+---------------+--------------------------------------+----------+------+

ubuntu@dongdong-test:~$nova list

+--------------------------------------+----------+--------+---------------------------------+

| ID                                   | Name     | Status | Networks                        |

+--------------------------------------+----------+--------+---------------------------------+

|0ce961e8-2b62-415e-9639-492ed3fcde84 | hzrandd | ACTIVE | private=10.0.0.5,192.168.253.3|

|5fac37ff-2c87-4993-a14c-08284bdc964a | randdnew | ERROR  |                                 |

+--------------------------------------+----------+--------+---------------------------------+

发现确实多了一个ip,此ip就是floating ip~~~

配置网络服务,可以让它更好的去工作。

对于每一个虚拟机实例,计算分配给它的私有IP地址。(目前,计算Nova-work只支持Linux网桥网络的虚拟接口,允许通过连接到外部网络的物理接口)。通过nova-network提供虚拟的服务,让compute可以和公共network交互信息。目前支持三种配置类型。

FlatNetwork Manager

 Flat DHCP Network Manager

VLANNetwork Manager

简单比较一下他们的优缺点:OpenStackFlatFlatDHCP区别

Flat(扁平): 所有实例桥接到同一个虚拟网络,需要手动设置网桥。

FlatDHCP Flat(扁平)管理模式类似,这种网络所有实例桥接到同一个虚拟网络,扁平拓扑。不同的是,正如名字的区别,实例的ip提供dhcp获取(nova-network节点提供dhcp服务),而且可以自动帮助建立网桥。

OpenStackFlatvLAN区别

在两种Flat模式里,网络控制器扮演默认网关的角色,实例都被分配了公共的IP地址(扁平式结构,都在一个桥接网络里)。

vLAN模式功能丰富,很适合提供给企业内部部署使用。但是,需要支持vLANswitches来连接,而且相对比较复杂,在小范围实验中常采用FlatDHCP模式。

 

注意一下几点,openstack没有配置任何物理网络接口,但它会自动配置网桥和虚拟机的虚拟接口。由于网络接口是为了和虚拟机通讯,所以说在openstack部署的时候,乜有必要去分配一个ip给它。

当然了,这种网络接口必须是混杂模式,因为它会接受多个不同的虚拟机的targetMAC数据,而不是host主机去接受这些数据。  混杂模式是what?我百度了一下。

混杂模式(Promiscuous Mode

混杂模式(Promiscuous Mode)是指一台机器能够接收所有经过它的数据流,而不论其目的地址是否是他。是相对于通常模式(又称非混杂模式)而言的。这被网络管理员使用来诊断网络问题,但是也被无认证的想偷听网络通信(其可能包括密码和其它敏感的信息)的人利用。一个非路由选择节点在混杂模式下一般仅能够在相同的冲突域(对以太网和无线局域网)内监控通信到和来自其它节点或环(对令牌环或FDDI),其是为什么网络交换被用于对抗恶意的混杂模式。

混杂模式就是接收所有经过网卡数据包,包括不是发给本机的包。默认情况下网卡只把发给本机的包(包括广播包)传递给上层程序,其它的包一律丢弃。简单的讲,混杂模式就是指网卡能接受所有通过它的数据流,不管是什么格式,什么地址的。事实上,计算机收到数据包后,由网络层进行判断,确定是递交上层(传输层),还是丢弃,还是递交下层(数据链路层、MAC子层)转发。

通常在需要用到抓包工具,例如etherealsniffer时,需要把网卡置于混杂模式,需要用到软件Winpcapwinpcapwindows平台下一个免费,公共的网络访问系统。开发winpcap这个项目的目的在于为win32应用程序提供访问网络底层的能力。

对于广播式集线器(Hub)来说,假如PC1PC2PC3接在同一个Hub上,当PC1PC3发送包时,Hub将广播这个包,所以PC2实际上也可以看到这个包,但一般情况下它会将这个发给PC3的包丢弃,但如果处于混杂模式,PC2的网卡驱动程序就不会丢弃这个包,而是把这个包送给上层的驱动程序,应用程序。

简单的说,网卡的混杂模式是为网络分析而提供的。

Openstackcompute的默认网络是VLAN,它创建VLAN和网桥来完成每个信息的传递。当有请求到达时,一个HDCP服务器就开始为每一个VLAN创建一个动态ip,所有的instance都通过这个子网去完成这次任务。

如果在配置文件里设置 force_dhcp_release=True了,当一个虚拟机被删除后,这个ip就可以立即被下一个instance使用了。

DHCPseverDnsmasq提供 DNS缓存和 DHCP 服务功能。作为域名解析服务器(DNS)dnsmasq可以通过缓存 DNS请求来提高对访问过的网址的连接速度。作为DHCP服务器,dnsmasq 可以为局域网电脑提供内网ip地址和路由。DNSDHCP两个功能可以同时或分别单独实现。dnsmasq轻量且易配置,适用于个人用户或少于50台主机的网络。此外它还自带了一个 PXE 服务器。

哎,悲剧了,我的电脑还不能翻墙上网呀,等田田什么时候帮弄下再回来看吧。

有关OpenStack metadata API的介绍参考:

http://169.254.169.254/openstack/2012-08-10/meta_data.json

有关EC2 metadata API的更多信息参考:

http://169.254.169.254/2009-04-04/meta-data/

接着讲到了配置,Flat networkingFlat DHCP networkingVLAN networking。配置完成后,用命令去检验各个模块配置结果。

ubuntu@dongdong-test:~$ novaflavor-list

+----+-----------+-----------+------+-----------+------+-------+-------------+-----------+---------------------------+

| ID | Name      | Memory_MB | Disk | Ephemeral | Swap |VCPUs | RXTX_Factor | Is_Public | extra_specs               |

+----+-----------+-----------+------+-----------+------+-------+-------------+-----------+---------------------------+

| 1  | m1.tiny  | 512       | 0    | 0        |      | 1     | 1.0         | True      | {u'ecus_per_vcpu:': u'1'} |

| 2  | m1.small | 2048      | 20   | 0        |      | 1     | 1.0         | True      | {u'ecus_per_vcpu:': u'1'} |

| 3  | m1.medium | 4096      | 40  | 0         |      | 2    | 1.0         | True      | {u'ecus_per_vcpu:': u'1'} |

| 4  | m1.large | 8192      | 80   | 0        |      | 4     | 1.0         | True      | {u'ecus_per_vcpu:': u'1'} |

| 5  | m1.xlarge | 16384     | 160 | 0         |      | 8    | 1.0         | True      | {u'ecus_per_vcpu:': u'1'} |

+----+-----------+-----------+------+-----------+------+-------+-------------+-----------+---------------------------+

nova.conf文件可以看到。

network_manager=nova.network.manager.FlatDHCPManager

public_interface=br100

vlan_interface=eth0

flat_network_bridge=br100

flat_interface=eth0

novncproxy_base_url=http://10.120.41.43:6080/vnc_auto.html

xvpvncproxy_base_url=http://10.120.41.43:6081/console

vncserver_listen=127.0.0.1

vncserver_proxyclient_address=127.0.0.1

ec2_dmz_host=10.120.41.43

rabbit_host=localhost

rabbit_password=dc8d3e681af08c955fdc

glance_api_servers=10.120.41.43:9292

compute_driver=libvirt.LibvirtDriver

firewall_driver=nova.virt.libvirt.firewall.IptablesFirewallDriver

下面介绍把实例上传到Glance

先查看一个instanceid

ubuntu@dongdong-test:~$nova list              

+--------------------------------------+-----------+---------+------------------+

| ID                                   | Name      | Status | Networks         |

+--------------------------------------+-----------+---------+------------------+

| c12eb9b3-6408-41ac-8647-3e02fb047091 |newtest   | SHUTOFF | private=10.0.0.3 |

|e5279be6-4b3c-4c40-8103-1ebfe8686f6e | smalldisk | SHUTOFF | private=10.0.0.4 |

|829854e0-2aa9-4914-a094-b8f1e68a463f | test     | SHUTOFF | private=10.0.0.2 |

+--------------------------------------+-----------+---------+------------------+

接下来就可以上传到Glance了:

先创建一个快照

ubuntu@dongdong-test:~$ novaimage-create c12eb9b3-6408-41ac-8647-3e02fb047091 uu

ubuntu@dongdong-test:~$ novaimage-list

+--------------------------------------+---------------------------------+--------+--------------------------------------+

| ID                                   | Name                            | Status |Server                               |

+--------------------------------------+---------------------------------+--------+--------------------------------------+

|46039ce3-14e7-4409-8a98-112c1a68214a | cirros-0.3.0-x86_64-uec         | ACTIVE |                                      |

|ef99de5f-4a81-4323-8db1-7f923404d1bd | cirros-0.3.0-x86_64-uec-kernel  | ACTIVE |                                      |

|0d3fa474-4e4a-4e24-a324-f199749ba0ee | cirros-0.3.0-x86_64-uec-ramdisk | ACTIVE|                                      |

|7c316532-640d-4a6d-8b99-c8081cca77f9 | uu                              | SAVING |c12eb9b3-6408-41ac-8647-3e02fb047091 |

+--------------------------------------+---------------------------------+--------+--------------------------------------+

由于默认的设置是private,所以可以更改为public

ubuntu@dongdong-test:~$glance image-update 7c316532-640d-4a6d-8b99-c8081cca77f9 --is-public=true

+---------------------------+------------------------------------------+

| Property                  | Value                                    |

+---------------------------+------------------------------------------+

| Property 'base_image_ref'| ef99de5f-4a81-4323-8db1-7f923404d1bd    |

| Property'image_id_sha1'  |54668b7b045ea875c597c7344b7ab90590f4f5b5 |

| Property 'image_type'     | snapshot                                 |

| Property'instance_uuid'  |c12eb9b3-6408-41ac-8647-3e02fb047091    |

| Property 'user_id'        | bf5dbaa6d22b4643bc21180fe12cd066         |

| checksum                  | None                                     |

| container_format          | None                                     |

| created_at                | 2013-03-20T04:07:13                      |

| deleted                   | False                                    |

| deleted_at                | None                                     |

| disk_format               | None                                     |

| id                        |7c316532-640d-4a6d-8b99-c8081cca77f9    |

| is_public                 | True                                     |

| min_disk                  | 0                                        |

| min_ram                   | 0                                        |

| name                      | uu                                       |

| owner                     |136e9e3b0076491dbb1b3a6838631a96        |

| protected                 | False                                    |

| size                      | 0                                        |

| status                    | queued                                   |

| updated_at                | 2013-03-20T04:56:31                      |

+---------------------------+------------------------------------------+

配置public ip地址。由于每个新创建的instance会自动连接到private ip,当然了我也可以配置一个publicippublic_interface=vlan100

ubuntu@dongdong-test:~$cat /proc/sys/net/ipv4/ip_forward

1    

查看结果:ubuntu@dongdong-test:~$nova-manage floating list

2013-03-20 06:04:22 DEBUGnova.utils [req-15b26ee5-7970-4813-bdf4-5398c5a79dfe None None] backend<module 'nova.db.sqlalchemy.api' from '/opt/stack/nova/nova/db/sqlalchemy/api.pyc'>from (pid=21335) __get_backend /opt/stack/nova/nova/utils.py:510

136e9e3b0076491dbb1b3a6838631a96        172.24.4.225    None   nova    br100

136e9e3b0076491dbb1b3a6838631a96        172.24.4.226    None   nova    br100

b90009002f3d4bdb8489dc8ddfa1fe9a        172.24.4.227    None   nova    br100

None    172.24.4.228    None   nova    br100

None    172.24.4.229    None   nova    br100

None    172.24.4.230    None   nova    br100

None    172.24.4.231    None   nova    br100

None    172.24.4.232    None   nova    br100

None    172.24.4.233    None   nova    br100

None    172.24.4.234    None   nova    br100

None    172.24.4.235    None   nova    br100

None    172.24.4.236    None   nova    br100

None    172.24.4.237    None   nova    br100

None    172.24.4.238    None   nova    br100

b90009002f3d4bdb8489dc8ddfa1fe9a       192.168.253.1   None    test   br100

b90009002f3d4bdb8489dc8ddfa1fe9a       192.168.253.2   None    test   br100

None    192.168.253.3   None   test    br100

None    192.168.253.4   None   test    br100

None    192.168.253.5   None   test    br100

None    192.168.253.6   None   test    br100

最后在学习下scheduler模块。

它主要是决策在那个host上运行instance,主要是由Filter Scheduler来完成该工作的。在默认配置中有一些属性用来核算出一个权值,openstack支持了多种不同的属性,主要是可用内存大小,cpu空闲个数。当计算出权值后,根据权值最小到大区选择某个host创建instance

支持的类型有:i686,x86_64, arm, and powerpc

虚拟机类型有:xen,kvm, qemu, and xenapi

啊!太厉害了吧,每个节点有8Vcpu,而且最大准许使用128vCpu呀!!!

JsonFilter:基于JavaScript语言的轻量级的数据交换格式(JavaScriptObject Notiation),它可以支持一下操作符:

=    <   >   in   <=   >=  not   or  and 

支持一下变量:free_ram_mbfree_disk_mbtotal_usable_ram_mbvcpus_totalvcpus_used来用于决择host是否可以被调用。如果没有设置Filter,就默认是RAMFiler,即就是随机访问内存(random-accessmemory的缩写);随机存取存储器(randomaccess memory的缩写)。在某种极端的情况下,虽然你指定了一个host去运行instance,但是它由于某原因没能立即创建,这是就会用到一个必备的RetryFilter。由它可以保证重新连接服务器。

当然了,决定一个host还需要看它的“花费”大小。

least_cost_functions=nova.scheduler.least_cost.compute_fill_first_cost_fn,

nova.scheduler.least_cost.noop_cost_fn

compute_fill_first_cost_fn_weight=-1.0

noop_cost_fn_weight=1.0

如果用户修改此变量为compute_fill_first_cost_fn_weight=-1.0,就表示提供最多内存来创建并运行实例。

APIsever 是整个项目的核心,执行用户或HTTP请求,来完成整个需求服务。通过一个compute Worker守护进程来协作,该守护进程主要完成:

Run instances

Terminate instances

Reboot instances

Attach volumes

Detach volumes

Get console output

NetworkController是通过HTTP把消息发送到MQ消息队列中,从而响应请求,主要完成:

Allocate fixed IP addresses  分配固定ip

Configuring VLANs for projects配置VLAN

Configuring networks forcompute nodes配置网络节点

VolumeWorkers,它主要是由iscsi协议储存机制来管理instance。主要完成以下任务:

Create volumes 创建卷

Delete volumes 删除卷

Establish Compute volumes建立节点卷

卷有可能在两个instance中转移,但是在同一时刻它只能绑定到单一的instance

Managing  用户必须要通过身份验证才有权去做其他事宜。

管理云:有三种方法去实施管理,novaclientnova-manage(这个命令只能有管理员去调用),和Euca2ools命令。

最后的最后讲到了上面提到的三种管理云方案的具体实例,在这里就不一一列举了。

系统日志是个好帮手,或许会用到的。

/etc/nova/nova.conf

/etc/keystone/keystone.conf

/etc/glance/glance-api.conf

/etc/glance/glance-registry.conf

/etc/cinder/cinder.conf

verbose= False

debug= False

use_syslog= True

syslog_log_facility= LOG_LOCAL0

原创粉丝点击