29、探索 OpenStack、OpenDaylight 与混合 SDN 网络

探索 OpenStack、OpenDaylight 与混合 SDN 网络

1. OpenStack 初探

OpenStack 是一个旨在解决大型问题的项目,在虚拟化数据中心领域有着广泛的应用。对于想要尝试 OpenStack 的用户,有两种轻量级的方式可供选择。

1.1 DevStack 安装

DevStack 是一种一体化的安装方式,它通过克隆 DevStack 的 Git 仓库并安装一系列工具和脚本来搭建 OpenStack 环境。由于 DevStack 会以 root 身份运行并对系统进行大量更改,因此建议在专门的服务器或虚拟机上进行安装。以下是详细的安装步骤:
1. 创建具有 root 权限且无需密码提示的用户 stack

$ sudo useradd -s /bin/bash -d /opt/stack -m stack
$ echo "stack ALL=(ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/stack
$ sudo su - stack
  1. 克隆 DevStack 的 Git 仓库:
$ git clone https://git.openstack.org/openstack-dev/devstack
  1. 进入 devstack 目录并创建 local.conf 文件:
$ cd devstack/
$ cat local.conf
[[local|localrc]]
ADMIN_PASSWORD=secret
DATABASE_PASSWORD=$ADMIN_PASSWORD
RABBIT_PASSWORD=$ADMIN_PASSWORD
SERVICE_PASSWORD=$ADMIN_PASSWORD
  1. 开始安装:
$ ./stack.sh

安装完成后,可以查看 /opt/stack/ 目录下的不同项目和配置文件:

echou@ubuntu:~$ ls /opt/stack/
cinder devstack.subunit horizon neutron requirements
data examples.desktop keystone nova status
devstack glance logs noVNC tempest

1.2 TryStack 使用

TryStack 是一个基于云的沙箱环境,用户可以免费注册使用。它能让用户快速体验 OpenStack 的仪表盘并启动第一个实例。以下是使用 TryStack 的主要步骤:
1. 注册 TryStack 账号。
2. 启动实例时,需要创建或导入公钥以确保安全,并为安全组创建入站安全规则。例如,创建允许 ICMP、SSH 和 TCP 端口 8000 的入站规则,用于测试 Python 的 HTTP 服务器模块。
3. 测试主机:

echou@ubuntu:~$ ping 8.43.87.101
PING 8.43.87.101 (8.43.87.101) 56(84) bytes of data.
64 bytes from 8.43.87.101: icmp_seq=1 ttl=128 time=106 ms
64 bytes from 8.43.87.101: icmp_seq=2 ttl=128 time=100 ms
^C
--- 8.43.87.101 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1002ms
rtt min/avg/max/mdev = 100.802/103.765/106.728/2.963 ms
# Host can ping but cannot ssh due to key authentication error
echou@ubuntu:~$ ssh ubuntu@8.43.87.101
Permission denied (publickey).
  1. 使用正确的密钥访问虚拟机,安装 Python 并启动 Python 的 SimpleHTTPServer 模块:
# Host with correct public key
ssh ubuntu@8.43.87.101
The authenticity of host '8.43.87.101 (8.43.87.101)' can't be established.
ECDSA key fingerprint is
Welcome to Ubuntu 16.04 LTS (GNU/Linux 4.4.0-21-generic x86_64)
...
ubuntu@echou-u01:~$
ubuntu@echou-u01:~$ python2.7 -m SimpleHTTPServer
Serving HTTP on 0.0.0.0 port 8000 ...
[ip] - - [13/Apr/2017 14:42:25] "GET / HTTP/1.1" 200 -
[ip] - - [13/Apr/2017 14:42:26] code 404, message File not found
[ip] - - [13/Apr/2017 14:42:26] "GET /favicon.ico HTTP/1.1" 404 -

1.3 OpenStack 尝试流程

graph LR
    A[选择尝试方式] --> B{DevStack}
    A --> C{TryStack}
    B --> B1[创建 stack 用户]
    B1 --> B2[克隆仓库]
    B2 --> B3[创建 local.conf 文件]
    B3 --> B4[开始安装]
    C --> C1[注册账号]
    C1 --> C2[启动实例]
    C2 --> C3[创建安全规则]
    C3 --> C4[测试主机]

