sapliang 2013-12-19
控制器负责整个SDN网络的集中化控制,对于把握全网置资源视图、改善网络资源交付都具有非常重要的作用。但控制能力的集中化,也意味着控制器局的安全性和性能成为全网的瓶颈,一旦控制器在性能或安全性上得不到保障,随之而来的是全网的服务能力的降级甚至是瘫。;另外,单一的控制器也无法应对跨多个地域的SND网络问题,需要多个SDN控制器组成的分布式集群,以避免单一的控制器节点在可靠性、扩展性、性能方面的问题。目前,用于多个控制器之间沟通和联系的东西向接口还没定义标准,但专家表示,一些非常成熟的集群技术可以被运用到SDN网络中来解决上述难题。
控制器的软件化让服务器可以作为控制器的载体,控制器集群可以以服务器集群为基础搭建。因为SDN控制器在SDN网络中的重要作用,控制器集群的设计更具特殊性,例如要能够支持正在运行的集群中增加新的控制器,以改善扩展性、保存失效控制器对应的交换机状态一保证可靠性,特别是因为控制器掌握着全网的SDN交换设备,通过分布式的协作方式确保网络状态的一致性尤其重要,一个典型的基于控制器集群的SDN架构如图所示。
基于控制器集群的SDN架构
如图,SDN可充分利用服务器集群技术(例如Hazelcast)部署用软件实现的控制器,而对一个分布式的集群而言,最关键的是控制器之间的协作,系统中需要专门设置集群通信机制用于控制器之间的信息传递,如JGroups通信库已经成为了比较成熟的技术。
为保证控制器集群对SDN网络的控制效果,有两个方面的设计与实现非常重要。第一是主控制器的选举,主控制器主要负责生成和维护全网范围内的控制器和交换机状态信息,一旦出现失效,就需要从集群的副控制器中选举一个成为新的主控制器。第二是控制器集群对交换机的透明化,即在SDN网络的运行过程中,交换机无需关心当前他接受的是哪一台控制器发来的命令,同时在其向控制器发送数据包时,能保持之前单一控制器的操作方式,从而保证控制器在逻辑上的集中。为了实现上述目标,控制器集群设计的关键要素包含以下:
1. 主控制器选举
在网络运行过程中,集群的副控制器需要周期性的监控主控制器的工作状态,一旦发现访问不可达,就要启动主控制器的选举,集群中主控制器的选举,业界已有不少算法,例如基于paxos的分布式选举算法,在算法设计中,需要考虑算法实现的复杂度,特别是如果控制器集群部署在广域网中,还要考虑带宽\延迟等网络质量因素。
2. 集群虚拟地址
为了实现控制器之间的负载均衡,控制器集群可以利用传统的负载均衡技术,例如在交换机向控制器进行注册时,可以向某个静态的虚拟IP地址发送,然后控制器集群会根据负载均衡算法,通过控制器间的通信确定并记录该虚拟地址对应的控制器,并要求其负责对该交换机的控制,而控制器返回给交换机的数据包也将以虚拟IP地址为源地址,实现控制器集群对交换机的透明化。
3. 全网拓扑获取
SDN网络中的拓扑信息是实现资源优化调度的关键。为了获得全网控制器和交换机的工作情况,需要各个控制器周期的进行链路发现,并将采集回来的网络信息发送给主控制器汇总,再由主控制器统一下发给各个控制器。如果在定制数据流的转发策略时,控制器发现数据流传输涉及的设备超过其控制的交换机范围时,将会根据全网拓扑告知交换机对应的控制器,并通过协商制定一致的策略,进而统一下发给交换机。
4. 控制器失效应付
无论主控制器还是副控制器失效,集群都可以利用负载均衡技术,将此前指派失效服务器的虚拟IP地址映射到其他工作正常的控制器,同时触发对全网拓普信息的更新和获取。