我正在开发 sdn 中多个控制器之间的负载平衡。在控制器 1 上计算负载后,我需要将其中的一部分迁移到控制器 2。我已经使用 mininet 创建了拓扑并运行 2 个远程 pox 控制器,一个在 127.0.0.1:6633 上,另一个在 127.0.0.1:6634 上。我如何在这些控制器之间进行通信?如何将控制器 1 的负载信息发送到控制器 2 并在那里迁移一些流?
2 回答
一般来说,您需要一个分布式 SDN 框架,控制器应该在其中相互通信。为了使控制器能够交换信息,您应该在它们之间建立通信通道。首先决定通信的类型,入站或出站。大多数分布式系统使用具有入站通信通道的出站作为故障安全解决方案。选择通信模块很容易。您有多种选择,但我将仅研究 2 种通用方法。第一个是 POX 的原生 messenger 组件https://github.com/noxrepo/pox/blob/carp/pox/messenger/init .py第二个也是 使用最广泛的是 RabbitMQ 消息交换代理系统https://www。 rabbitmq.com/tutorials/tutorial-one-python.html 您应该尝试遵循代理编程方法。这是一篇可以帮助您的论文http://jeremie.leguay.free.fr/files/disco_noms_2014.pdf。最后,如果您决定使用 Agents,那么有一个名为 SPADE https://pypi.python.org/pypi/SPADE的不错的 Python 库,但它有时会出现故障。
POX 不是分布式控制器。我真的建议您立即迁移到 ONOS 或 opendaylight。您将在 ONOS 之上实施您的解决方案。