云计算是一种基于互联网的计算方式,通过它可以按需向计算机和其他设备提供共享的软硬件资源和信息。用户不需要了解“云”中基础设施的细节,具备相应的专业知识,也不需要直接控制。云计算描述了一种新的基于互联网的IT服务添加、使用和交付模式。
我们举个例子来了解一下云计算。云计算中的“云”可以理解为天上的云。天上的云可以变成雨,落到地上。落在地上的水蒸发了,又变成了云。这就形成了一个循环。
这里的雨代表计算资源,比如虚拟机、存储、网络等。
云变成水的过程代表获取资源的过程。
水变成云的过程,代表着资源循环利用的过程。
云计算就像云水的循环过程,按需分配,循环利用。
云计算的本质是解决资源利用、算力不足和成本问题。
云计算具有三种模式:
OpenStack 是一个由 NASA(美国国家航空航天局)和 Rackspace 开发和发起的免费软件和开源项目,并在 Apache 许可证下获得许可。作为一个开源云计算管理平台项目,旨在提供用于公有云和私有云的构建和管理的软件,帮助服务提供商和企业实施类似于Amazon EC2和S3的云基础设施服务(Infrastruction as a Service)。 、IaaS)。
组件逻辑图
虚拟机创建过程:
梯形校正组件
cinder主要组件及功能:
Cinder-api是cinder服务的端点,提供Rest接口,负责处理客户端请求,并向cinder-scheduler组件发送RPC请求。
Cinder-scheduler 负责cinder请求调度。其核心部分是scheduler_driver。作为调度管理器的驱动,负责cinder-volume的具体调度处理,并向选定的cinder-volume发送cinder RPC请求。
Cinder-volume 负责具体的 Volume 请求处理,Volume 存储空间由不同后端存储提供。目前各大存储厂商都积极向cinder社区贡献存储产品的驱动
Openstack组件通过调用各组件api提供的rest接口来实现通信。组件内部的通信是基于rpc(远程过程调用)机制的,rpc机制是基于AMQP模型实现的。
从rpc使用角度来看,nova、neutron、cinder的流程是类似的。我们以cinder为例来讲解一下rpc机制。
Openstack组件内部RPC(远程生产者调用)机制的实现是基于AMQP(高级消息队列协议)作为通信模型,从而满足组件内部的松耦合。 AMQP是一种用于异步消息通信的消息中间件协议。 AMQP模型有四个重要作用:
Exchange:根据Routing key将消息转发到对应的消息队列
路由键:在Exchange中用于确定哪些消息需要发送到对应的消息队列
Publisher:消息发送者,发送消息的Exchange并指定Routing Key,以便消息队列能够正确接收消息
Consumer:消息接收者,从消息队列获取消息
消息发布者 Publisher 将消息发送到 Exchange 并指示 Routing Key。 Exchange负责根据Message的Routing Key进行路由,将Message正确转发到对应的消息队列。监听消息队列的消费者将从队列中读取消息。
Routing Key 是 Exchange 转发信息的基础,因此每条消息都有一个 Routing Key 指示可以接受该消息的目的地址,每个 Message Queue 都可以通过告诉 Exchange 想要接收的 Routing Key 来进行绑定。这样,Exchange就可以正确地将消息转发到相应的消息队列中。
发布者可分为4类:
Direct Publisher 发送点对点消息;
Topic Publisher 采用“发布-订阅”模型发送消息;
Fanout Publisher 发送广播消息;
Notify Publisher 与 Topic Publisher 相同,发送Notification相关消息。
交换可分为3类:
1. Direct Exchange 根据 Routing Key 进行精确匹配,只有对应的 Message Queue 才会收到消息;
2. Topic Exchange 根据 Routing Key 进行模式匹配。只要消息队列符合模式,就会收到消息;
3.Fanout Exchange 将消息转发到所有绑定的消息队列。
AMQP消息模型
RPC 发送请求
客户端发送RPC请求,发布者发送消息并声明消息地址。消费者接收消息并处理消息。如果需要消息响应,则返回处理请求的结果消息。
OpenStack RPC 模块提供了 www.sychzs.cn、rpc.cast 和 rpc.fanout_cast 三种 RPC 调用方法来发送和接收 RPC 请求。
www.sychzs.cn 发送RPC请求并返回请求处理结果。请求处理流程如图5所示,Topic Publisher发送消息,Topic Exchange根据消息地址将消息转发到对应的消息队列,Topic Consumer监听。消息队列,如果找到需要处理的消息,则处理该消息,同时Direct Publisher会请求处理结果消息,请求发送者创建一个Direct Consumer来监听消息的返回结果
2.rpc.cast 发送 RPC 请求,不返回。请求处理流程如图6所示,与www.sychzs.cn的区别在于不需要返回请求处理结果,因此没有Direct Publisher和Direct Consumer处理。
3.rpc.fanout_cast 用于发送RPC广播信息,无返回结果
nova-api 收到休息请求
nova-scheduler 负责调度
nova-compute 负责调用虚拟化驱动、创建虚拟机等
nova-conductor 帮助 nova-compute 访问数据库并将查询结果返回给 nova-compute
中子
在网络方面,OpenStack经历了从nova-network(早期)到Quantum(F版本)再到Neutron(H版本)的演进过程。
流程图:
? }neutron-server 接收请求 --> 将请求发送到 MQ --> neotron-plugins 接收请求 --> 将请求发送到 MQ --> neotron-agent 建立网络设备。
neutron包含组件及功能介绍:
neutron-server:对外提供rest api,接收请求并将请求分发到不同的neutron-plugins。
neutron-plugin:处理来自Neutron Server的请求,维护OpenStack逻辑网络的状态,并调用Agent处理请求。每个制造商都基于 Openstack 开发模拟自己硬件的软件。这个软件是一个插件。早期,各个厂商都开发自己的插件,其功能各自实现,存在大量代码重复;另外,不同厂家的开发标准不同,导致程序兼容性较差。针对这种情况,neutron-plugin分为两部分:Core-plugin和Service-plugin。
- 核心插件:Neutron 是 ML2(模块化第 2 层),负责管理 L2 网络连接。 ML2主要包括三类核心资源:网络、子网、端口。对这三类资源进行操作的 REST API 被 neutron-server 视为 Core API,并且由 Neutron 原生支持。其中:
- 网络:代表隔离的二层网段,是为创建租户而保留的广播域。子网和端口始终分配给特定网络。网络类型包括Flat、Vlan、VxLan、Gre等。
- 子网:代表 IPv4/v6 CIDR 地址池及其相关配置,如网关、DNS 等。子网中的虚拟机实例将自动继承该配置。子网必须与网络关联。
- 端口:代表虚拟交换机上的虚拟交换机端口。 VM的网卡连接到VIF并连接Port后,就会有一个MAC地址和一个IP地址。端口的IP地址是从子网地址池中分配的。
- Service-plugin:除了core-plugin外,其他插件还包括l3路由器、防火墙、负载均衡器、VPN、计量等,主要实现L3-L7网络服务。这些插件运行需要的资源都比较丰富。操作这些资源的REST API被neutron-server视为Extension API,需要厂家进行扩展。
neutron-agent:处理Plugin请求,负责在网络提供者上实现各种网络功能。和插件一一对应,
在架构设计上,Neutron 遵循了 OpenStack 的全分布式思想。每个组件之间通过消息机制进行通信,这样Neutron中的每个组件甚至每个进程都可以运行在任意节点上,如前面的流程图所示。这种微内核架构可以让开发人员专注于网络服务的实现。目前Neutron提供了众多的插件和驱动,基本可以满足各种部署的需求。如果这些仍然难以支持实际所需的环境,可以在Neutron框架下轻松扩展插件或驱动程序。
Neutron对Quantum的插件机制进行了优化,将各个厂商L2插件中独立的数据库实现提取出来,作为公共的ML2插件存储租户的业务需求,使得厂商可以专注于L2设备驱动的实现,而ML2作为总控可以协调多厂商L2设备共同运行”。在Quantum中,厂家都是开发各自的Service-plugin,不能兼容而且开发重复度很高,于是在Neutron中就为设计了ML2机制,使得各厂家的L2插件完全变成了可插拔的,方便了L2中network资源扩展与使用。
ML2作为L2的总控,其实现包括Type和Mechanism两部分,每部分又分为Manager和Driver。Type指的是L2网络的类型(如Flat、VLAN、VxLAN等),与厂家实现无关。Mechanism则是各个厂家自己设备机制的实现,如下图所示。当然有ML2,对应的就可以有ML3,不过在Neutron中L3的实现只负责路由的功能,传统路由器中的其他功能(如Firewalls、LB、VPN)都被独立出来实现了,因此暂时还没有看到对ML3的实际需求。
一般而言,neutron-server和各neutron-plugin部署在控制节点或者网络节点上,而neutron agent则部署在网络节点上和计算节点上。我们先来简单地分析控制端neutron-server和neutron-plugin的工作,然后再分析设备端neutron-agent的工作。
(注意,以前厂商开发的L2 plugin跟ML2都存在于neutron/plugins目录下,而可插拔的ML2设备驱动则存在于neutron/plugins/ml2/drivers目录下)
控制端的实现 —— 从neutron-server的启动开始说起。neutron-server时,主要就干了两件事,第一是启动wsgi服务器监听Neutron REST API,第二是启动rpc服务,用于core plugin与agent间的通信,两类服务作为绿色线程并发运行。从SDN的角度来看,wsgi负责Neutron的北向接口,而Neutron的南向通信机制主要依赖于rpc来实现(当然,不同厂家的plugin可能有其它的南向通信机制)。
设备端的实现 —— 控制端neutron-server通过wsgi接收北向REST API请求,neutron-plugin通过rpc与设备端进行南向通信。设备端agent则向上通过rpc与控制端进行通信,向下则直接在本地对网络设备进行配置。
OSI七层:
层 | 数据单元 | 典型设备 | 功能 |
---|---|---|---|
应用层 | 数据 | 计算机:应用程序 | 直接和应用程序连接并提供常见的网络应用服务 |
表示层 | 数据 | 计算机:编码方式 | 将数据按照网络能理解的方案进行格式化 |
会话层 | 数据 | 计算机:建立会话 | 负责在网络中的两节点之间建立、维持和终止通信 |
传输层 | 数据段 | 计算机:进程和端口 | 提供端到端的交换数据的机制,检查分组编号与次序 |
网络层 | 数据包 | 网络:路由器 | 将网络地址转化为对应的物理地址,并且决定如何将数据从发送方传到接收方 |
数据链路层 | 数据帧 | 网络:交换机、网桥 | 控制物理层和网络层之间的通讯 |
物理层 | 比特 | 网络:集线器、网线 | 产生并检测电压,以便发送和接收携带数据的信号,提供为建立、维护和拆除物理链路所需要的机械的、电气的、功能的和规程的特性 |
应用层:就是应用软件使用的协议,如邮箱使用的POP3,SMTP、远程登录使用的Telnet、获取IP地址的DHCP、域名解析的DNS、网页浏览的http协议等;这部分协议主要是规定应用软件如何去进行通信的。
表示层:决定数据的展现(编码)形式,如同一部电影可以采样、量化、编码为RMVB、AVI,一张图片能够是JPEG、BMP、PNG等。
会话层:为两端通信实体建立连接(会话),中间有认证鉴权以及检查点记录(供会话意外中断的时候可以继续,类似断点续传)。
传输层:将一个数据/文件斩件分成很多小段,标记顺序以被对端接收后可以按顺序重组数据,另外标记该应用程序使用的端口号及提供QOS。(不同的应用程序使用不同计算机的端口号,同样的应用程序需要使用一样的端口号才能正常通信)
网络层:路由选路,选择本次通信使用的协议(http、ftp等),指定路由策略及访问控制策略。(IP地址在这一层)
数据链路层:根据端口与MAC地址,做分组(VLAN)隔离、端口安全、访问控制。(MAC地址在这一层)处理VLAN内的数据帧转发,跨VLAN间的访问,需要上升到网络层。
物理层:将数据最终编码为用0、1表示的比特流,然后传输。
网络模式
根据创建网络的用户的权限,Neutron network 可以分为:
Provider network:管理员创建的和物理网络有直接映射关系的虚拟网络。
Tenant network:租户普通用户创建的网络,物理网络对创建者透明,其配置由 Neutorn 根据管理员在系统中的配置决定
根据网络的类型,Neutron network 可以分为:Local、Flat / Flat Dhcp 、VLan 、Gre 、VxLan
1. Local —— 所有的组件全部安装在一台机器上,多用于测试环境。
2. Flat / Flat Dhcp —— Flat模型最为简单,所有的虚拟机共用一个私有IP网段,IP地址在虚拟机启动时完成注入,虚拟机间的通信直接通过HyperVisor中的网桥转发,公网流量在该网段的网关上进行NAT(Nova-network实现为开启nova-network主机内核的iptables,Neutron实现为网络节点上的l3-agent)。Flat DHCP模型与Flat区别在于网桥中开启了DHCP进程,虚拟机通过DHCP消息获得IP地址(Nova-network实现为nova-network主机中的dnsmaq,Neutron实现为网络节点上的dhcp-agent)。
优点:结构简单,稳定
缺点:全部租户都在一个水平面上,租户之间没有隔离,因为全部租户都在一个子网内,当大规模部署后,其广播风暴将会是不小的负面因素。
3. VLan
LAN 表示 Local Area Network,本地局域网,通常使用 Hub 和 Switch 来连接LAN 中的计算机。一般来说,当你将两台计算机连入同一个 Hub 或者 Switch 时,它们就在同一个 LAN 中。同样地,你连接两个 Switch 的话,它们也在一个 LAN 中。一个 LAN 表示一个广播域,它的意思是,LAN 中的所有成员都会收到 LAN 中一个成员发出的广播包。可见,LAN 的边界在路由器或者类似的3层设备。
VLAN 表示 Virutal LAN。一个带有 VLAN 功能的switch 能够同时处于多个 LAN 中。最简单地说,VLAN 是一种将一个交换机分成多个交换机的一种方法。比方说,你有两组机器,group A 和 B,你想配置成组 A 中的机器可以相互访问,B 中的机器也可以相互访问,但是A组中的机器不能访问B组中的机器。你可以使用两个交换机,两个组分别接到一个交换机。如果你只有一个交换机,你可以使用 VLAN 达到同样的效果。你在交换机上分配配置连接组A和B的机器的端口为 VLAN access ports。这个交换机就会只在同一个 VLAN 的端口之间转发包。
带 VLAN 的交换机的端口分为两类:
一个计算节点上的网络实例
它反映的网络配置如下:
Neutron 在该计算节点上做的事情:
优点:租户有隔离
缺点: 1. VLAN 使用 12-bit 的 VLAN ID,所以 VLAN 的第一个不足之处就是它最多只支持 4096 个 VLAN 网络(当然这还要除去几个预留的),对于大型数据中心的来说,这个数量是远远不够的。
2. VLAN 是基于 L2 的,所以很难跨越 L2 的边界,在很大程度上限制了网络的灵活性。
更多具体内容参考:
http://www.sychzs.cn/sammyliu/p/4626419.html
gre与vxlan请参考
http://www.sychzs.cn/sammyliu/p/4622563.html
http://www.sychzs.cn/xingyun/p/4620727.html