OpenDayLight (Carbon 版本) 启动与组件安装

一、实验目的

本实验旨在完成 OpenDayLight(ODL)控制器的启动,并安装 L2Switch 等关键组件,为后续 SDN 网络实验(如 OpenFlow 交换机控制、二层转发)做准备。


二、环境准备

  • 系统:Linux(推荐 Ubuntu 或 CentOS)
  • 软件:OpenDayLight Carbon 版本(distribution-karaf-0.6.1-Carbon
  • 权限:root 或 sudo 权限

三、操作步骤

1. 进入 root 权限

bash

运行

复制代码
sudo -i
  • 说明:切换到 root 用户,避免后续操作出现权限不足问题。

2. 进入 ODL 安装目录

bash

运行

复制代码
cd /distribution-karaf-0.6.1-Carbon
  • 说明:进入 OpenDayLight 的 Karaf 运行目录,后续启动和组件安装均在此目录下进行。

3. 启动 OpenDayLight Karaf 容器

bash

运行

复制代码
./bin/karaf
  • 预期结果:
    • 终端会输出启动日志,最后进入 Karaf 交互命令行(提示符为 opendaylight-user@root>)。
    • 等待 1-2 分钟,待所有基础组件加载完成后,再执行后续安装命令。
    • 截图要求:截取包含启动日志末尾和 opendaylight-user@root> 提示符的界面。

4. 安装 L2Switch 及其他关键组件

在 Karaf 交互命令行中,依次执行以下 feature:install 命令,安装所需组件:

bash

运行

复制代码
# 安装 RESTCONF 组件(提供北向 REST API)
feature:install odl-restconf

# 安装 L2Switch 核心组件(实现二层转发功能)
feature:install odl-l2switch-switch

# 安装 OpenFlow 插件(支持 OpenFlow 交换机交互)
feature:install odl-openflowplugin-all

# 安装 DLux 可视化界面(提供 Web 管理控制台)
feature:install odl-dlux-all

# 安装 MDSAL 数据存储组件(ODL 的核心数据模型层)
feature:install odl-mdsal-all

# 安装 ADSAL 北向接口组件(部分版本需依赖)
feature:install odl-adsal-northbound
  • 说明:每个命令执行后,会自动下载并安装对应的组件,过程中会输出日志,等待命令执行完成(提示符返回 opendaylight-user@root>)再执行下一条。

5. 验证组件安装结果

执行以下命令,确认所有组件已成功安装:

bash

运行

复制代码
feature:list -i | grep -E "odl-restconf|odl-l2switch-switch|odl-openflowplugin-all|odl-dlux-all|odl-mdsal-all|odl-adsal-northbound"
  • 预期结果:
    • 输出列表中,所有组件的状态均为 Installed
    • 截图要求:截取上述命令的执行结果,确保所有目标组件的状态清晰可见。

6. 访问 OpenDayLight Web 管理界面

  1. 确保 ODL 控制器已启动且组件安装完成。

  2. 在浏览器中输入以下 URL(将 [ODL_host_ip] 替换为你的 ODL 控制器主机 IP):

    plaintext

    复制代码
    http://[ODL_host_ip]:8181/index.html
  3. 在登录界面输入默认账号密码:

    • 用户名:admin
    • 密码:admin
  4. 登录成功后,进入 Topology(拓扑)界面,查看初始拓扑(此时无交换机 / 主机接入,界面为空)。

    • 截图要求:截取登录后的拓扑界面。

7. 使用 Mininet 创建线性拓扑并连接 ODL 控制器

  1. 打开安装了 Mininet 的虚拟机(需与 ODL 控制器网络互通),执行以下命令创建拓扑: bash

    运行

    复制代码
    sudo mn --controller=remote,ip=127.0.0.1 --topo=linear,2 --switch=ovsk,protocols=OpenFlow13
    • 参数说明:
      • --controller=remote,ip=xxx.xxx.xxx.xxx:指定远端控制器 IP(替换为你的 ODL 主机 IP)。
      • --topo=linear,2:创建线性拓扑,包含 2 个交换机和 2 个主机(h1-s1-s2-h2)。
      • --switch=ovsk,protocols=OpenFlow13:使用 Open vSwitch,指定 OpenFlow 1.3 协议。
  2. 执行命令后,Mininet 会创建虚拟网桥(s1、s2)和主机(h1、h2),并自动连接到 ODL 控制器。


8. 在 ODL Web 界面查看拓扑变化

  1. 回到 ODL 的 Web 拓扑界面,点击 Reload(刷新)按钮,或直接刷新浏览器页面。
  2. 此时拓扑图会显示两个交换机节点(s1、s2)和两个主机节点(h1、h2),以及它们之间的连接关系。
    • 截图要求:截取显示完整拓扑的界面。

9. 通过 RESTCONF 查看交换机端口信息

  1. 使用浏览器或 Postman 等工具,发送 HTTP GET 请求访问以下链接(将 127.0.0.1 替换为你的 ODL 控制器 IP,如需查看第二个交换机,将 openflow:1 改为 openflow:2):

    plaintext

    复制代码
    http://127.0.0.1:8080/restconf/operational/network-topology:network-topology/topology/flow:1/node/openflow:1
  2. 预期结果:返回 JSON 格式的响应,包含交换机 openflow:1 的端口、连接状态等信息。

    • 截图要求:截取完整的响应结果。

四、常见问题与排查(续)

  1. Mininet 无法连接 ODL 控制器

    • 原因:控制器 IP 配置错误、防火墙阻止了 6653 端口通信,或 OpenFlow 协议版本不匹配。
    • 解决:
      • 检查 --controller 参数中的 IP 是否正确,确保 ODL 主机和 Mininet 虚拟机网络互通。
      • 关闭 ODL 主机和 Mininet 虚拟机的防火墙(如 sudo ufw disable)。
      • 确认 Mininet 命令中 protocols=OpenFlow13 与 ODL 控制器支持的版本一致。
  2. ODL 拓扑界面不显示交换机 / 主机

    • 原因:Mininet 未成功连接控制器,或组件安装不完整(如 odl-l2switch-switchodl-openflowplugin-all 未安装成功)。
    • 解决:
      • 检查 Mininet 终端输出,确认是否有 Connected to controller 相关日志。
      • 重新执行 feature:install 命令安装缺失的组件,重启 ODL 控制器后重试。
      • 刷新拓扑界面或点击 Reload 按钮。
  3. RESTCONF 请求返回 404/401 错误

    • 原因:odl-restconf 组件未安装成功,或请求路径错误、权限不足。
    • 解决:
      • 确认 odl-restconf 已安装(使用 feature:list -i | grep odl-restconf 验证)。
      • 检查请求 URL 中的 IP、端口、路径是否正确,部分 ODL 版本需添加 http://admin:admin@[ODL_host_ip]:8080/... 携带认证信息。
相关推荐
geovindu1 小时前
CSharp: Bridge Pattern
开发语言·后端·桥接模式·结构型模式
এ慕ོ冬℘゜2 小时前
深入 JavaScript BOM:掌握 window 对象的窗口控制魔法
开发语言·javascript·ecmascript
2501_941982052 小时前
企业微信二次开发:如何用 Python 搭建通用的 Webhook 实时消息接收
开发语言·python·企业微信
逝水无殇2 小时前
C# 特性详解
开发语言·后端·c#
灵晔君2 小时前
【C++】二叉搜索树
开发语言·c++
LongtengGensSupreme3 小时前
C#图像内存高速拷贝:使用Marshal.AllocHGlobal与ArrayPool实现内存拷贝的几个方法
开发语言·数码相机·c#
Java面试题总结3 小时前
Python,单引号和双引号有何区别
开发语言·python
鱼子星_3 小时前
【C++】内存管理:内存分布,new/delete的使用及细节处理,new/delete的底层,定位new表达式
开发语言·c++·笔记
学逆向的3 小时前
汇编——函数
开发语言·汇编·网络安全
咸鱼翻身小阿橙3 小时前
多线程解析
java·开发语言