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/... 携带认证信息。
相关推荐
两个人的幸福15 小时前
Windows 桌面应用自研 PHP 队列(下):完整代码与六大工程化优化
php
BingoGo3 天前
PHP 泛型之殇 泛型 RFC 提案被拒绝
后端·php
JaguarJack3 天前
PHP 泛型之殇 泛型 RFC 提案被拒绝
后端·php
用户3074596982074 天前
PHP 扩展——从入门到理解
php
鹏仔先生4 天前
拷贝漫画APP下载页PHP程序,后台带免费AI写作
php
LDR0064 天前
Type-C 快充全面升级!LDR6601 赋能个人护理便携电机,重塑剃须刀 / 理发器新体验
c语言·开发语言
雪碧聊技术4 天前
Tree.js是什么?一文讲透
开发语言·javascript·ecmascript
码云数智-园园4 天前
C++20 Modules 模块详解
java·开发语言·spring
swordbob4 天前
NIO的channel中什么是 fd(File Descriptor,文件描述符)
java·开发语言·nio
源分享5 天前
Java线程同步的多种实现方法(非常详细)
java·开发语言·jvm