目录
文章目录
从虚拟机动态迁移对大二层网络的需求说起
传统数据中心时代通常会采用三层(核心层、汇聚层、接入层)网络架构来应付 C/S、B/S 应用程序的纵贯式大流量访问。三层网络架构设计的三个层次:核心层(网络的高速交换)、汇聚层(提供基于策略的连接)、接入层(将应用服务器接入网络)。
- 核心层:在核心层应该采用高带宽的交换机,核心层的设备采用双机冗余热备份是非常必要的,也可以使用负载均衡功能来改善网络性能。对于网络的控制功能最好尽量少在骨干层上实施。
- 汇聚层:是网络接入层和核心层的中介,汇聚层具有实施策略、安全、工作组接入、虚拟局域网之间的路由、源地址或目的地址过滤等多种功能。在汇聚层中,应该采用支持三层交换技术和 VLAN 的交换机,以达到网络隔离和分段的目的。
- 接入层:接入层目的是允许终端用户(e.g. 应用服务器、电脑、收集、打印机)连接到网络,主要解决相邻用户之间的互访需求,并且为这些访问提供足够的带宽,接入层还应当适当负责一些用户管理功能(e.g. 地址认证、用户认证、计费管理等),以及用户信息收集工作(e.g. 用户的 IP 地址、MAC 地址、访问日志等)。
通常三层网络架构会采用 STP(Spanning Tree Protocol,生成树协议)来优化客户端到服务器的访问路径并支持连接冗余高可用,但由于 STP 的收敛性能等原因,一般情况下 STP 的网络规模不会超过 100 台交换机。同时由于 STP 需要阻塞掉冗余设备和链路,也降低了网络资源的带宽利用率。因此在实际网络规划时,从转发性能、利用率、可靠性等方面考虑,会尽可能控制 STP 网络范围,也就是会尽可能的控制二层域的范围。所以在三层网络架构中通常会将二层网络的范围限制在网络接入层以下,避免出现大范围的二层广播域。
在这样的网络架构下,应用服务器在不同二层域之间移动是非常困难的,一旦应用服务器迁移到其他二层域,就需要变更 IP 地址,同时也伴随着生产业务的中断,造成了非常大的运维和生产成本。随着服务器虚拟化技术的成熟,虚拟机动态迁移(Live Migration)技术被广泛应用用。虚拟机迁移的应用场景:
- 当某个计算节点发生故障修复时,将其之上的虚拟机迁移出去。
- 对某个计算节点进行硬件升级维护时,将其之上的虚拟机迁移出去。
- 当某个计算节点的负载超出安全阈值时,将其之上的一些虚拟机迁移出去。
- 对某个 REGION 或 AZ 中的计算节点进行负载均衡。
随着云计算的发展,云计算服务商以按需分配为原则,为客户提供具有高可用性、高扩展性的计算、存储和网络等 IT 资源。虚拟化技术将各种物理资源抽象为逻辑上的资源,隐藏了各种物理上的限制,为在更细粒度上对其进行管理和应用提供了可能性。基于这些特性,云计算从根本上改变了数据中心网络架构的需求。云计算要求数据中心、甚至是跨数据中的网络基础设施可以支持大范围的二层域,二层网络规模有多大,虚拟机才能调度、迁移到有多远。就是所谓的大二层网络。近些年,计算虚拟化技术(主要指 x86 平台的虚拟化)随着云计算的兴起取得了长足的发展,但相对而言,存储和网络虚拟化还有许多问题亟需解决,在云计算环境中尤其如此。在这样的大环境下,OpenFlow/SDN 带来的网络 “可编程性” 为网络虚拟化的突破带来了无限可能。
>为什么说云计算时代的 SDN 非常重要?
因为虚拟机的创建,删除,迁移比物理机灵活的多,所以很难像物理的交换机一样,用网线将交换机和物理服务器连接起来,就不怎么变了。虚拟机就不一样了,所以需要虚拟交换机,也即通过软件模拟一个交换机,用软件模拟一根网线,一头插在虚拟机上,一头插在虚拟交换机上,一会儿创建五个虚拟机,要插到一个交换机上,一会儿其中两个虚拟机迁移到了另外的物理机上,则他们两个的网口要从上一台交换机上拔下来,插到新的虚拟交换机上,这样做没有问题,因为都是软件实现的,很灵活。
OpenFlow 起源
OpenFlow 起源于斯坦福大学的 Clean Slate 项目组。Clean Slate 项目的最终目的是要重新发明英特网,旨在改变设计已略显不合时宜,且难以进化发展的现有网络基础架构。在 2006 年,斯坦福的学生 Martin Casado 领导了一个关于网络安全与管理的项目 Ethane,该项目试图通过一个集中式的控制器,让网络管理员方便地定义基于网络流的安全控制策略,并将这些安全策略应用到各种网络设备中,从而实现对整个网络通讯的安全控制。受此项目(及 Ethane 的前续项目 Sane)启发,Martin 和他的导师 Nick McKeown 教授(时任 Clean Slate 项目的 Faculty Director)发现,如果将 Ethane 的设计更一般化,将传统网络设备的数据转发(Data Plane)和路由控制(Control Plane)两个功能模块相分离,通过集中式的控制器(Controller)以标准化的接口对各种网络设备进行管理和配置,那么这将为网络资源的设计、管理和使用提供更多的可能性,从而更容易推动网络的革新与发展。
于是,他们便提出了 OpenFlow 的概念,并且 Nick McKeown 等人于 2008 年在 ACM SIGCOMM 发表了题为《OpenFlow: Enabling Innovation in Campus Networks》的论文,首次详细地介绍了 OpenFlow 的概念。该篇论文除了阐述 OpenFlow 的工作原理外,还列举了 OpenFlow 几大应用场景,包括:
- 校园网络中对实验性通讯协议的支持(如其标题所示);
- 网络管理和访问控制;
- 网络隔离和VLAN;
- 基于WiFi的移动网络;
- 非IP网络;
- 基于网络包的处理。
当然,目前关于 OpenFlow 的研究已经远远超出了这些领域。
「控制转发分离架构」是一个划时代概念,也是 OpenFlow 的典型特征。将控制逻辑从网络设备中分离出来,交给中央控制器集中统一控制,实现网络业务的灵活部署。用于控制的网络称为 “控制面”,用于数据包发送的网络称为 “数据面”。
控制面、数据面统一的路由器:
控制面、数据面分离的 OpenFlow:
控制面部分为 OpenFlow 控制器,数据面部分为 OpenFlow 交换机,OpenFlow 实现了集中式控制模型设计。
从 OpenFlow 扩展为 SDN
OpenFlow 的 “可编程性” 是最为人称道的成就,OpenFlow 网络中的各种设置并不是通过转发数据包的 OpenFlow 交换机来完成的,而是通过统一控制多台 OpenFlow 交换机的 OpenFlow 控制器来完成的。OpenFlow 控制器对网络中的各种设备进行综合管理,这种行为就像对网络进行整体 “编程” 一样。基于 OpenFlow 为网络带来的可编程特性,Nick 和他的团队(包括加州大学伯克利分校的 Scott Shenker 教授)进一步提出了 SDN(Software Defined Network,软件定义网络)的概念。SDN 最初的原型主要是由 OpenFlow 交换机、控制器两部分组成。OpenFlow 的 “可编程性” 是 SDN 的基石。
SDN vs 传统网络:
其实,SDN 的概念据说最早是由 KateGreene 于 2009 年在 TechnologyReview 网站上评选年度十大前沿技术时提出。如果将网络中所有的网络设备视为被管理的资源,那么参考操作系统的原理,也可以抽象出一个网络操作系统(Network OS)的概念。这个网络操作系统一方面抽象了底层网络设备的具体细节,同时还为上层应用提供了统一的管理视图和编程接口。这样,基于网络操作系统这个平台,用户可以开发各种应用程序,通过软件来定义逻辑上的网络拓扑,以满足对网络资源的不同需求,而无需关心底层网络的物理拓扑结构。
SDN 三层架构:
SDN特征:
- 控制与转发分离。转发平面由受控转发的设备组成,转发方式以及业务逻辑由运行在分离出去的控制面上的控制应用所控制。
- 控制平面与转发平面之间的开放接口。SDN 为控制平面提供开放的网络操作接口,也称为可编程接口。通过这种方式,控制应用只需要关注自身逻辑,而不需要关注底层更多的实现细节。
- 逻辑上的集中控制。逻辑上集中的控制平面可以控制多个转发面设备,也就是控制整个物理网络,因而可以获得全局的网络状态视图,并根据该全局网络状态视图实现对网络的优化控制。
OpenFlow/SDN 的原理其实并不复杂,从严格意义上讲也很难算是具有革命性的创新。然而 OpenFlow/SDN 却引来了业界越来越多的关注,成为近年来名副其实的热门技术。SDN 得以快速发展,得益于互联网公司对 “软件定义一切” 的青睐,因为这种模式更能发挥他们在编程方面的优势。最初 SDN 的发展主要由 Googel,Facebook,Yahoo 等互联网巨头推动,他们希望以此来挣脱网络设备厂商的枷锁,获得更加灵活且契合自身需求的、更加低耗高效的网络基础设施。2011年,成立了开放网络基金会(Open Networking Foundation),专门负责 OpenFlow 标准和规范的维护和发展。同年,第一届开放网络峰会(Open Networking Summit)召开,发表了 SDN 白皮书《Software Defined Networking:The New Norm forNetworks》,为 OpenFlow 和 SDN 在学术界和工业界都做了很好的介绍和推广。2012 年初,召开的第二届开放网络峰会上,Google 宣布已经在其全球各地的数据中心骨干网络中大规模地使用 OpenFlow/SDN,从而证明了 OpenFlow 不再仅仅是停留在学术界的一个研究模型,而是已经完全具备了可以在产品环境中应用的技术成熟度。而后,Facebook 也宣布其数据中心中使用了 OpenFlow/SDN 的技术。
再后来思科、博通、IBM 等网络设备厂商为了应对新的网络虚拟化技术潮流也联合成立了开源平台项目 OpenDayLight,旨在促进 SDN 技术交流和产业化开源机构。但现在 ODL 也逐渐变得商业化,硬件厂商的入局说到底还是为了自身的利益。所以 ONS 最初要求加入者不得为任何网络设备厂商工作,也是希望防止制造商的利益冲突被引入。
SDN 的推进组织:
- ONF(Open Networking Foundation)
- ODL(OpenDayLight)
- ONOS(Open Network Operating System)
- NFV(Network Function Virtualization)
OpenFlow 的应用场景
随着 OpenFlow/SDN 概念的发展和推广,其研究和应用领域也得到了不断拓展。目前,关于 OpenFlow/SDN 的研究领域主要包括网络虚拟化、安全和访问控制、负载均衡、聚合网络和绿色节能等方面。另外,还有关于 OpenFlow 和传统网络设备交互和整合等方面的研究。
网络虚拟化 – FlowVisor
网络虚拟化的本质是要能够抽象底层网络的物理拓扑,能够在逻辑上对网络资源进行分片或者整合,从而满足各种应用对于网络的不同需求。为了达到网络分片的目的,FlowVisor 实现了一种特殊的 OpenFlow Controller,可以看作其他不同用户或应用的 Controllers 与网络设备之间的一层代理。因此,不同用户或应用可以使用自己的 Controllers 来定义不同的网络拓扑,同时 FlowVisor 又可以保证这些 Controllers 之间能够互相隔离而互不影响。下图展示了使用 FlowVisor 可以在同一个物理网络上定义出不同的逻辑拓扑。FlowVisor 不仅是一个典型的 OpenFlow 应用案例,同时还是一个很好的研究平台,目前已经有很多研究和应用都是基于 FlowVisor 做的。
负载均衡 – Aster*x
传统的负载均衡方案一般需要在服务器集群的入口处,通过一个 Gateway 或者 Router 来监测、统计服务器工作负载,并据此动态分配用户请求到负载相对较轻的服务器上。既然网络中所有的网络设备都可以通过 OpenFlow 进行集中式的控制和管理,同时应用服务器的负载可以及时地反馈到 OpenFlow Controller 那里,那么 OpenFlow 就非常适合做负载均衡的工作。Aster*x 通过 Host Manager 和 Net Manager 来分别监测服务器和网络的工作负载,然后将这些信息反馈给 Flow Manager,这样 Flow Manager 就可以根据这些实时的负载信息,重新定义网络设备上的 OpenFlow 规则,从而将用户请求(本质是网络包)按照服务器的能力进行调整和分发。
绿色节能的网络服务 – ElasticTree
在数据中心和云计算环境中,如何降低运营成本是一个重要的研究课题。能够根据工作负荷按需分配、动态规划资源,不仅可以提高资源的利用率,还可以达到节能环保的目的。ElasticTree 创新性地使用 OpenFlow,在不影响性能的前提下,根据网络负载动态规划路由,从而可以在网络负载不高的情况下选择性地关闭或者挂起部分网络设备,使其进入节电模式达到节能环保、降低运营成本的目的。
参考资料
http://net.zol.com.cn/461/4610667.html
https://www.sdnlab.com/sdn-guide/14716.html
http://www.just4coding.com/blog/2016/12/31/introducing-openflow/
https://www.li-rui.top/2018/12/01/network/openflow介绍/
https://www.opennetworking.org/images/stories/downloads/sdn-resources/onf-specifications/openflow/openflow-switch-v1.3.5.pdf
https://www.sdnlab.com/14484.html