2. OpenDaylight 介绍

OpenDaylight(ODL)是一个于 2013 年发起的开源项目,旨在推动软件定义网络(SDN)和网络功能虚拟化(NFV)的发展。该项目的软件采用 Java 编写,支持 OpenFlow 等技术,具有模块化的特点,能够在不同环境中实现网络服务。

2.1 OpenDaylight 架构

OpenDaylight 的架构核心是一个服务抽象层,它提供标准化的南向 API 和协议插件,允许与 OpenFlow 等硬件设备以及各种厂商特定的设备进行交互。同时,还提供北向的 OpenDaylight API,通常是基于 REST 或 NetConfig 的 API。

2.2 OpenDaylight 编程组件

OpenDaylight 平台由以下几个关键组件组成:
| 组件名称 | 描述 |
| ---- | ---- |
| Java | 用于编写 OpenDaylight 应用程序,Java 接口用于事件监听、规范定义和模式形成。 |
| Maven | Java 的构建系统。 |
| Open Service Gateway Initiative (OSGi) | 用于开发和部署模块化软件程序和库的 Java 框架,包括捆绑插件和 JVM 级别的服务注册表。 |
| Karaf | 轻量级的 OSGi 运行时,用于加载模块和捆绑包。 |
| Config subsystem | 通过在运行时读取 XML 文件来完成配置。 |
| Model-Driven SAL (MD-SAL) | 控制器平台的核心,不同层和模块通过预定义的 API 相互连接。它接收 YANG 数据模型,并将数据分为配置数据存储和操作数据存储。 |

2.3 OpenDaylight 应用开发模式

OpenDaylight 采用模型 - 视图 - 控制(MVC)的方法进行应用开发:
- 模型(Model) :使用 YANG 建模语言,不仅用于描述数据,还用于向注册的监听器发送通知和在不同模块之间进行远程过程调用(RPC)。
- 视图(View) :自动生成的 RESTCONF 视图。

2.4 OpenDaylight 示例

以下是一个 OpenDaylight 示例的操作步骤:
1. 增加虚拟机的内存分配,避免后续出现内存错误。例如,将内存从 2G 增加到 4G。
2. 切换到 OpenDaylight 目录并更新教程代码:

$ cd SDNHub_Opendaylight_Tutorial/
$ git pull --rebase
  1. 下载 Lithium 版本并启动控制器:
$ wget https://nexus.opendaylight.org/content/groups/public/org/opendaylight/integration/distribution-karaf/0.3.0-Lithium/distribution-karaf-0.3.0-Lithium.zip
$ unzip distribution-karaf-0.3.0-Lithium.zip
$ cd distribution-karaf-0.3.0-Lithium/
$ ./bin/karaf
  1. 在控制器 shell 中安装相关功能:
opendaylight-user@root>feature:list
opendaylight-user@root>feature:install odl-dlux-core
opendaylight-user@root>feature:install odl-openflowplugin-all
opendaylight-user@root>feature:install odl-l2switch-all
  1. 安装 UI 后,通过 http://<ip>:8181/index.html 访问 UI,默认用户名和密码为 admin / admin
  2. 安装其他功能:
opendaylight-user@root>feature:install odl-restconf
opendaylight-user@root>feature:install odl-mdsal-apidocs
  1. 通过 http://<ip>:8181/apidoc/explorer/index.html 访问 API 文档。
  2. 关闭控制器:
opendaylight-user@root>system:shutdown
  1. 切换到教程目录并重启控制器:
ubuntu@sdnhubvm:~/SDNHub_Opendaylight_Tutorial/distribution/opendaylight-karaf/target/assembly[18:26] (master)$ ./bin/karaf
  1. 安装学习交换机、OpenFlow 插件和 RESTCONF:
opendaylight-user@root>feature:install sdnhub-tutorial-learning-switch
opendaylight-user@root>feature:install odl-openflowplugin-all
opendaylight-user@root>feature:install odl-restconf
  1. 在另一个窗口中启动 Mininet 单交换机三主机拓扑:
$ sudo mn --topo single,3 --mac --switch ovsk --controller remote
  1. 由于未安装控制器的流缺失条目, h1 无法 ping 通 h2
