• 1. Openstack基础知识介绍
  • 2. OpenStack概念架构Horizon(Dashboard)与其他主要模块的关联(包括Nova,Cinder,Glance,Swift,Neutron,keystone)通过Ceilometer(监控功能)可以监控的模块(包括Nova,Glance,Cinder,Neutron)Keystone(身份验证功能)模块可以对其他模块进行相应操作进行身份及权限验证(包括Nova,Glance,Cinder,Swift,Neutron,Ceilometer)VMNova为VM提供计算资源 Glance为VM提供镜像 Cinder为VM提供块存储资源 Neutron为VM提供网络资源及网络连接Cinder连接VM后所产生的数据可以备份到Swift对象存储中 Glance提供镜像可以保存在Switf对象存储中
  • 3. OpenStack核心系统架构图Horizon Keystone Nova Glance Cinder Swift Neutron
  • 4. OpenStack 最简物理架构2个节点: Cloud Controller Node: Keystone(身份验证服务) Glance(镜像管理服务) Nova (计算资源管理服务) 数据库服务(MySQL) 消息服务(RabbitMQ或QPid) Compute Node: Nova-Compute Nova-Network KVM虚拟化系统 2种网络: Internal Network(内部网络) 用于提供Provider网络(VM to Provider) 用于tenant网络(VM to VM) External Network(外部网络) 用于外部用户与VM通信及控制(VM to Internet)
  • 5. OpenStack主要逻辑模块–Horizon Dashboard服务在整个Openstack应用体系框架中,Horizon就是整个应用的入口。它提供了一个模块化的,基于web的图形化界面服务门户。用户可以通过浏览器使用这个Web图形化界面来访问、控制他们的计算、存储和网络资源,如启动实例、分配IP地址、设置访问控制等。基于Django框架实现
  • 6. OpenStack主要逻辑模块–Horizon 两种功能界面Horizon为以下两种角色的用户提供了不同的功能及使用界面: 云管理员: 提供一个整体视图,可以总览整个云的资源规模及运行状况.可以创建终端用户和项目,想终端用户分配项目并进行项目可使用的资源配额管理。 终端用户(云用户): 提供了一个自助服务门户,可以在由云管理分配的项目中,在不超过配额限制的范围内,自由的操作、使用和分配资源。 云管理员云用户
  • 7. OpenStack主要逻辑模块–Keystone身份验证服务Keystone作为Openstack的核心模块,为Nova(计算),Glance(镜像),Swift(对象存储),Cinder(块存储),Neutron(网络)以及Horizon(Dashboard)提供认证服务
  • 8. Keystone基本概念介绍之一User   User即用户,他们代表可以通过keystone进行访问的人或程序。Users通过认证信息(credentials,如密码、API Keys等)进行验证。 Tenant   Tenant即租户,它是各个服务中的一些可以访问的资源集合。例如,在Nova中一个tenant可以是一些机器,在Swift和Glance中一个tenant可以是一些镜像存储,在Neutron中一个tenant可以是一些网络资源。Users默认的总是绑定到某些tenant上。 Role   Role即角色,Roles代表一组用户可以访问的资源权限,例如Nova中的虚拟机、Glance中的镜像。Users可以被添加到任意一个全局的或租户的角色中。在全局的role中,用户的role权限作用于所有的租户,即可以对所有的租户执行role规定的权限;在租户内的role中,用户仅能在当前租户内执行role规定的权限。 Service   Service即服务,如Nova、Glance、Swift。根据前三个概念(User,Tenant和Role)一个服务可以确认当前用户是否具有访问其资源的权限。但是当一个user尝试着访问其租户内的service时,他必须知道这个service是否存在以及如何访问这个service,这里通常使用一些不同的名称表示不同的服务。
  • 9. Keystone基本概念介绍之二Endpoint  Endpoint,翻译为“端点”,我们可以理解它是一个服务暴露出来的访问点,如果需要访问一个服务,则必须知道他的endpoint。因此,在keystone中包含一个endpoint模板,这个模板提供了所有存在的服务endpoints信息。一个endpoint template包含一个URLs列表,列表中的每个URL都对应一个服务实例的访问地址,并且具有public、private和admin这三种权限。public url可以被全局访问(如http://compute.example.com),private url只能被局域网访问(如http://compute.example.local),admin url被从常规的访问中分离。 Token Token是访问资源的钥匙。它是通过Keystone验证后的返回值,在之后的与其他服务交互中只需要携带Token值即可。每个Token都有一个有效期,Token只在有效期内是有效的。
  • 10. 各种概念之间关系解释1、租户下,管理着一堆用户(人,或程序)。 2、每个用户都有自己的credentials(凭证)用户名+密码或者用户名+API key,或其他凭证。 3、用户在访问其他资源(计算、存储)之前,需要用自己的credential去请求keystone服务,获得验证信息(主要是Token信息)和服务信息(服务目录和它们的endpoint)。 4、用户拿着Token信息,就可以去访问特点的资源了。
  • 11. Keystone在OpenStack中的访问流程范例
  • 12. 计算管理(codenamed “Nova”) 基于用户需求为VM提供计算资源管理. 基于Python语言编写。 Nova-API:对外统一提供标准化接口.接受和响应最终用户Compute API的请求,同时还实现与Openstack其他各逻辑模块的通讯与服务提供 Nova-Scheduler:从队列上得到一个虚拟机实例请求并且决定它应该在哪里运行(使用多种过滤器或算法调度) Queue:提供了一个守护进程之间传递消息的中央枢纽。消息队列系统作用还可以实现与Openstack其他各逻辑模块之间的通信建立连接枢纽 Nova-Database:存储云基础设施的编译时和运行时的状态,从理论上讲,OpenStack Nova可以支持任何SQL-Alchemy支持的数据库,但是目前被广泛使用的数据库有sqlite3(只适用于测试和开发工作),MySQL和PostgreSQL。 Nova-Compute:主要是一个人工守护进程,它可以通过虚拟机管理程序的API(XenAPI for XenServer/XCP, libvirt for KVM or QEMU, VMwareAPI for VMware等)来创建和终止虚拟机实例。支持多种虚拟化平台 Nova还提供控制台的服务,让最终用户通过代理服务器访问他们的虚拟实例的控制台。这涉及到多个守护进程(nova-console,nova-novncproxy、nova-xvpnvncproxy和nova-consoleauth) OpenStack主要逻辑模块- Nova
  • 13. Nova的架构
  • 14. Nova处理过程
  • 15. 请求一个虚拟机实例过程
  • 16. Nova支持的虚拟化平台Openstack 支持的 虚拟化技术KVMLXCQEMUUMLvSphereXenhttp://docs.openstack.org/admin-guide-cloud/content/section_hypervisors.html
  • 17. Nova支持的调度器和过滤器Nova支持的调度器SimpleScheduler简单调度器FilterScheduler过滤调度器MultiScheduler多重调度器ChanceScheduler随机调度器Nova支持的过滤器ImagePropertiesFilterAvailabilityZoneFilterComputeFilterCoreFilterAll HostFilterDifferentHostFilterIsolateHostFilterRamFilterSimpleCIDRAffinityFilterSameHostFilter
  • 18. 块存储管理模块(codenamed “Cinder”) 提供到虚拟机的永久性块存储卷.类似AWS的EBS块存储服务 多个卷可以被挂载到单一虚拟机实例,同时卷可以在虚拟机实例间移动,单个卷在同一时刻只能被挂载到一个虚拟机实例 块存储系统管理块设备到虚拟机的创建,挂载以及卸载. 块设备卷完全与Openstack Compute集成,并支持云用户在Dashboard中管理数据自己的存储. 除了支持简单的Linux服务器本地存储之外,还支持众多的存储平台,包括 Ceph, NetApp, Nexenta, SolidFire, Zadara. 快照管理提供了强大的在块存储上实现数据备份的功能可以用来作为引导卷使用 块存储适合性能敏感性业务场景,例如数据库存储 大规模可扩展的文件系统或服务器需要访问到块级裸设备存储.OpenStack主要逻辑模块- 块存储Cinder
  • 19. Cinder的架构
  • 20. Cinder架构解释API Service:负责接受和处理 Rest 请求,并将请求放入 RabbitMQ对列。 Scheduler Service: 处理任务队列的任务,并根据预定策略选择合适的 Volume Service 节点来执行任务。目前版本的 Cinder 仅仅提供了一个 Simple Scheduler, 该调度器选择卷数量最少的一个活跃节点来创建卷。 Volume Service: 该服务运行在存储节点上,管理存储空间。每个存储节点都有一个 Volume Service,若干个这样的存储节点联合起来可以构成一个存储资源池。为了支持不同类型和型号的存储,均通过Drivers的形式为Cinder的 Volume Service 提供相应的Cinder-Volume。 Cinder目前支持的存储类型 本地存储:LVM, Sheepdog 网络存储:NFS, RBD(Ceph) HP:3PAR (iSCSI/FC),LeftHand (iSCSI) IBM: Storwize family/SVC (iSCSI/FC),XIV (iSCSI), GPFS,zVM Netapp: NetApp(iSCSI/NFS) EMC: VMAX/VNX (iSCSI),Isilon(iSCSI) Solidfire: Solidfire cluster(iSCSI)
  • 21. Cinder补充Cinder主要核心是对卷的管理,允许对卷、卷的类型、卷的快照进行处理。它并没有实现对块设备的管理和实际服务,而是为后端不同的存储结构提供了统一的接口,不同的块设备服务厂商在 Cinder 中实现其驱动支持以与 OpenStack 进行整合。在CinderSupportMatrix中可以看到众多存储厂商如 HP、NetAPP、IBM、SolidFire、EMC 和众多开源块存储系统对 Cinder 的支持。 Havana 版本中 Cinder 新增特性如下: Volume-Resize:在可用情况下调整卷大小。 Volume-Backup-To-Ceph:现在卷可以备份到 Ceph 集群中。 Volume-Migration:现在不同用户间可以透明地转移和交换卷。 QoS:增加限速相关的元信息供 Nova 和其 Hypervisor 使用。 More-Drivers:更多的存储厂商加入和完善了自己的 Cinder 驱动。
  • 22. Cinder如何支持典型存储1.本地存储 对于本地存储,cinder-volume 可以使用 LVM 驱动,该驱动当前的实现需要在主机上事先用 LVM 命令创建一个 cinder-volumes 的卷组 , 当该主机接受到创建卷请求的时候,cinder-volume 在该卷组 上创建一个逻辑卷, 并且用 openiscsi 将这个卷当作一个 iscsi tgt 给输出.当然还可以将若干主机的本地存储用 sheepdog 虚拟成一个共享存储,然后使用 sheepdog 驱动。2.HP块存储
  • 23. HP存储系统对于的Cinder的支持https://wiki.openstack.org/wiki/CinderSupportMatrixCinderSupportMatrixOpenStack Block Storage (aka Cinder) Drivers
  • 24. OpenStack主要逻辑模块- 对象存储Swift分布式对象存储系统,类似于AWS的S3 通过采用基于标准化服务器的集群架构提供冗余,可扩展的对象存储 具有良好的扩展性,可以实现PB级别数据的存储 支持存储对象写入的多份拷贝,并且支持当拷贝丢失后的自我修复功能.确保数据的一致性 提供每GB高性价比的极佳的可用性和数据耐久性 支持原生的 OpenStack™ API 以及S3 compatible API
  • 25. 对象存储Swift数据模型Swift 采用层次数据模型,共设三层逻辑结构:Account/Container/Object(即账户/容器/对象),每层节点数均没有限制,可以任意扩展。数据存储基于NWR理论类似文件存储过程: Touch fileA 在对应的磁盘块组中对应的元数据区域产生对应的inode,基于这个inode存储数据到数据区中对应的块组中的blockAccount对应租户,用于隔离 Container对应某个租户数据的存储区域 Object对应存储区域中具体的block
  • 26. 对象存储Swift系统架构Swift 采用完全对称、面向资源的分布式系统架构设计 所有组件都可扩展,避免因单点失效而扩散并影响整个系统运转 通信方式采用非阻塞式 I/O 模式,提高了系统吞吐和响应能力
  • 27. 对象存储Swift系统组件代理服务(Proxy Server):对外提供对象服务 API,会根据环的信息来查找服务地址并转发用户请求至相应的账户、容器或者对象服务;由于采用无状态的 REST 请求协议,可以进行横向扩展来均衡负载。 认证服务(Authentication Server):验证访问用户的身份信息,并获得一个对象访问令牌(Token),在一定的时间内会一直有效;验证访问令牌的有效性并缓存下来直至过期时间。 缓存服务(Cache Server):缓存的内容包括对象服务令牌,账户和容器的存在信息,但不会缓存对象本身的数据;缓存服务可采用 Memcached 集群,Swift 会使用一致性散列算法来分配缓存地址。 账户服务(Account Server):提供账户元数据和统计信息,并维护所含容器列表的服务,每个账户的信息被存储在一个 SQLite 数据库中。 容器服务(Container Server):提供容器元数据和统计信息,并维护所含对象列表的服务,每个容器的信息也存储在一个 SQLite 数据库中。 对象服务(Object Server):提供对象元数据和内容服务,每个对象的内容会以文件的形式存储在文件系统中,元数据会作为文件属性来存储,建议采用支持扩展属性的 XFS 文件系统。 复制服务(Replicator):会检测本地分区副本和远程副本是否一致,具体是通过对比散列文件和高级水印来完成,发现不一致时会采用推式(Push)更新远程副本,例如对象复制服务会使用远程文件拷贝工具 rsync 来同步;另外一个任务是确保被标记删除的对象从文件系统中移除。 更新服务(Updater):当对象由于高负载的原因而无法立即更新时,任务将会被序列化到在本地文件系统中进行排队,以便服务恢复后进行异步更新;例如成功创建对象后容器服务器没有及时更新对象列表,这个时候容器的更新操作就会进入排队中,更新服务会在系统恢复正常后扫描队列并进行相应的更新处理。 审计服务(Auditor):检查对象,容器和账户的完整性,如果发现比特级的错误,文件将被隔离,并复制其他的副本以覆盖本地损坏的副本;其他类型的错误会被记录到日志中。 账户清理服务(Account Reaper):移除被标记为删除的账户,删除其所包含的所有容器和对象。
  • 28. 对象存储Swift系统支持的操作Swift RESTful API 总结资源类型URLGETPUTPOSTDELETEHEAD账户/account/获取容器列表---获取账户元数据容器/account/container获取对象列表创建容器更新容器元数据删除容器获取容器元数据对象/account/container/object获取对象内容和元数据创建、更新或拷贝对象更新对象元数据删除对象获取对象元数据
  • 29. 对象存储Swift补充
  • 30. 对象存储Swift补充
  • 31. 对象存储Swift补充— SINA的经验主要组件 Proxy Server Proxy Server是提供Swift API的服务器进程,负责Swift其余组件间的相互通信。对于每个客户端的请求,它将在Ring中查询Account、Container或Object的位置,并且相应地转发请求。Proxy提供了Rest-full API,并且符合标准的HTTP协议规范,这使得开发者可以快捷构建定制的Client与Swift交互。 Storage Server Storage Server提供了磁盘设备上的存储服务。在Swift中有三类存储服务器:Account、Container和Object。其中Container服务器负责处理Object的列表,Container服务器并不知道对象存放位置,只知道指定Container里存的哪些Object。这些Object信息以sqlite数据库文件的形式存储。Container服务器也做一些跟踪统计,例如Object的总数、Container的使用情况。 Consistency Servers 在磁盘上存储数据并向外提供Rest-ful API并不是难以解决的问题,最主要的问题在于故障处理。Swift的Consistency Servers的目的是查找并解决由数据损坏和硬件故障引起的错误。主要存在三个Server:Auditor、Updater和Replicator。 Auditor运行在每个Swift服务器的后台持续地扫描磁盘来检测对象、Container和账号的完整性。如果发现数据损坏,Auditor就会将该文件移动到隔离区域,然后由Replicator负责用一个完好的拷贝来替代该数据。图2给出了隔离对象的处理流图。 在系统高负荷或者发生故障的情况下,Container或账号中的数据不会被立即更新。如果更新失败,该次更新在本地文件系统上会被加入队列,然后Updaters会继续处理这些失败了的更新工作,其中由Account Updater和Container Updater分别负责Account和Object列表的更新。 Replicator的功能是处理数据的存放位置是否正确并且保持数据的合理拷贝数,它的设计目的是Swift服务器在面临如网络中断或者驱动器故障等临时性故障情况时可以保持系统的一致性。Swift主要有三个组成部分:Proxy Server、Storage Server和Consistency Server。其架构如图1所示,其中Storage和Consistency服务均允许在Storage Node上。Auth认证服务目前已从Swift中剥离出来,使用OpenStack的认证服务Keystone,目的在于实现统一OpenStack各个项目间的认证管理
  • 32. 对象存储Swift补充 — SINA的经验Ring Ring是Swift最重要的组件,用于记录存储对象与物理位置间的映射关系。在涉及查询Account、Container、Object信息时,就需要查询集群的Ring信息。 Ring使用Zone、Device、Partition和Replica来维护这些映射信息。Ring中每个Partition在集群中都(默认)有3个Replica。每个Partition的位置由Ring来维护,并存储在映射中。Ring文件在系统初始化时创建,之后每次增减存储节点时,需要重新平衡一下Ring文件中的项目,以保证增减节点时,系统因此而发生迁移的文件数量最少。 原理 Swift用到的算法和存储理论并不复杂,主要有几下几个概念。 一致性哈希算法 Swift利用一致性哈希算法构建了一个冗余的可扩展的分布式对象存储集群。Swift采用一致性哈希的主要目的是在改变集群的Node数量时,能够尽可能少地改变已存在Key和Node的映射关系。 该算法的思路分为以下三个步骤。 首先计算每个节点的哈希值,并将其分配到一个0~232的圆环区间上。其次使用相同方法计算存储对象的哈希值,也将其分配到这个圆环上。随后从数据映射到的位置开始顺时针查找,将数据保存到找到的第一个节点上。如果超过232仍然找不到节点,就会保存到第一个节点上。 假设在这个环形哈希空间中存在4台Node,若增加一台Node5,根据算法得出Node5被映射在Node3和Node4之间,那么受影响的将仅是沿Node5逆时针遍历到Node3之间的对象(它们本来映射到Node4上)。其分布如图3所示。
  • 33. 对象存储Swift补充 — SINA的经验Replica 如果集群中的数据在本地节点上只有一份,一旦发生故障就可能会造成数据的永久性丢失。因此,需要有冗余的副本来保证数据安全。Swift中引入了Replica的概念,其默认值为3,理论依据主要来源于NWR策略(也叫Quorum协议)。 NWR是一种在分布式存储系统中用于控制一致性级别的策略。在Amazon的Dynamo云存储系统中,使用了NWR来控制一致性。其中,N代表同一份数据的Replica的份数,W是更新一个数据对象时需要确保成功更新的份数;R代表读取一个数据需要读取的Replica的份数。 公式W+R>N,保证某个数据不被两个不同的事务同时读和写;公式W>N/2保证两个事务不能并发写某一个数据。 在分布式系统中,数据的单点是不允许存在的。即线上正常存在的Replica数量为1的情况是非常危险的,因为一旦这个Replica再次出错,就可能发生数据的永久性错误。假如我们把N设置成为2,那么只要有一个存储节点发生损坏,就会有单点的存在,所以N必须大于2。N越高,系统的维护成本和整体成本就越高。工业界通常把N设置为3。例如,对于MySQL主从结构,其NWR数值分别是N= 2, W = 1, R = 1,没有满足NWR策略。而Swift的N=3, W=2, R=2,完全符合NWR策略,因此Swift系统是可靠的,没有单点故障。 Zone 如果所有的Node都在一个机架或一个机房中,那么一旦发生断电、网络故障等,都将造成用户无法访问。因此需要一种机制对机器的物理位置进行隔离,以满足分区容忍性(CAP理论中的P)。因此,Ring中引入了Zone的概念,把集群的Node分配到每个Zone中。其中同一个Partition的Replica不能同时放在同一个Node上或同一个Zone内。注意,Zone的大小可以根据业务需求和硬件条件自定义,可以是一块磁盘、一台存储服务器,也可以是一个机架甚至一个IDC。 Weight Ring引入Weight的目的是解决未来添加存储能力更大的Node时,分配到更多的Partition。例如,2TB容量的Node的Partition数为1TB的两倍,那么就可以设置2TB的Weight为200,而1TB的为100。
  • 34. OpenStack主要逻辑模块–Glance镜像服务 Glance是OpenStack镜像服务,用来注册、登陆和检索虚拟机镜像。Glance服务提供了一个REST API,使你能够查询虚拟机镜像元数据和检索的实际镜像。通过镜像服务提供的虚拟机镜像可以存储在不同的位置,从简单的文件系统对象存储到类似OpeenStack对象存储系统。镜像服务组件: Glance-API :接收最终用户或Noav对镜像的请求,检索和存储镜像的相关API调用。 Glance-registry: 存储,处理和检索有关镜像的元数据,元数据大小、类型等等。 Database :存储镜像元数据,可以支持多种数据库,现在使用比较广泛的是mysql和sqlite.
  • 35. Glance与Openstack其他模块的关系Horizon Image可视化Swift 存储ImageKeystone Image权限控制Nova 调用ImageGlance模块 (镜像功能)
  • 36. Glance支持的Image格式ariqcow2ovfvdirawvmdkvhd添加标题添加标题添加标题raw – 非结构化的镜像格式 vhd – 一种通用的虚拟机磁盘格式, 可用于Vmware、Xen、Microsoft Virtual PC/Virtual Server/Hyper-V、VirtualBox等 vmdk – Vmware的虚拟机磁盘格式, 同样也支持多种Hypervisor vdi – VirtualBox、QEMU等支持的虚拟机磁盘格式 qcow2 – 一种支持QEMU并且可以动态扩展的磁盘格式 aki – Amazon Kernel 镜像 ari – Amazon Ramdisk 镜像 ami – Amazon 虚拟机镜像akiami
  • 37. 网络服务 (codenamed “Quantum/Neutron”) 提供在被管理设备之间的网络连接服务 . 允许用户自己创建自己的网络并attach端口使用. 通过开发的Plugins支持SDN和OpenFlow 用户自定义子网地址,私有网络/公有网络以及Floating IP分配规则OpenStack主要逻辑模块–Quantum/Neutron网络服务Neutron Drivers
  • 38. Neutron服务模块层次Neutron Drivers Neutron API提供Openstack其他服务或管理员及用户访问的接口 抽象层网络资源抽象化,包括网络,子网,端口及路由。将底层各种各样的网络资源按照openstack定义的网络描述规则化 Plug-in通过Plug-in方式可以整合更多的高级的功能以及与底层网络厂商的设备实现更好的集成
  • 39. Quantum/Neutron 的关键概念网络Network 一个L2二层网络单元 租户可通过Quantum/Neutron API 创建自己的网络 子网Subnet 一段IPV4/IPV6地址段 为Instance提供私网或公网地址 路由器Router 三层路由器 为租户的Instance提供路由功能 端口Port 虚拟交换机上的端口 管理Instance的网卡
  • 40. 简单网络架构及解释网络Agent Plug-in agent:本地虚拟交换配置 Dhcp agent:为tenant网络提供DHCP服务 L3 agent:提供l3/NAT转发功能,为tenant网络中的vm提供外网访问 Metering agent:提供l3流量监控和计量网络描述: 管理网络:用于 OpenStack 各组件之间的内部通信。 数据网络:用于云部署中虚拟数据之间的通信。 外部网络:公共网络,外部或 internet 可以访问的网络。 API 网络:暴露所有的 OpenStack APIs,包括 OpenStack 网络 API 给租户
  • 41. Openstack网络服务历程OpenStack nova-network 网络模型 在 OpenStack 网络组件没有独立出来之前,OpenStack 最初的 nova-network 网络模型单一平面网络的缺点: 存在单一网络瓶颈,缺乏可伸缩性。 缺乏合适的多租户隔离单一网络平面
  • 42. Openstack网络服务历程OpenStack Neutron 网络模型 OpenStack nova-network 独立成为单独的组件 Neutron 后,形象的网络模型的 多平面网络、混合平面私有网络多平面网络混合平面私有网络通过私有网络实现 运营商路由功能通过私有网络实现每个租户创建自己专属的网络区段
  • 43. Neutron 服务网络管理的三种模式,两种IPFlat 模式 FlatDHCP 模式 VLAN 模式 固定IP(Fixed-IP):分配给虚拟机实例使用 浮动IP(Floating IP):分配给虚拟机实例的外网地址,通过NAT方式实现。 两种IP 三种模式
  • 44. Flat模式Flat 模式是最简单的一种联网模式。每个实例接收一个来自池的固定 IP。所有实例均默认附加到相同的桥 (br100)。桥必须进行手动配置。联网配置在实例引导前插入到实例中。在这种模式中,没有浮动 IP 特性。
  • 45. Flat DHCP 模式: 用于测试环境这种模式下与 Flat 模式不同的地方在于有一个 DHCP 进程,每一个运行 nova-network 进程的节点(网络控制节点/nove-network 主机)就是一个单独的网络。Nova 会在 nova-network 主机建立网桥(默认名称 br100,配置项 flat_network_bridge=br100),并给该网桥指定该网络的网关 IP,同时 Nova 在网桥处起一个 DHCP 进程,最后,会建立 iptables 规则(SNAT/DNAT)使虚拟机能够与外界通信,同时与一个 metadata 服务器通信以取得 cloud 内的信息。 计算节点负责创建对应节点的网桥,此时的计算节点网卡可以不需要 IP 地址,因为网桥把虚拟机与 nove-network 主机连接在一个逻辑网络内。虚拟机启动时会发送 dhcpdiscover 以获取 IP 地址。虚拟机通往外界的数据都要通过 nova-network 主机,DHCP 在网桥处监听,分配 fixed_range 指定的 IP 段。 这种部署方式的缺点----单节点故障、无二层隔离(即所有的虚拟机都在一个广播域)
  • 46. Vlan模式: 用于生产环境VLAN模式的目的是为每个项目提供受保护的网段,具有以下特点: NAT实现public ip 除了public NAT外没有其它途径进入每个lan 受限的流出网络,project-admin可以控制 受限的项目之间的访问,同样project-admin控制 所以实例和api的连接通过vpn
  • 47. FlatDHCP模式下网络流:单网卡单节点单网卡单节点OpenStack网络流在普通部署方式下,只有一个控制节点(或网络控制器),dhcp和外网访问都需要经过它。 dhcp时: 1)网络控制器(运行nova-network服务的节点)一直运行dusmasq作为DHCP服务器监听网桥(br100); 2)实例做一次dhcp discover操作,发送请求; 3)网络控制器把从一个指定的子网中获得的IP地址响应给虚拟机实例。 实例访问外网时: 1)实例经过所在主机的flat_interface(这是一个flat网络),连接到nova-network所在的主机(控制节点); 2)网络控制器对外出网络流进行转发。 外网访问实例时: 1)网络控制器对floating ip进行nat; 2)通过flat网络将流入数据路由给对应的实例。
  • 48. 单网卡多节点OpenStack网络流控制节点: 1)在主机上创建一个网桥(br100),把网关ip赋给这个桥;如果已经有ip,会自动把这个ip赋给网桥作为网关,并修复网关; 2)建立dhcp server,监听这个网桥;并在数据库记录ip的分配和释放,从而判定虚拟机释放正常关闭dhcp; 3)监听到ip请求时,从ip池取出ip,响应这个ip给实例; 4)建立iptables规则,限制和开放与外网的通信或与其它服务的访问。   计算节点: 1)在主机上建立一个对应控制节点的网桥(br100),把其上实例(虚拟机)桥接到一个网络(br100所在的网络); 2)此后,这个桥、控制节点的桥和实例的虚拟网卡都在同一虚拟网络,通过控制节点对外访问。FlatDHCP模式下网络流:单网卡多节点
  • 49. FlatDHCP模式下网络流: 双网卡多节点双网卡多节点OpenStack网络流控制节点: 1)在主机上创建一个网桥(br100),把网关ip赋给这个桥;如果已经有ip,会自动把这个ip赋给网桥作为网关,并修复网关; 2)建立dhcp server,监听这个网桥;并在数据库记录ip的分配和释放,从而判定虚拟机释放正常关闭dhcp; 3)监听到ip请求时,从ip池取出ip,响应这个ip给实例; 4)建立iptables规则,限制和开放与外网的通信或与其它服务的访问。   计算节点: 1)在主机上建立一个对应控制节点的网桥(br100),把其上实例(虚拟机)桥接到一个网络(br100所在的网络); 2)此后,这个桥、控制节点的桥和实例的虚拟网卡都在同一虚拟网络,通过控制节点对外访问。
  • 50. LinuxBridge介绍目前,对网络的虚拟化主要集中在第 2 层和第 3 层 在 Linux 中,第 2 层通常使用 TAP 设备来实现虚拟网卡,使用 Linux Bridge 来实现虚拟交换机 在 Linux 中,第 3 层通常是基于 Iptable 的 NAT,路由及转发 对于网络隔离,可以采用传统的基于 802.1Q 协议的 VLAN 技术,但这受限于 VLAN ID 大小范围的限制,并且需要手动地在各物理交换机上配置 VLAN;也可以采用虚拟交换机软件,如 Openvswitch,它可以自动创建 GRE 隧道来避免手动去为物理交换机配置 VLAN。左图显示了 node1 网桥中的 VM1 与 node2 网桥中的 VM3 是如何通信的。在 openstack 中,这是典型的 multi-host 模式,即每一个计算节点均部署了网络服务来提供网关服务。 Linux Bridge 充当了交换机的功能,而将 sysctl -w net.ipv4.ip_forward 设置为 1 也相当于 node1 同时充当了一个路由器(路由器的实质就是一个具有多个网卡的机器,因为它的多网卡同时具有这些不同网段的 IP 地址,所以它能将一个网络的流量路由转发到另一个网络)。 网桥,交换机,是用来连接两个 LAN 的。 是根据 MAC 与端口的映射进行转发的,而在虚机的网卡都是知道的,若从转发数据库知道目的 MAC 地址,以太网帧就只会正确的网桥端口传输,否则,就会扩散到网桥设备的所有端口。 因为网桥工作在第二层,所以 eth0.1, tap0, tap1 这些网卡均不需要设置 IP(因为对于上层路由器来说,它们是同一个子网,只需要将 IP 设置在 br1 上即可)。同时, 对 Linux 而言,网桥是虚拟设备,因此,除非将一个或多个真实设备绑定到网桥设备上,否则它就无法接收或传输任何东西。所以需要将一个真实设备(如 eth0)或者真实设备的 vlan 接口(如 eth0.1) 加入到网桥。对于前一种情况,将 eth0 加入到网桥之后,eth0 便不再具有 IP,这时候它与 tap0 这些虚拟网卡均通过 br1 处于 10.0.1.0/24 网络,当然我们也可以为网桥 br1 设置一个别名让它也具有 172.16.99.0/24 网管网段的 IP 地址。)
  • 51. END