/SDN

实现负载均衡

Primary LanguagePython

负载均衡

topo.py用于建立实验拓扑

输入命令 sudo mn --custom topo.py --topo mytopo --controller=remote,ip=127.0.0.1,port=6653 --switch ovsk,protocols=OpenFlow13

建立拓扑后运行sdn.py,实现负载均衡

输入命令 sudo python sdn.py

实验场景

服务器h2 h3上各自有不同的服务,h1是客户端。实现一个负载均衡的北向程序,当h2和h3向h1传输数据时,北向应用根据链路的使用状况动态的调整路由规则。

例如:当h2向h1使用s1-s2链路达到满负荷状态下,h3向h1的传输路径应该动态的调整为s3所在路径,而当h2停止向h1传输数据时,h3应调整回s1-s2路径。

小组分工

  • 吴君毅(031502629)
    身为队长,主要负责分工和监督队内工作,对每个流程都有参与其中,包括流程设计,负载均衡脚本的编写等。
  • 吕宇鹏(031502425)
    负责实验项目环境的搭建,例如pip,httplib2等工具;查找负载均衡的流量监控模块以及python相关的调试,并编写建立拓补的脚本。(队长的好助理)
  • 吴松青(031502630)
    负责制作项目视频并辅助设计流程
  • 郑珍发(031502641)
    负责设计各个路由器的流表
  • 张建桩(031502638)
    协助设计各个路由器的流表

代码思路

主要说明负载均衡,也就是sdn.py的思路,建拓扑大家都懂

场景的要求是实现h2到h3的负载均衡,由于能力有限,给一台路由器所下发的流表只能实现根据IP地址匹配后从一个口输出,所以并不能实现一台主机上发出的数据包可以分流到一台路由器的两个端口同时出去,所以只能退一步,实现不完全的负载均衡。
因为上述原因,因为一个主机发出的包只能走一个端口,经我们小组研究决定,让h2发给h1的数据包固定走s2->s1的路径,而h3发到h1的数据包则根据s2的1端口(即输出端口s2直连s1的那条)的流量绑定该端口是否空闲,如果空闲,则和h2的包走一条路,即s2的1端口出;如果不空闲,则和h2的包分开走,从s2的2端口出。总体**就是这样。

项目视频:点我咩