mininet> h1 ping -c2 h2
PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
From 10.0.0.1 icmp_seq=1 Destination Host Unreachable
From 10.0.0.1 icmp_seq=2 Destination Host Unreachable
--- 10.0.0.2 ping statistics ---
2 packets transmitted, 0 received, +2 errors, 100% packet loss, time 999ms
pipe 2
  1. 安装流缺失条目:
$ sudo ovs-ofctl dump-flows s1
NXST_FLOW reply (xid=0x4):
$ ovs-ofctl add-flow tcp:127.0.0.1:6634 -OOpenFlow13 priority=1,action=output:controller
$ sudo ovs-ofctl dump-flows s1
NXST_FLOW reply (xid=0x4):
 cookie=0x0, duration=21.407s, table=0, n_packets=8, n_bytes=560,
idle_age=2, priority=1 actions=CONTROLLER:65535
  1. 此时 h1 可以成功 ping 通 h2
mininet> h1 ping -c 2 h2
PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
64 bytes from 10.0.0.2: icmp_seq=1 ttl=64 time=21.5 ms
64 bytes from 10.0.0.2: icmp_seq=2 ttl=64 time=3.49 ms
--- 10.0.0.2 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1002ms
rtt min/avg/max/mdev = 3.493/12.523/21.554/9.031 ms

2.5 OpenDaylight 操作流程

graph LR
    A[准备环境] --> B[更新代码]
    B --> C[下载并启动控制器]
    C --> D[安装功能]
    D --> E[访问 UI 和 API 文档]
    E --> F[关闭控制器]
    F --> G[重启控制器]
    G --> H[安装插件]
    H --> I[启动 Mininet 拓扑]
    I --> J[测试连通性]
    J --> K{是否连通}
    K -- 否 --> L[安装流缺失条目]
    L --> J
    K -- 是 --> M[结束]

3. 混合 SDN 网络分析

3.1 SDN 发展现状

如今,软件定义网络(SDN)备受网络工程师关注。自 2010 年 OpenFlow 引入以来,传统网络向 SDN 转型的消息不断。这一转变带来了基础设施灵活性的竞争优势,许多知名的 SDN 初创公司纷纷涌现,提供如 SD - WAN 等新的网络服务。在标准制定方面,SDN 标准也在逐步获批。市场上,像 Quanta 和 Pica8 等供应商开始合作,生产与软件解耦的运营商级硬件。然而,现实情况是,SDN 技术的部署似乎更倾向于超大规模网络。像 Internet2 这样的高等教育研究网络以及 Google、Facebook 和 Microsoft 等公司,都公开了他们的 SDN 驱动项目,其中许多项目还进行了详细的开源。但在中端服务提供商和企业领域,仍然存在观望态度。

3.2 不采用 SDN 的原因及反驳

3.2.1 网络规模小无法受益

有人认为自己的网络规模太小,无法从 SDN 中获得好处。确实,较大的网络拥有更多的网络设备,如果转向 SDN 能够节省成本或提高灵活性,那么它们将获得更多的收益。但每个网络情况不同,SDN 带来的竞争优势程度也有所差异。如果认为 SDN 是未来的正确方向,那么现在开始规划永远都不晚。

3.2.2 技术不成熟

有人觉得 SDN 技术不够成熟,不适合用于生产环境。的确,SDN 技术的发展速度比一些成熟技术更快,追求前沿技术有时可能会面临风险。但可以通过对网络进行分段,在不影响生产网络的情况下安全地评估该技术。无论是小型网络还是大型网络,都能从 SDN 中受益,将大型网络分割成较小的网络也是有益的。

3.2.3 工程资源不足

有人担心没有足够的工程资源来投入 SDN。虽然 SDN 项目(如 OpenFlow)最初是斯坦福大学的研究项目,但如今已经有了很大的发展。阅读相关内容表明,即使资源有限,人们也认为投资时间学习这项技术是有价值的。每项技术的发展都是一个渐进的过程,今天投入时间学习的知识,将为未来的新技术奠定基础,即使现在可能用不到。

3.2.4 缺乏过渡计划

