如何在Mininet Shell中运行脚本?SDN课程负载均衡器实现咨询
如何在Mininet Shell中运行脚本并完成SDN负载均衡作业?
嗨,我来一步步帮你搞定这个作业的脚本运行问题,结合你的拓扑(h1-h4客户端、h5-h8服务器、负载均衡交换机),咱们分步骤来:
一、先启动POX负载均衡控制器
控制器得先跑起来,不然Mininet的拓扑找不到“指挥中心”,会直接罢工:
- 打开一个全新的终端窗口(别和后面Mininet的终端混在一起)
- 切换到POX的安装目录,一般是
cd pox(如果你的POX在其他路径,就换成对应的目录) - 启动你的控制器脚本,命令是:
这里./pox.py log.level --DEBUG your_controller_script.pylog.level --DEBUG是为了输出详细的调试信息,方便你排查负载转发的问题,把your_controller_script.py换成你自己写的POX控制器文件名就行。
二、在Mininet Shell中运行拓扑脚本
有两种常用方式,选你顺手的来:
方式1:进入Mininet Shell后加载脚本
- 打开另一个终端,输入命令启动Mininet Shell:
sudo mn - 等出现
mininet>提示符后,加载你的拓扑脚本,记得写对路径(相对路径或绝对路径都可以):source ./your_topology_script.py - 加载完成后,你可以输入
nodes命令确认所有节点(h1-h8、交换机)都已经创建成功。
方式2:直接通过命令行参数启动拓扑
不用先进入Mininet Shell,直接在终端输入一条命令就能搞定:
sudo mn --custom your_topology_script.py --topo mytopo --controller remote,ip=127.0.0.1,port=6633
--custom:指定你的自定义拓扑脚本路径--topo mytopo:这里的mytopo是你脚本里定义的拓扑类名称(比如你写的拓扑类是class MyTopo(Topo),这里就写mytopo,注意小写)--controller remote:告诉Mininet咱们用的是刚才启动的远程POX控制器,ip=127.0.0.1是本地地址,port=6633是POX默认的控制器端口。
三、验证负载均衡功能
脚本跑起来后,得确认负载均衡真的生效了:
- 比如在Mininet Shell里打开客户端h1的终端:
xterm h1 - 在弹出的xterm窗口里,你可以用
ping测试连通性,或者如果是HTTP负载均衡,就用curl发送请求(比如curl h5、curl h6),同时盯着POX控制器的终端输出,看看是不是随机把请求转发到h5-h8中的某台服务器。 - 也可以在Mininet Shell里输入
dpctl dump-flows,查看交换机的流表,确认负载均衡的规则有没有被正确下发。
一些小提醒
- 一定要先启动POX控制器,再启动Mininet拓扑,不然交换机会因为找不到控制器进入故障模式。
- 运行Mininet必须加
sudo,因为创建虚拟网络设备需要系统权限。 - 如果你的拓扑脚本里用了特殊的交换机类型,记得在启动Mininet时加上
--switch参数,比如--switch ovsk(Open vSwitch,也是Mininet默认的交换机类型)。
内容的提问来源于stack exchange,提问作者Amit Yahav