有人认为没有向 SDN 迁移的过渡计划。可以将网络视为混合 SDN 网络来解决这个问题。从传统的、由供应商驱动的网络向自动化的软件定义网络迁移需要时间、精力和资金投入。在过渡期间,网络仍需保持正常运行。以 Google 为例,在 2017 年的开放网络峰会上,一向保密的 Google 详细介绍了他们从传统网络向基于 OpenFlow 的广域网迁移的过程(http://opennetsummit.org/archives/apr12/hoelzle - tue - openflow.pdf)。据估计,2010 年如果 Google 是一家互联网服务提供商,它将是世界第二大。虽然很少有人能达到 Google 的规模,但知道即使像 Google 这样的大型网络也能在不中断服务的情况下完成迁移,这让人感到欣慰。

3.3 混合 SDN 迁移步骤建议

以下是一些向混合 SDN 网络迁移的步骤建议:
1. 标准化网络 :对网络进行标准化,有助于立即获得一些好处。这一步骤不需要一次性完成,很多时候需要按顺序执行。
2. 分段评估 :将网络进行分段,在不影响生产网络的情况下,对 SDN 技术进行安全评估。
3. 制定过渡计划 :参考成功案例(如 Google),制定适合自己网络的过渡计划。

3.4 混合 SDN 迁移流程

graph LR
    A[开始迁移] --> B[标准化网络]
    B --> C[分段评估技术]
    C --> D[制定过渡计划]
    D --> E[逐步迁移]
    E --> F{是否完成迁移}
    F -- 否 --> E
    F -- 是 --> G[结束迁移]

3.5 迁移原因与应对措施总结

不采用 SDN 的原因 应对措施
网络规模小无法受益 认识到每个网络情况不同,现在开始规划 SDN 迁移
技术不成熟 对网络进行分段评估,降低风险
工程资源不足 认识到技术发展是渐进的,学习的知识可作为未来基础
缺乏过渡计划 参考成功案例,制定适合自己网络的过渡计划

4. 总结

本文深入探讨了 OpenStack、OpenDaylight 和混合 SDN 网络的相关内容。在 OpenStack 方面,介绍了使用 DevStack 和 TryStack 两种轻量级方式来尝试 OpenStack 的具体步骤,包括安装、配置和测试等操作。对于 OpenDaylight,详细阐述了其架构、编程组件、应用开发模式,并通过具体示例展示了其操作流程。在混合 SDN 网络部分,分析了 SDN 发展现状,探讨了不采用 SDN 的原因,并给出了相应的反驳和迁移步骤建议。

随着网络技术的不断发展,SDN 作为一种具有创新性和前瞻性的技术,将在未来的网络领域发挥重要作用。无论是大型网络还是中小型网络,都可以根据自身情况,逐步探索和应用 SDN 技术,以提高网络的灵活性和竞争力。希望本文能为网络工程师和相关技术人员提供有价值的参考,帮助他们更好地理解和应用这些技术。

考虑可再生能源出力不确定性的商业园区用户需求响应策略(Matlab代码实现)内容概要:本文围绕“考虑可再生能源出力不确定性的商业园区用户需求响应策略”展开,结合Matlab代码实现,研究在可再生能源(如风电、光伏)出力具有不确定性的背景下,商业园区如何制定有效的需求响应策略以优化能源调度和提升系统经济性。文中可能涉及不确定性建模(如场景生成缩减)、优化模型构建(如随机规划、鲁棒优化)以及需求响应机制设计(如价格型、激励型),并通过Matlab仿真验证所提策略的有效性。此外,文档还列举了大量相关的电力系统、综合能源系统优化调度案例代码资源,涵盖微电网调度、储能配置、负荷预测等多个方向,形成一个完整的科研支持体系。; 适合人群:具备一定电力系统、优化理论和Matlab编程基础的研究生、科研人员及从事能源系统规划运行的工程技术人员。; 使用场景及目标:①学习如何建模可再生能源的不确定性并应用于需求响应优化;②掌握使用Matlab进行商业园区能源系统仿真优化调度的方法;③复现论文结果或开展相关课题研究,提升科研效率创新能力。; 阅读建议:建议结合文中提供的Matlab代码实例,逐步理解模型构建求解过程,重点关注不确定性处理方法需求响应机制的设计逻辑,同时可参考文档中列出的其他资源进行扩展学习交叉验证。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值